TEST(CClipboardTests, unmarshall_withTextSize285_getTextIsValid) { CClipboard clipboard; // 285 chars CString text; text.append("Synergy is Free and Open Source Software that lets you "); text.append("easily share your mouse and keyboard between multiple "); text.append("computers, where each computer has it's own display. No "); text.append("special hardware is required, all you need is a local area "); text.append("network. Synergy is supported on Windows, Mac OS X and Linux."); CString data; data += (char)0; data += (char)0; data += (char)0; data += (char)1; // 1 format added data += (char)0; data += (char)0; data += (char)0; data += (char)IClipboard::kText; data += (char)0; // 285 >> 24 = 285 / (256^3) = 0 data += (char)0; // 285 >> 16 = 285 / (256^2) = 0 data += (char)1; // 285 >> 8 = 285 / (256^1) = 1(.11328125) data += (char)29; // 285 - 256 = 29 data += text; clipboard.unmarshall(data, 0); clipboard.open(0); CString actual = clipboard.get(IClipboard::kText); EXPECT_EQ(text, actual); }
TEST(CClipboardTests, unmarshall_withTextAndHtml_getHtmlIsValid) { CClipboard clipboard; CString data; data += (char)0; data += (char)0; data += (char)0; data += (char)2; // 2 formats added data += (char)0; data += (char)0; data += (char)0; data += (char)IClipboard::kText; data += (char)0; data += (char)0; data += (char)0; data += (char)14; data += "synergy rocks!"; data += (char)0; data += (char)0; data += (char)0; data += (char)IClipboard::kHTML; data += (char)0; data += (char)0; data += (char)0; data += (char)10; data += "html sucks"; clipboard.unmarshall(data, 0); clipboard.open(0); CString actual = clipboard.get(IClipboard::kHTML); EXPECT_EQ("html sucks", actual); }
TEST(CClipboardTests, unmarshall_emptyData_hasTextIsFalse) { CClipboard clipboard; CString data; data += (char)0; data += (char)0; data += (char)0; data += (char)0; // 0 formats added clipboard.unmarshall(data, 0); clipboard.open(0); bool actual = clipboard.has(IClipboard::kText); EXPECT_FALSE(actual); }
void CServerProxy::setClipboard() { // parse ClipboardID id; UInt32 seqNum; CString data; CProtocolUtil::readf(m_stream, kMsgDClipboard + 4, &id, &seqNum, &data); LOG((CLOG_DEBUG "recv clipboard %d size=%d", id, data.size())); // validate if (id >= kClipboardEnd) { return; } // forward CClipboard clipboard; clipboard.unmarshall(data, 0); m_client->setClipboard(id, &clipboard); }