VirtualBox

Changeset 47422 in vbox for trunk/src/VBox/Devices/Input


Ignore:
Timestamp:
Jul 26, 2013 12:22:50 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
87574
Message:

Devices/Input: updated the USB mouse unit test.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Input/testcase/tstUsbMouse.cpp

    r47248 r47422  
    111111
    112112
    113 static int tstMouseConstruct(int iInstance, bool isAbsolute, uint8_t u8CoordShift,
    114                              PPDMUSBINS *ppThis)
     113static int tstMouseConstruct(int iInstance, const char *pcszMode,
     114                             uint8_t u8CoordShift, PPDMUSBINS *ppThis)
    115115{
    116116    int rc = VERR_NO_MEMORY;
     
    121121    pCfg = CFGMR3CreateTree(NULL);
    122122    if (pCfg)
    123         rc = CFGMR3InsertInteger(pCfg, "Absolute", isAbsolute);
     123        rc = CFGMR3InsertString(pCfg, "Mode", pcszMode);
    124124    if (RT_SUCCESS(rc))
    125125        rc = CFGMR3InsertInteger(pCfg, "CoordShift", u8CoordShift);
     
    150150    PPDMUSBINS pThis;
    151151    RTTestSub(hTest, "simple construction and destruction");
    152     int rc = tstMouseConstruct(0, false, 1, &pThis);
     152    int rc = tstMouseConstruct(0, "relative", 1, &pThis);
    153153    RTTEST_CHECK_RC_OK(hTest, rc);
    154154    if (pThis)
     
    157157
    158158
    159 static void testSendPosition(RTTEST hTest)
     159static void testSendPositionRel(RTTEST hTest)
    160160{
    161161    PPDMUSBINS pThis = NULL;
    162162    VUSBURB Urb;
    163     RTTestSub(hTest, "sending a position event");
    164     int rc = tstMouseConstruct(0, true, 1, &pThis);
     163    RTTestSub(hTest, "sending a relative position event");
     164    int rc = tstMouseConstruct(0, "relative", 1, &pThis);
     165    RT_ZERO(Urb);
     166    if (RT_SUCCESS(rc))
     167        rc = g_UsbHidMou.pfnUsbReset(pThis, false);
     168    if (RT_SUCCESS(rc) && !s_drvTstMouse.pDrv)
     169        rc = VERR_PDM_MISSING_INTERFACE;
     170    RTTEST_CHECK_RC_OK(hTest, rc);
     171    if (RT_SUCCESS(rc))
     172    {
     173        s_drvTstMouse.pDrv->pfnPutEvent(s_drvTstMouse.pDrv, 123, -16, 1, -1, 3);
     174        Urb.EndPt = 0x01;
     175        rc = g_UsbHidMou.pfnUrbQueue(pThis, &Urb);
     176    }
     177    if (RT_SUCCESS(rc))
     178    {
     179        PVUSBURB pUrb = g_UsbHidMou.pfnUrbReap(pThis, 0);
     180        if (pUrb)
     181        {
     182            if (pUrb == &Urb)
     183            {
     184                if (   Urb.abData[0] != 3    /* Buttons */
     185                    || Urb.abData[1] != 123  /* x */
     186                    || Urb.abData[2] != 240  /* 256 - y */
     187                    || Urb.abData[3] != 255  /* z */)
     188                    rc = VERR_GENERAL_FAILURE;
     189            }
     190            else
     191                rc = VERR_GENERAL_FAILURE;
     192        }
     193        else
     194            rc = VERR_GENERAL_FAILURE;
     195    }
     196    RTTEST_CHECK_RC_OK(hTest, rc);
     197    if (pThis)
     198        g_UsbHidMou.pfnDestruct(pThis);
     199}
     200
     201
     202static void testSendPositionAbs(RTTEST hTest)
     203{
     204    PPDMUSBINS pThis = NULL;
     205    VUSBURB Urb;
     206    RTTestSub(hTest, "sending an absolute position event");
     207    int rc = tstMouseConstruct(0, "absolute", 1, &pThis);
    165208    RT_ZERO(Urb);
    166209    if (RT_SUCCESS(rc))
     
    173216            s_drvTstMouse.pDrv->pfnPutEventAbs(s_drvTstMouse.pDrv, 300, 200, 1,
    174217                                               0, 3);
     218        else
     219            rc = VERR_PDM_MISSING_INTERFACE;
     220    }
     221    if (RT_SUCCESS(rc))
     222    {
     223        Urb.EndPt = 0x01;
     224        rc = g_UsbHidMou.pfnUrbQueue(pThis, &Urb);
     225    }
     226    if (RT_SUCCESS(rc))
     227    {
     228        PVUSBURB pUrb = g_UsbHidMou.pfnUrbReap(pThis, 0);
     229        if (pUrb)
     230        {
     231            if (pUrb == &Urb)
     232            {
     233                if (   *(uint16_t *)&Urb.abData[0] != 150  /* x >> 1 */
     234                    || *(uint16_t *)&Urb.abData[2] != 100  /* y >> 1 */
     235                    || Urb.abData[4] != 3                  /* Buttons */)
     236                    rc = VERR_GENERAL_FAILURE;
     237            }
     238            else
     239                rc = VERR_GENERAL_FAILURE;
     240        }
     241        else
     242            rc = VERR_GENERAL_FAILURE;
     243    }
     244    RTTEST_CHECK_RC_OK(hTest, rc);
     245    if (pThis)
     246        g_UsbHidMou.pfnDestruct(pThis);
     247}
     248
     249
     250static void testSendPositionMT(RTTEST hTest)
     251{
     252    PPDMUSBINS pThis = NULL;
     253    VUSBURB Urb;
     254    RTTestSub(hTest, "sending a multi-touch position event");
     255    int rc = tstMouseConstruct(0, "multitouch", 1, &pThis);
     256    RT_ZERO(Urb);
     257    if (RT_SUCCESS(rc))
     258    {
     259        rc = g_UsbHidMou.pfnUsbReset(pThis, false);
     260    }
     261    if (RT_SUCCESS(rc))
     262    {
     263        if (s_drvTstMouse.pDrv)
     264            s_drvTstMouse.pDrv->pfnPutEventMT(s_drvTstMouse.pDrv, 300, 200, 2,
     265                                              3);
    175266        else
    176267            rc = VERR_PDM_MISSING_INTERFACE;
     
    189280            {
    190281                if (   Urb.abData[0] != 1                  /* Report ID */
    191                     || Urb.abData[1] != 3                  /* Buttons */
    192                     || (int8_t)Urb.abData[2] != -1         /* Wheel, inverted */
    193                     || *(uint16_t *)&Urb.abData[4] != 150  /* x >> 1 */
    194                     || *(uint16_t *)&Urb.abData[6] != 100  /* y >> 1 */)
     282                    || Urb.abData[1] != 3                  /* Contact flags */
     283                    || *(uint16_t *)&Urb.abData[2] != 150  /* x >> 1 */
     284                    || *(uint16_t *)&Urb.abData[4] != 100  /* y >> 1 */
     285                    || Urb.abData[6] != 2                  /* Contact number */)
    195286                    rc = VERR_GENERAL_FAILURE;
    196287            }
     
    229320     */
    230321    testConstructAndDestruct(hTest);
    231     testSendPosition(hTest);
     322    testSendPositionRel(hTest);
     323    testSendPositionAbs(hTest);
     324    testSendPositionMT(hTest);
    232325    return RTTestSummaryAndDestroy(hTest);
    233326}
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