VirtualBox

Ignore:
Timestamp:
Jul 13, 2023 9:31:56 AM (20 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158386
Message:

Shared Clipboard: More testcases for event handling. bugref:9437

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardTransfers.cpp

    r100393 r100560  
    243243                                      RTCList<TESTTRANSFERROOTENTRY> &lstRoots, const char *pszObjPath, int rcExpected)
    244244{
    245     RT_NOREF(hTest);
    246 
    247245    PSHCLTRANSFER pTransfer;
    248246    int rc = ShClTransferCreate(SHCLTRANSFERDIR_TO_REMOTE, SHCLSOURCE_LOCAL, NULL /* Callbacks */, &pTransfer);
     
    297295}
    298296
    299 static void testTransferBasics(RTTEST hTest)
    300 {
    301     RT_NOREF(hTest);
    302 
     297static void testEvents(void)
     298{
     299    RTTestISub("Testing events");
     300
     301    SHCLEVENTSOURCE Source;
     302    RTTESTI_CHECK_RC_OK(ShClEventSourceCreate(&Source, 0));
     303    RTTESTI_CHECK(ShClEventSourceGetLast(&Source) == NULL); /* Should be empty. */
     304    RTTESTI_CHECK_RC_OK(ShClEventSourceDestroy(&Source));
     305    RTTESTI_CHECK_RC_OK(ShClEventSourceDestroy(&Source)); /* Destroying a second time, intentional. */
     306
     307    RTTESTI_CHECK_RC_OK(ShClEventSourceCreate(&Source, 42));
     308    PSHCLEVENT pEvent;
     309    RTTESTI_CHECK_RC_OK(ShClEventSourceGenerateAndRegisterEvent(&Source, &pEvent));
     310    ShClEventSourceReset(&Source);
     311    RTTESTI_CHECK(ShClEventSourceGetLast(&Source) != NULL); /* Event still in, as it holds a reference. */
     312    RTTESTI_CHECK(ShClEventRelease(pEvent) == 0);
     313    RTTESTI_CHECK(ShClEventRelease(pEvent) == UINT32_MAX); /* Ref count already was 0, so returns UINT32_MAX. */
     314    RTTESTI_CHECK(ShClEventRelease(pEvent) == UINT32_MAX); /* Again. */
     315    RTTESTI_CHECK(ShClEventSourceGetLast(&Source) == NULL); /* Now it should be empty. */
     316    RTTESTI_CHECK_RC_OK(ShClEventSourceDestroy(&Source));
     317
     318    /* Test delayed destruction of the event by retaining it. */
     319    RTTESTI_CHECK_RC_OK(ShClEventSourceCreate(&Source, 42));
     320    RTTESTI_CHECK_RC_OK(ShClEventSourceGenerateAndRegisterEvent(&Source, &pEvent));
     321    RTTESTI_CHECK_RC_OK(ShClEventRetain(pEvent));
     322    RTTESTI_CHECK(ShClEventGetRefs(pEvent) == 2);
     323    RTTESTI_CHECK_RC_OK(ShClEventSourceDestroy(&Source));
     324    RTTESTI_CHECK(ShClEventGetRefs(pEvent) == 2); /* Make sure the ref count didn't drop due to ShClEventSourceDestroy(). */
     325    RTTESTI_CHECK(ShClEventRelease(pEvent) == 1);
     326    RTTESTI_CHECK(ShClEventGetRefs(pEvent) == 1);
     327    RTTESTI_CHECK(ShClEventRelease(pEvent) == 0); /* Destroys event, as ref count is 0. */
     328    RTTESTI_CHECK(ShClEventRelease(pEvent) == UINT32_MAX);
     329    RTTESTI_CHECK_RC_OK(ShClEventSourceDestroy(&Source)); /* Try to destruct again. */
     330}
     331
     332static void testTransferBasics(void)
     333{
    303334    RTTestISub("Testing transfer basics");
    304335
    305     SHCLEVENTSOURCE Source;
    306     int rc = ShClEventSourceCreate(&Source, 0);
    307     RTTESTI_CHECK_RC_OK(rc);
    308     rc = ShClEventSourceDestroy(&Source);
    309     RTTESTI_CHECK_RC_OK(rc);
    310336    PSHCLTRANSFER pTransfer;
    311     rc = ShClTransferCreate(SHCLTRANSFERDIR_TO_REMOTE, SHCLSOURCE_LOCAL, NULL /* Callbacks */, &pTransfer);
     337    int rc = ShClTransferCreate(SHCLTRANSFERDIR_TO_REMOTE, SHCLSOURCE_LOCAL, NULL /* Callbacks */, &pTransfer);
    312338    RTTESTI_CHECK_RC_OK(rc);
    313339    rc = ShClTransferDestroy(pTransfer);
     
    400426    RTTestBanner(hTest);
    401427
    402     testTransferBasics(hTest);
     428    /* For negative stuff that may assert: */
     429    bool const fMayPanic = RTAssertSetMayPanic(false);
     430    bool const fQuiet    = RTAssertSetQuiet(true);
     431
     432    testEvents();
     433    testTransferBasics();
    403434    testTransferRootsSet(hTest);
    404435    testTransferObjOpen(hTest);
     
    406437    int rc = testRemoveTempDir(hTest);
    407438    RTTESTI_CHECK_RC(rc, VINF_SUCCESS);
     439
     440    RTAssertSetMayPanic(fMayPanic);
     441    RTAssertSetQuiet(fQuiet);
    408442
    409443    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette