19bd2271cSDarkWyrm //------------------------------------------------------------------------------ 29bd2271cSDarkWyrm // ReadWriteTester.cpp 39bd2271cSDarkWyrm // 49bd2271cSDarkWyrm //------------------------------------------------------------------------------ 59bd2271cSDarkWyrm 69bd2271cSDarkWyrm // Standard Includes ----------------------------------------------------------- 79bd2271cSDarkWyrm #include <string.h> 89bd2271cSDarkWyrm 99bd2271cSDarkWyrm // System Includes ------------------------------------------------------------- 109bd2271cSDarkWyrm #include <Application.h> 119bd2271cSDarkWyrm #include <Clipboard.h> 129bd2271cSDarkWyrm 139bd2271cSDarkWyrm #define CHK CPPUNIT_ASSERT 149bd2271cSDarkWyrm 159bd2271cSDarkWyrm // Project Includes ------------------------------------------------------------ 169bd2271cSDarkWyrm 179bd2271cSDarkWyrm // Local Includes -------------------------------------------------------------- 189bd2271cSDarkWyrm #include "ReadWriteTester.h" 199bd2271cSDarkWyrm 209bd2271cSDarkWyrm // Local Defines --------------------------------------------------------------- 219bd2271cSDarkWyrm 229bd2271cSDarkWyrm // Globals --------------------------------------------------------------------- 239bd2271cSDarkWyrm 249bd2271cSDarkWyrm //------------------------------------------------------------------------------ 259bd2271cSDarkWyrm 269bd2271cSDarkWyrm /* 279bd2271cSDarkWyrm status_t Clear() 289bd2271cSDarkWyrm @case 1 299bd2271cSDarkWyrm @results Clear() returns B_ERROR 309bd2271cSDarkWyrm */ 319bd2271cSDarkWyrm void ReadWriteTester::Clear1() 329bd2271cSDarkWyrm { 33*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 349bd2271cSDarkWyrm BClipboard clip("Clear1"); 359bd2271cSDarkWyrm 36*394cc79eSshadow303 #ifdef TEST_R5 37*394cc79eSshadow303 CHK(false); 38*394cc79eSshadow303 #endif 399bd2271cSDarkWyrm CHK(clip.Clear() == B_ERROR); 409bd2271cSDarkWyrm } 419bd2271cSDarkWyrm 429bd2271cSDarkWyrm /* 439bd2271cSDarkWyrm status_t Clear() 449bd2271cSDarkWyrm @case 1 459bd2271cSDarkWyrm @results Clear() returns B_OK 469bd2271cSDarkWyrm data message is empty 479bd2271cSDarkWyrm */ 489bd2271cSDarkWyrm void ReadWriteTester::Clear2() 499bd2271cSDarkWyrm { 50*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 519bd2271cSDarkWyrm BClipboard clip("Clear2"); 529bd2271cSDarkWyrm BMessage *data; 539bd2271cSDarkWyrm 549bd2271cSDarkWyrm if ( clip.Lock() ) 559bd2271cSDarkWyrm { 569bd2271cSDarkWyrm CHK(clip.Clear() == B_OK); 579bd2271cSDarkWyrm if ( (data = clip.Data()) ) 589bd2271cSDarkWyrm CHK(data->IsEmpty()); 599bd2271cSDarkWyrm } 609bd2271cSDarkWyrm } 619bd2271cSDarkWyrm 629bd2271cSDarkWyrm /* 639bd2271cSDarkWyrm status_t Revert() 649bd2271cSDarkWyrm @case 1 659bd2271cSDarkWyrm @results Revert() returns B_ERROR 669bd2271cSDarkWyrm */ 679bd2271cSDarkWyrm void ReadWriteTester::Revert1() 689bd2271cSDarkWyrm { 69*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 709bd2271cSDarkWyrm BClipboard clip("Revert1"); 719bd2271cSDarkWyrm 72*394cc79eSshadow303 #ifdef TEST_R5 73*394cc79eSshadow303 CHK(false); 74*394cc79eSshadow303 #endif 759bd2271cSDarkWyrm CHK(clip.Revert() == B_ERROR); 769bd2271cSDarkWyrm } 779bd2271cSDarkWyrm 789bd2271cSDarkWyrm /* 799bd2271cSDarkWyrm status_t Revert() 809bd2271cSDarkWyrm @case 2 819bd2271cSDarkWyrm @results Revert() returns B_OK 829bd2271cSDarkWyrm data message is reset 839bd2271cSDarkWyrm */ 849bd2271cSDarkWyrm void ReadWriteTester::Revert2() 859bd2271cSDarkWyrm { 86*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 879bd2271cSDarkWyrm BClipboard clip("Revert2"); 889bd2271cSDarkWyrm BMessage *data; 899bd2271cSDarkWyrm char *str; 909bd2271cSDarkWyrm ssize_t size; 919bd2271cSDarkWyrm 929bd2271cSDarkWyrm if ( clip.Lock() ) 939bd2271cSDarkWyrm { 949bd2271cSDarkWyrm clip.Clear(); 959bd2271cSDarkWyrm if ( (data = clip.Data()) ) 969bd2271cSDarkWyrm { 979bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "Revert2", 8); 989bd2271cSDarkWyrm clip.Commit(); 999bd2271cSDarkWyrm } 1009bd2271cSDarkWyrm clip.Unlock(); 1019bd2271cSDarkWyrm } 1029bd2271cSDarkWyrm 1039bd2271cSDarkWyrm if ( clip.Lock() ) 1049bd2271cSDarkWyrm { 1059bd2271cSDarkWyrm clip.Clear(); 1069bd2271cSDarkWyrm if ( (data = clip.Data()) ) 1079bd2271cSDarkWyrm { 1089bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "Foo", 4); 1099bd2271cSDarkWyrm } 1109bd2271cSDarkWyrm CHK(clip.Revert() == B_OK); 1119bd2271cSDarkWyrm if ( (data = clip.Data()) ) 1129bd2271cSDarkWyrm { 1139bd2271cSDarkWyrm data->FindData("text/plain",B_MIME_TYPE, (const void **)&str, &size); 1149bd2271cSDarkWyrm CHK(strcmp(str,"Revert2") == 0); 1159bd2271cSDarkWyrm } 1169bd2271cSDarkWyrm clip.Unlock(); 1179bd2271cSDarkWyrm } 1189bd2271cSDarkWyrm } 1199bd2271cSDarkWyrm 1209bd2271cSDarkWyrm /* 1219bd2271cSDarkWyrm status_t Commit() 1229bd2271cSDarkWyrm @case 1 1239bd2271cSDarkWyrm @results Commit() returns B_ERROR 1249bd2271cSDarkWyrm */ 1259bd2271cSDarkWyrm void ReadWriteTester::Commit1() 1269bd2271cSDarkWyrm { 127*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 1289bd2271cSDarkWyrm BClipboard clip("Commit1"); 1299bd2271cSDarkWyrm 130*394cc79eSshadow303 #ifdef TEST_R5 131*394cc79eSshadow303 CHK(false); 132*394cc79eSshadow303 #endif 1339bd2271cSDarkWyrm CHK(clip.Commit() == B_ERROR); 1349bd2271cSDarkWyrm } 1359bd2271cSDarkWyrm 1369bd2271cSDarkWyrm /* 1379bd2271cSDarkWyrm status_t Commit() 1389bd2271cSDarkWyrm @case 2 1399bd2271cSDarkWyrm @results Commit() returns B_OK 1409bd2271cSDarkWyrm data is uploaded from system 1419bd2271cSDarkWyrm */ 1429bd2271cSDarkWyrm void ReadWriteTester::Commit2() 1439bd2271cSDarkWyrm { 144*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 1459bd2271cSDarkWyrm BClipboard clipA("Commit2"); 1469bd2271cSDarkWyrm BClipboard clipB("Commit2"); 1479bd2271cSDarkWyrm BMessage *data; 1489bd2271cSDarkWyrm char *str; 1499bd2271cSDarkWyrm ssize_t size; 1509bd2271cSDarkWyrm 1519bd2271cSDarkWyrm if ( clipA.Lock() ) 1529bd2271cSDarkWyrm { 1539bd2271cSDarkWyrm clipA.Clear(); 1549bd2271cSDarkWyrm if ( (data = clipA.Data()) ) 1559bd2271cSDarkWyrm { 1569bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "Commit2", 8); 1579bd2271cSDarkWyrm CHK(clipA.Commit() == B_OK); 1589bd2271cSDarkWyrm } 1599bd2271cSDarkWyrm clipA.Unlock(); 1609bd2271cSDarkWyrm } 1619bd2271cSDarkWyrm if ( clipB.Lock() ) 1629bd2271cSDarkWyrm { 1639bd2271cSDarkWyrm if ( (data = clipB.Data()) ) 1649bd2271cSDarkWyrm { 1659bd2271cSDarkWyrm data->FindData("text/plain",B_MIME_TYPE, (const void **)&str, &size); 1669bd2271cSDarkWyrm CHK(strcmp(str,"Commit2") == 0); 1679bd2271cSDarkWyrm } 1689bd2271cSDarkWyrm clipB.Unlock(); 1699bd2271cSDarkWyrm } 1709bd2271cSDarkWyrm } 1719bd2271cSDarkWyrm 1729bd2271cSDarkWyrm /* 1739bd2271cSDarkWyrm BMessage *Data() 1749bd2271cSDarkWyrm @case 1 1759bd2271cSDarkWyrm @results Data() returns NULL 1769bd2271cSDarkWyrm */ 1779bd2271cSDarkWyrm void ReadWriteTester::Data1() 1789bd2271cSDarkWyrm { 179*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 1809bd2271cSDarkWyrm BClipboard clip("Data1"); 1819bd2271cSDarkWyrm 182*394cc79eSshadow303 #ifdef TEST_R5 183*394cc79eSshadow303 CHK(false); 184*394cc79eSshadow303 #endif 1859bd2271cSDarkWyrm CHK(!clip.Data()); 1869bd2271cSDarkWyrm } 1879bd2271cSDarkWyrm 1889bd2271cSDarkWyrm /* 1899bd2271cSDarkWyrm BMessage *Data() 1909bd2271cSDarkWyrm @case 2 1919bd2271cSDarkWyrm @results Data() returns a message with correct data 1929bd2271cSDarkWyrm */ 1939bd2271cSDarkWyrm void ReadWriteTester::Data2() 1949bd2271cSDarkWyrm { 195*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 1969bd2271cSDarkWyrm BClipboard clip("Data2"); 1979bd2271cSDarkWyrm BMessage *data; 1989bd2271cSDarkWyrm char *str; 1999bd2271cSDarkWyrm ssize_t size; 2009bd2271cSDarkWyrm 2019bd2271cSDarkWyrm if ( clip.Lock() ) 2029bd2271cSDarkWyrm { 2039bd2271cSDarkWyrm clip.Clear(); 2049bd2271cSDarkWyrm data = clip.Data(); 2059bd2271cSDarkWyrm CHK(data); 2069bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "Data2", 6); 2079bd2271cSDarkWyrm clip.Commit(); 2089bd2271cSDarkWyrm clip.Unlock(); 2099bd2271cSDarkWyrm } 2109bd2271cSDarkWyrm if ( clip.Lock() ) 2119bd2271cSDarkWyrm { 2129bd2271cSDarkWyrm data = clip.Data(); 2139bd2271cSDarkWyrm CHK(data); 2149bd2271cSDarkWyrm data->FindData("text/plain",B_MIME_TYPE, (const void **)&str, &size); 2159bd2271cSDarkWyrm CHK(strcmp(str,"Data2") == 0); 2169bd2271cSDarkWyrm clip.Unlock(); 2179bd2271cSDarkWyrm } 2189bd2271cSDarkWyrm } 2199bd2271cSDarkWyrm 2209bd2271cSDarkWyrm /* 2219bd2271cSDarkWyrm BMessenger DataSource() 2229bd2271cSDarkWyrm @case 1 2239bd2271cSDarkWyrm @results DataSource returns and invalid BMessenger 2249bd2271cSDarkWyrm */ 2259bd2271cSDarkWyrm void ReadWriteTester::DataSource1() 2269bd2271cSDarkWyrm { 227*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 2289bd2271cSDarkWyrm BClipboard clip("DataSource1"); 2299bd2271cSDarkWyrm 2309bd2271cSDarkWyrm CHK(!clip.DataSource().IsValid()); 2319bd2271cSDarkWyrm } 2329bd2271cSDarkWyrm 2339bd2271cSDarkWyrm /* 2349bd2271cSDarkWyrm BMessenger DataSource() 2359bd2271cSDarkWyrm @case 2 2369bd2271cSDarkWyrm @results DataSource returns an invalid BMessenger 2379bd2271cSDarkWyrm */ 2389bd2271cSDarkWyrm void ReadWriteTester::DataSource2() 2399bd2271cSDarkWyrm { 240*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 2419bd2271cSDarkWyrm BClipboard clipA("DataSource2"); 2429bd2271cSDarkWyrm BClipboard clipB("DataSource2"); 2439bd2271cSDarkWyrm BMessage *data; 2449bd2271cSDarkWyrm 2459bd2271cSDarkWyrm if ( clipA.Lock() ) 2469bd2271cSDarkWyrm { 2479bd2271cSDarkWyrm clipA.Clear(); 2489bd2271cSDarkWyrm if ( (data = clipA.Data()) ) 2499bd2271cSDarkWyrm { 2509bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "DataSource2", 12); 2519bd2271cSDarkWyrm clipA.Commit(); 2529bd2271cSDarkWyrm } 2539bd2271cSDarkWyrm clipA.Unlock(); 2549bd2271cSDarkWyrm } 2559bd2271cSDarkWyrm CHK(!clipB.DataSource().IsValid()); 2569bd2271cSDarkWyrm } 2579bd2271cSDarkWyrm 2589bd2271cSDarkWyrm /* 2599bd2271cSDarkWyrm BMessenger DataSource() 2609bd2271cSDarkWyrm @case 3 2619bd2271cSDarkWyrm @results DataSource returns a valid BMessenger 2629bd2271cSDarkWyrm */ 2639bd2271cSDarkWyrm void ReadWriteTester::DataSource3() 2649bd2271cSDarkWyrm { 265*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 2669bd2271cSDarkWyrm BClipboard clipA("DataSource3"); 2679bd2271cSDarkWyrm BClipboard clipB("DataSource3"); 2689bd2271cSDarkWyrm BMessage *data; 2699bd2271cSDarkWyrm 2709bd2271cSDarkWyrm if ( clipA.Lock() ) 2719bd2271cSDarkWyrm { 2729bd2271cSDarkWyrm clipA.Clear(); 2739bd2271cSDarkWyrm if ( (data = clipA.Data()) ) 2749bd2271cSDarkWyrm { 2759bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "DataSource3", 12); 2769bd2271cSDarkWyrm clipA.Commit(); 2779bd2271cSDarkWyrm } 2789bd2271cSDarkWyrm clipA.Unlock(); 2799bd2271cSDarkWyrm } 2809bd2271cSDarkWyrm if ( clipB.Lock() ) 2819bd2271cSDarkWyrm { 2829bd2271cSDarkWyrm CHK(clipB.DataSource().IsValid()); 2839bd2271cSDarkWyrm CHK(clipB.DataSource() == be_app_messenger); 2849bd2271cSDarkWyrm } 2859bd2271cSDarkWyrm } 2869bd2271cSDarkWyrm 2879bd2271cSDarkWyrm /* 2889bd2271cSDarkWyrm status_t StartWatching(BMessenger target) 2899bd2271cSDarkWyrm @case 1 2909bd2271cSDarkWyrm @results return B_OK, target is notified when clipboard is written 2919bd2271cSDarkWyrm */ 2929bd2271cSDarkWyrm void ReadWriteTester::StartWatching1() 2939bd2271cSDarkWyrm { 294*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 2959bd2271cSDarkWyrm BClipboard clip("StartWatching1"); 2969bd2271cSDarkWyrm BMessage *data; 2979bd2271cSDarkWyrm char *str; 2989bd2271cSDarkWyrm ssize_t size; 2999bd2271cSDarkWyrm 3009bd2271cSDarkWyrm RWHandler handler; 3019bd2271cSDarkWyrm BMessenger target(&handler); 3029bd2271cSDarkWyrm CHK(clip.StartWatching(target) == B_OK); 3039bd2271cSDarkWyrm if ( clip.Lock() ) 3049bd2271cSDarkWyrm { 3059bd2271cSDarkWyrm clip.Clear(); 3069bd2271cSDarkWyrm data = clip.Data(); 3079bd2271cSDarkWyrm data->AddData("text/plain",B_MIME_TYPE, "StartWatching1", 15); 3089bd2271cSDarkWyrm clip.Commit(); 3099bd2271cSDarkWyrm clip.Unlock(); 3109bd2271cSDarkWyrm } 3119bd2271cSDarkWyrm CHK(handler.ClipboardModified()); 3129bd2271cSDarkWyrm clip.StopWatching(target); 3139bd2271cSDarkWyrm } 3149bd2271cSDarkWyrm 3159bd2271cSDarkWyrm /* 3169bd2271cSDarkWyrm status_t StopWatching(BMessenger target) 3179bd2271cSDarkWyrm @case 1 3189bd2271cSDarkWyrm @results return B_OK 3199bd2271cSDarkWyrm */ 3209bd2271cSDarkWyrm void ReadWriteTester::StopWatching1() 3219bd2271cSDarkWyrm { 322*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 3239bd2271cSDarkWyrm BClipboard clip("StopWatching1"); 3249bd2271cSDarkWyrm if ( clip.StartWatching(be_app_messenger) == B_OK ) 3259bd2271cSDarkWyrm { 3269bd2271cSDarkWyrm CHK(clip.StopWatching(be_app_messenger) == B_OK); 3279bd2271cSDarkWyrm } 3289bd2271cSDarkWyrm } 3299bd2271cSDarkWyrm 3309bd2271cSDarkWyrm /* 3319bd2271cSDarkWyrm status_t StopWatching(BMessenger target) 3329bd2271cSDarkWyrm @case 2 3339bd2271cSDarkWyrm @results return B_BAD_VALUE 3349bd2271cSDarkWyrm */ 3359bd2271cSDarkWyrm void ReadWriteTester::StopWatching2() 3369bd2271cSDarkWyrm { 337*394cc79eSshadow303 BApplication app("application/x-vnd.clipboardtest"); 3389bd2271cSDarkWyrm BClipboard clip("StopWatching2"); 3399bd2271cSDarkWyrm CHK(clip.StopWatching(be_app_messenger) == B_BAD_VALUE); 3409bd2271cSDarkWyrm } 3419bd2271cSDarkWyrm 3429bd2271cSDarkWyrm Test* ReadWriteTester::Suite() 3439bd2271cSDarkWyrm { 3449bd2271cSDarkWyrm TestSuite* SuiteOfTests = new TestSuite; 3459bd2271cSDarkWyrm 3469bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Clear1); 3479bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Clear2); 3489bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Revert1); 3499bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Revert2); 3509bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Commit1); 3519bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Commit2); 3529bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Data1); 3539bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, Data2); 3549bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, DataSource1); 3559bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, DataSource2); 3569bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, DataSource3); 3579bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, StartWatching1); 3589bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, StopWatching1); 3599bd2271cSDarkWyrm ADD_TEST4(BClipboard, SuiteOfTests, ReadWriteTester, StopWatching2); 3609bd2271cSDarkWyrm 3619bd2271cSDarkWyrm return SuiteOfTests; 3629bd2271cSDarkWyrm } 3639bd2271cSDarkWyrm 3649bd2271cSDarkWyrm // RWHandler 3659bd2271cSDarkWyrm 3669bd2271cSDarkWyrm // constructor 3679bd2271cSDarkWyrm RWHandler::RWHandler() 3689bd2271cSDarkWyrm : BHandler() 3699bd2271cSDarkWyrm { 3709bd2271cSDarkWyrm fClipboardModified = false; 3719bd2271cSDarkWyrm } 3729bd2271cSDarkWyrm 3739bd2271cSDarkWyrm // MessageReceived 3749bd2271cSDarkWyrm void 3759bd2271cSDarkWyrm RWHandler::MessageReceived(BMessage *message) 3769bd2271cSDarkWyrm { 3779bd2271cSDarkWyrm switch (message->what) { 3789bd2271cSDarkWyrm case B_CLIPBOARD_CHANGED: 3799bd2271cSDarkWyrm fClipboardModified = true; 3809bd2271cSDarkWyrm break; 3819bd2271cSDarkWyrm default: 3829bd2271cSDarkWyrm BHandler::MessageReceived(message); 3839bd2271cSDarkWyrm break; 3849bd2271cSDarkWyrm } 3859bd2271cSDarkWyrm } 3869bd2271cSDarkWyrm 387736e86f9Sejakowatz // ClipboardModified 388736e86f9Sejakowatz bool 389736e86f9Sejakowatz RWHandler::ClipboardModified() 390736e86f9Sejakowatz { 391736e86f9Sejakowatz return fClipboardModified; 392736e86f9Sejakowatz } 3939bd2271cSDarkWyrm 394