VirtualBox

Changeset 86423 in vbox


Ignore:
Timestamp:
Oct 2, 2020 1:03:48 PM (4 years ago)
Author:
vboxsync
Message:

xpcom/TestXPTCInvoke: Exit with non-zero status on failure. Compare direct and invoke'ed result (printf output) to determine whether stuff works. bugref:9841

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/xpcom18a4/xpcom/reflect/xptcall/tests/TestXPTCInvoke.cpp

    r86422 r86423  
    4848
    4949// forward declration
    50 static void DoMultipleInheritenceTest();
    51 static void DoMultipleInheritenceTest2();
     50static int DoMultipleInheritenceTest(int rcExit);
     51static int DoMultipleInheritenceTest2(int rcExit);
    5252static void DoSpeedTest();
     53
     54
     55#include <iprt/string.h>
     56
     57static char  g_szDirect[16384];
     58static char  g_szInvoke[16384];
     59static char *g_pszBuffer = NULL;
     60static void bufprintf(const char *pszFormat, ...)
     61{
     62    va_list va;
     63    va_start(va, pszFormat);
     64    vprintf(pszFormat, va);
     65    va_end(va);
     66    if (g_pszBuffer)
     67    {
     68        size_t  cchBuf = strlen(g_pszBuffer);
     69        ssize_t cbLeft = (ssize_t)sizeof(g_szDirect) - (ssize_t)cchBuf;
     70        if (cbLeft > 0)
     71        {
     72            va_list va;
     73            va_start(va, pszFormat);
     74            vsnprintf(&g_pszBuffer[cchBuf], (size_t)cbLeft, pszFormat, va);
     75            va_end(va);
     76        }
     77    }
     78}
     79
     80static void setbuffer(bool fDirect)
     81{
     82    g_pszBuffer = fDirect ? g_szDirect : g_szInvoke;
     83    *g_pszBuffer = '\0';
     84}
     85
     86static int comparebuffers(int rcExit)
     87{
     88    if (strcmp(g_szDirect, g_szInvoke) == 0)
     89        return rcExit;
     90    size_t offLine = 0;
     91    unsigned iLine   = 1;
     92    for (size_t off = 0; ; off++)
     93    {
     94        char chDirect = g_szDirect[off];
     95        char chInvoke = g_szInvoke[off];
     96        if (chDirect == chInvoke)
     97        {
     98            if (!chDirect)
     99                return rcExit;
     100            if (chDirect == '\n')
     101            {
     102                offLine = off + 1;
     103                iLine++;
     104            }
     105        }
     106        else
     107        {
     108            size_t cchDirectLine = RTStrOffCharOrTerm(&g_szDirect[offLine], '\n');
     109            size_t cchInvokeLine = RTStrOffCharOrTerm(&g_szInvoke[offLine], '\n');
     110            printf("direct and invoke runs differs on line %u!\n", iLine);
     111            printf("direct: %*.*s\n", (int)cchDirectLine, (int)cchDirectLine, &g_szDirect[offLine]);
     112            printf("invoke: %*.*s\n", (int)cchInvokeLine, (int)cchInvokeLine, &g_szInvoke[offLine]);
     113
     114            return 1;
     115        }
     116
     117    }
     118    printf("direct and invoke runs differs!\n");
     119    return 1;
     120}
     121
    53122
    54123// {AAC1FB90-E099-11d2-984E-006008962422}
     
    312381    PRInt64 out64;
    313382    printf("calling direct:\n");
     383    setbuffer(true);
    314384    if(NS_SUCCEEDED(test->AddTwoInts(1,1,&out)))
    315         printf("\t1 + 1 = %d\n", out);
    316     else
    317         printf("\tFAILED");
     385        bufprintf("\t1 + 1 = %d\n", out);
     386    else
     387        bufprintf("\tFAILED");
    318388    PRInt64 one, two;
    319389    LL_I2L(one, 1);
     
    322392    {
    323393        LL_L2I(tmp32, out64);
    324         printf("\t1L + 1L = %d\n", (int)tmp32);
     394        bufprintf("\t1L + 1L = %d\n", (int)tmp32);
    325395    }
    326396    else
    327         printf("\tFAILED");
     397        bufprintf("\tFAILED");
    328398    if(NS_SUCCEEDED(test->MultTwoInts(2,2,&out)))
    329         printf("\t2 * 2 = %d\n", out);
    330     else
    331         printf("\tFAILED");
     399        bufprintf("\t2 * 2 = %d\n", out);
     400    else
     401        bufprintf("\tFAILED");
    332402    if(NS_SUCCEEDED(test->MultTwoLLs(two,two,&out64)))
    333403    {
    334404        LL_L2I(tmp32, out64);
    335         printf("\t2L * 2L = %d\n", (int)tmp32);
     405        bufprintf("\t2L * 2L = %d\n", (int)tmp32);
    336406    }
    337407    else
    338         printf("\tFAILED");
     408        bufprintf("\tFAILED");
    339409
    340410    double outD;
     
    344414
    345415    if(NS_SUCCEEDED(test->AddManyInts(1,2,3,4,5,6,7,8,9,10,&outI)))
    346         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n", outI);
    347     else
    348         printf("\tFAILED");
     416        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n", outI);
     417    else
     418        bufprintf("\tFAILED");
    349419
    350420    if(NS_SUCCEEDED(test->AddTwoFloats(1,2,&outF)))
    351         printf("\t1 + 2 = %ff\n", (double)outF);
    352     else
    353         printf("\tFAILED");
     421        bufprintf("\t1 + 2 = %ff\n", (double)outF);
     422    else
     423        bufprintf("\tFAILED");
    354424
    355425    if(NS_SUCCEEDED(test->AddManyDoubles(1,2,3,4,5,6,7,8,9,10,&outD)))
    356         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %f\n", outD);
    357     else
    358         printf("\tFAILED");
     426        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %f\n", outD);
     427    else
     428        bufprintf("\tFAILED");
    359429
    360430    if(NS_SUCCEEDED(test->AddManyFloats(1,2,3,4,5,6,7,8,9,10,&outF)))
    361         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %ff\n", (double)outF);
    362     else
    363         printf("\tFAILED");
     431        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %ff\n", (double)outF);
     432    else
     433        bufprintf("\tFAILED");
    364434
    365435    if(NS_SUCCEEDED(test->AddManyManyFloats(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,&outF)))
    366         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 +1 15 + 16 + 17 + 18 + 19 + 20 = %ff\n", (double)outF);
    367     else
    368         printf("\tFAILED");
     436        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 = %ff\n", (double)outF);
     437    else
     438        bufprintf("\tFAILED");
    369439
    370440    if(NS_SUCCEEDED(test->AddMixedInts(1,2,3,4,5,6,7,8,9,10,&out64)))
    371441     {
    372442         LL_L2I(tmp32, out64);
    373          printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n", (int)tmp32);
     443         bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n", (int)tmp32);
    374444     }
    375445     else
    376          printf("\tFAILED");
     446         bufprintf("\tFAILED");
    377447 
    378448     if(NS_SUCCEEDED(test->AddMixedInts2(1,2,3,4,5,6,7,8,9,10,&out64)))
    379449     {
    380450          LL_L2I(tmp32, out64);
    381          printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n", (int)tmp32);
     451         bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n", (int)tmp32);
    382452     }
    383453     else
    384          printf("\tFAILED");
     454         bufprintf("\tFAILED");
    385455
    386456     if(NS_SUCCEEDED(test->AddMixedFloats(1,2,3,4,5,6,7,8,9,10,11,&outD)))
    387          printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 = %f\n", (double)outD);
     457         bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 = %f\n", (double)outD);
    388458     else
    389          printf("\tFAILED");
     459         bufprintf("\tFAILED");
    390460
    391461     if (NS_SUCCEEDED(test->PassTwoStrings("moo","cow",&outS))) {
    392        printf(" = %s\n", outS);
     462       bufprintf(" = %s\n", outS);
    393463        nsMemory::Free(outS);
    394464      } else
    395         printf("\tFAILED");
     465        bufprintf("\tFAILED");
    396466
    397467    printf("calling via invoke:\n");
     468    setbuffer(false);
    398469
    399470    nsXPTCVariant var[21];
     
    413484
    414485    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 3, 3, var)))
    415         printf("\t1 + 1 = %d\n", var[2].val.i32);
    416     else
    417         printf("\tFAILED");
     486        bufprintf("\t1 + 1 = %d\n", var[2].val.i32);
     487    else
     488        bufprintf("\tFAILED");
    418489
    419490    LL_I2L(var[0].val.i64, 1);
     
    431502
    432503    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 5, 3, var)))
    433         printf("\t1L + 1L = %d\n", (int)var[2].val.i64);
    434     else
    435         printf("\tFAILED");
     504        bufprintf("\t1L + 1L = %d\n", (int)var[2].val.i64);
     505    else
     506        bufprintf("\tFAILED");
    436507
    437508    var[0].val.i32 = 2;
     
    449520
    450521    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 4, 3, var)))
    451         printf("\t2 * 2 = %d\n", var[2].val.i32);
    452     else
    453         printf("\tFAILED");
     522        bufprintf("\t2 * 2 = %d\n", var[2].val.i32);
     523    else
     524        bufprintf("\tFAILED");
    454525
    455526    LL_I2L(var[0].val.i64,2);
     
    467538
    468539    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 6, 3, var)))
    469         printf("\t2L * 2L = %d\n", (int)var[2].val.i64);
    470     else
    471         printf("\tFAILED");
     540        bufprintf("\t2L * 2L = %d\n", (int)var[2].val.i64);
     541    else
     542        bufprintf("\tFAILED");
    472543
    473544    var[0].val.i32 = 1;
     
    517588
    518589    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 7, 11, var)))
    519         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n",
     590        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n",
    520591                var[10].val.i32);
    521592
     
    534605
    535606    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 8, 3, var)))
    536         printf("\t1 + 2 = %ff\n",
     607        bufprintf("\t1 + 2 = %ff\n",
    537608                (double) var[2].val.f);
    538609
     
    584655
    585656    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 9, 11, var)))
    586         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %f\n",
     657        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %f\n",
    587658                var[10].val.d);
    588659    else
    589         printf("\tFAILED");
     660        bufprintf("\tFAILED");
    590661
    591662    var[0].val.f = 1.0f;
     
    635706
    636707    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 10, 11, var)))
    637         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %ff\n",
     708        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %ff\n",
    638709                (double) var[10].val.f);
    639710    else
    640         printf("\tFAILED");
     711        bufprintf("\tFAILED");
    641712
    642713    var[0].val.f = 1.0f;
     
    726797
    727798    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 11, 21, var)))
    728         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 = %ff\n",
     799        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 = %ff\n",
    729800                (double) var[20].val.f);
    730801
     
    775846
    776847    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 12, 11, var)))
    777         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n",
     848        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n",
    778849               (int)var[10].val.i64);
    779850    else
    780         printf("\tFAILED");
     851        bufprintf("\tFAILED");
    781852
    782853    var[0].val.i32 = 1;
     
    826897
    827898    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 13, 11, var)))
    828         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n",
     899        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = %d\n",
    829900               (int)var[10].val.i64);
    830901    else
    831         printf("\tFAILED");
     902        bufprintf("\tFAILED");
    832903
    833904    var[0].val.f = 1.0f;
     
    881952
    882953    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 14, 12, var)))
    883         printf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 = %f\n",
     954        bufprintf("\t1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 = %f\n",
    884955                var[11].val.d);
    885956    else
    886         printf("\tFAILED");
     957        bufprintf("\tFAILED");
    887958
    888959    var[0].val.p = (void*)"moo";
     
    901972    if(NS_SUCCEEDED(XPTC_InvokeByIndex(test, 15, 3, var)))
    902973    {
    903         printf(" = %s\n", var[2].val.p);
     974        bufprintf(" = %s\n", var[2].val.p);
    904975        nsMemory::Free(var[2].val.p);
    905976    }
    906977    else
    907         printf("\tFAILED");
    908 
    909     DoMultipleInheritenceTest();
    910     DoMultipleInheritenceTest2();
     978        bufprintf("\tFAILED");
     979    int rcExit = comparebuffers(0);
     980
     981    rcExit = DoMultipleInheritenceTest(rcExit);
     982    rcExit = DoMultipleInheritenceTest2(rcExit);
    911983    // Disabled by default - takes too much time on slow machines
    912984    //DoSpeedTest();
     
    914986    NS_RELEASE(test);
    915987
    916     return 0;
     988    return rcExit;
    917989}
    918990
     
    9971069NS_IMETHODIMP FooImpl::FooMethod1(PRInt32 i)
    9981070{
    999     printf("\tFooImpl::FooMethod1 called with i == %d, %s part of a %s\n",
     1071    bufprintf("\tFooImpl::FooMethod1 called with i == %d, %s part of a %s\n",
    10001072           i, Name, ImplName());
    10011073    return NS_OK;
     
    10041076NS_IMETHODIMP FooImpl::FooMethod2(PRInt32 i)
    10051077{
    1006     printf("\tFooImpl::FooMethod2 called with i == %d, %s part of a %s\n",
     1078    bufprintf("\tFooImpl::FooMethod2 called with i == %d, %s part of a %s\n",
    10071079           i, Name, ImplName());
    10081080    return NS_OK;
     
    10171089NS_IMETHODIMP BarImpl::BarMethod1(PRInt32 i)
    10181090{
    1019     printf("\tBarImpl::BarMethod1 called with i == %d, %s part of a %s\n",
     1091    bufprintf("\tBarImpl::BarMethod1 called with i == %d, %s part of a %s\n",
    10201092           i, Name, ImplName());
    10211093    return NS_OK;
     
    10241096NS_IMETHODIMP BarImpl::BarMethod2(PRInt32 i)
    10251097{
    1026     printf("\tBarImpl::BarMethod2 called with i == %d, %s part of a %s\n",
     1098    bufprintf("\tBarImpl::BarMethod2 called with i == %d, %s part of a %s\n",
    10271099           i, Name, ImplName());
    10281100    return NS_OK;
     
    10911163
    10921164
    1093 static void DoMultipleInheritenceTest()
     1165static int DoMultipleInheritenceTest(int rcExit)
    10941166{
    10951167    FooBarImpl* impl = new FooBarImpl();
    10961168    if(!impl)
    1097         return;
     1169        return 1;
    10981170
    10991171    nsIFoo* foo;
     
    11121184        printf("Calling Foo...\n");
    11131185        printf("direct calls:\n");
     1186        setbuffer(true);
    11141187        foo->FooMethod1(1);
    11151188        foo->FooMethod2(2);
    11161189
    11171190        printf("invoke calls:\n");
     1191        setbuffer(false);
    11181192        var[0].val.i32 = 1;
    11191193        var[0].type = nsXPTType::T_I32;
     
    11261200        XPTC_InvokeByIndex(foo, 4, 1, var);
    11271201
     1202        rcExit = comparebuffers(rcExit);
    11281203        printf("\n");
    11291204
    11301205        printf("Calling Bar...\n");
    11311206        printf("direct calls:\n");
     1207        setbuffer(true);
    11321208        bar->BarMethod1(1);
    11331209        bar->BarMethod2(2);
    11341210
    11351211        printf("invoke calls:\n");
     1212        setbuffer(false);
    11361213        var[0].val.i32 = 1;
    11371214        var[0].type = nsXPTType::T_I32;
     
    11441221        XPTC_InvokeByIndex(bar, 4, 1, var);
    11451222
     1223        rcExit = comparebuffers(rcExit);
    11461224        printf("\n");
    11471225
     
    11491227        NS_RELEASE(bar);
    11501228    }
     1229    else
     1230        rcExit = 1;
    11511231    NS_RELEASE(impl);
     1232    return rcExit;
    11521233}
    11531234/***************************************************************************/
     
    12021283NS_IMETHODIMP FooBarImpl2::FooMethod1(PRInt32 i)
    12031284{
    1204     printf("\tFooBarImpl2::FooMethod1 called with i == %d, local value = %x\n",
     1285    bufprintf("\tFooBarImpl2::FooMethod1 called with i == %d, local value = %x\n",
    12051286           i, value);
    12061287    return NS_OK;
     
    12091290NS_IMETHODIMP FooBarImpl2::FooMethod2(PRInt32 i)
    12101291{
    1211     printf("\tFooBarImpl2::FooMethod2 called with i == %d, local value = %x\n",
     1292    bufprintf("\tFooBarImpl2::FooMethod2 called with i == %d, local value = %x\n",
    12121293           i, value);
    12131294    return NS_OK;
     
    12161297NS_IMETHODIMP FooBarImpl2::BarMethod1(PRInt32 i)
    12171298{
    1218     printf("\tFooBarImpl2::BarMethod1 called with i == %d, local value = %x\n",
     1299    bufprintf("\tFooBarImpl2::BarMethod1 called with i == %d, local value = %x\n",
    12191300           i, value);
    12201301    return NS_OK;
     
    12231304NS_IMETHODIMP FooBarImpl2::BarMethod2(PRInt32 i)
    12241305{
    1225     printf("\tFooBarImpl2::BarMethod2 called with i == %d, local value = %x\n",
     1306    bufprintf("\tFooBarImpl2::BarMethod2 called with i == %d, local value = %x\n",
    12261307           i, value);
    12271308    return NS_OK;
     
    12611342NS_IMPL_RELEASE(FooBarImpl2)
    12621343
    1263 static void DoMultipleInheritenceTest2()
     1344static int DoMultipleInheritenceTest2(int rcExit)
    12641345{
    12651346    FooBarImpl2* impl = new FooBarImpl2();
    12661347    if(!impl)
    1267         return;
     1348        return 1;
    12681349
    12691350    nsIFoo2* foo;
     
    12821363        printf("Calling Foo...\n");
    12831364        printf("direct calls:\n");
     1365        setbuffer(true);
    12841366        foo->FooMethod1(1);
    12851367        foo->FooMethod2(2);
    12861368
    12871369        printf("invoke calls:\n");
     1370        setbuffer(false);
    12881371        var[0].val.i32 = 1;
    12891372        var[0].type = nsXPTType::T_I32;
     
    12961379        XPTC_InvokeByIndex(foo, 4, 1, var);
    12971380
     1381        rcExit = comparebuffers(rcExit);
    12981382        printf("\n");
    12991383
    13001384        printf("Calling Bar...\n");
    13011385        printf("direct calls:\n");
     1386        setbuffer(true);
    13021387        bar->BarMethod1(1);
    13031388        bar->BarMethod2(2);
    13041389
    13051390        printf("invoke calls:\n");
     1391        setbuffer(false);
    13061392        var[0].val.i32 = 1;
    13071393        var[0].type = nsXPTType::T_I32;
     
    13141400        XPTC_InvokeByIndex(bar, 4, 1, var);
    13151401
     1402        rcExit = comparebuffers(rcExit);
    13161403        printf("\n");
    13171404
     
    13191406        NS_RELEASE(bar);
    13201407    }
     1408    else
     1409        rcExit = 1;
    13211410    NS_RELEASE(impl);
     1411    return rcExit;
    13221412}
    13231413
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