Lines Matching refs:pTest

156 #define RTTEST_VALID_RETURN(pTest)  \
158 AssertPtrReturn(pTest, VERR_INVALID_HANDLE); \
159 AssertReturn(pTest->u32Magic == RTTESTINT_MAGIC, VERR_INVALID_HANDLE); \
165 #define RTTEST_GET_VALID_RETURN(pTest) \
167 if (pTest == NIL_RTTEST) \
168 pTest = (PRTTESTINT)RTTlsGet(g_iTestTls); \
169 AssertPtrReturn(pTest, VERR_INVALID_HANDLE); \
170 AssertReturn(pTest->u32Magic == RTTESTINT_MAGIC, VERR_INVALID_MAGIC); \
177 #define RTTEST_GET_VALID_RETURN_RC(pTest, rc) \
179 if (pTest == NIL_RTTEST) \
180 pTest = (PRTTESTINT)RTTlsGet(g_iTestTls); \
181 AssertPtrReturn(pTest, (rc)); \
182 AssertReturn(pTest->u32Magic == RTTESTINT_MAGIC, (rc)); \
190 static int rtTestPrintf(PRTTESTINT pTest, const char *pszFormat, ...);
191 static void rtTestXmlStart(PRTTESTINT pTest, const char *pszTest);
192 static void rtTestXmlElemV(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, va_list va);
193 static void rtTestXmlElem(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, ...);
194 static void rtTestXmlElemStartV(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, va_list va);
195 static void rtTestXmlElemStart(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, ...);
196 static void rtTestXmlElemEnd(PRTTESTINT pTest, const char *pszTag);
197 static void rtTestXmlEnd(PRTTESTINT pTest);
242 PRTTESTINT pTest = (PRTTESTINT)RTMemAllocZ(sizeof(*pTest));
243 if (!pTest)
245 pTest->u32Magic = RTTESTINT_MAGIC;
246 pTest->pszTest = RTStrDup(pszTest);
247 pTest->cchTest = strlen(pszTest);
248 pTest->cbGuard = PAGE_SIZE * 7;
249 pTest->enmMaxLevel = enmMaxLevel == RTTESTLVL_INVALID ? RTTESTLVL_INFO : enmMaxLevel;
250 pTest->fFlags = fFlags;
252 pTest->pOutStrm = g_pStdOut;
253 pTest->fNewLine = true;
255 pTest->pGuardedMem = NULL;
257 pTest->pszSubTest = NULL;
258 pTest->cchSubTest = 0;
259 pTest->fSubTestSkipped = false;
260 pTest->fSubTestReported = true;
261 pTest->cSubTestAtErrors = 0;
262 pTest->cSubTests = 0;
263 pTest->cSubTestsFailed = 0;
265 pTest->fXmlEnabled = false;
266 pTest->fXmlTopTestDone = false;
267 pTest->eXmlState = RTTESTINT::kXmlPos_ElementEnd;
268 pTest->hXmlPipe = NIL_RTPIPE;
269 pTest->hXmlFile = NIL_RTFILE;
270 pTest->cXmlElements = 0;
272 rc = RTCritSectInit(&pTest->Lock);
275 rc = RTCritSectInit(&pTest->OutputLock);
284 rc = RTTlsSet(g_iTestTls, pTest);
298 pTest->enmMaxLevel = RTTESTLVL_DEBUG;
300 pTest->enmMaxLevel = RTTESTLVL_FAILURE;
302 pTest->enmMaxLevel = RTTESTLVL_DEBUG;
304 pTest->enmMaxLevel = RTTESTLVL_INFO;
306 pTest->enmMaxLevel = RTTESTLVL_SUB_TEST;
308 pTest->enmMaxLevel = RTTESTLVL_FAILURE;
339 rc = RTPipeFromNative(&pTest->hXmlPipe, iNativeTestPipe, RTPIPE_N_WRITE);
341 pTest->fXmlEnabled = true;
346 pTest->hXmlPipe = NIL_RTPIPE;
363 rc = RTFileOpen(&pTest->hXmlFile, pszXmlFile,
366 pTest->fXmlEnabled = true;
370 pTest->hXmlFile = NIL_RTFILE;
379 pTest->fXmlOmitTopTest = (fFlags & RTTEST_C_XML_OMIT_TOP_TEST)
386 rtTestXmlStart(pTest, pszTest);
388 *phTest = pTest;
393 RTCritSectDelete(&pTest->OutputLock);
395 RTCritSectDelete(&pTest->Lock);
397 pTest->u32Magic = 0;
398 RTStrFree((char *)pTest->pszTest);
399 RTMemFree(pTest);
465 RTTESTINT *pTest = hTest;
466 RTTEST_VALID_RETURN(pTest);
471 if (!pTest->fNewLine)
472 rtTestPrintf(pTest, "\n");
473 rtTestXmlEnd(pTest);
478 if ((RTTESTINT *)RTTlsGet(g_iTestTls) == pTest)
481 ASMAtomicWriteU32(&pTest->u32Magic, ~RTTESTINT_MAGIC);
482 RTCritSectDelete(&pTest->Lock);
483 RTCritSectDelete(&pTest->OutputLock);
486 PRTTESTGUARDEDMEM pMem = pTest->pGuardedMem;
487 pTest->pGuardedMem = NULL;
495 RTStrFree((char *)pTest->pszSubTest);
496 pTest->pszSubTest = NULL;
497 RTStrFree((char *)pTest->pszTest);
498 pTest->pszTest = NULL;
499 RTMemFree(pTest);
522 PRTTESTINT pTest = hTest;
523 RTTEST_GET_VALID_RETURN(pTest);
533 RTCritSectEnter(&pTest->Lock);
534 RTCritSectEnter(&pTest->OutputLock);
536 char *pszOldName = (char *)pTest->pszTest;
537 pTest->pszTest = pszDupName;
538 pTest->cchTest = cchName;
540 RTCritSectLeave(&pTest->OutputLock);
541 RTCritSectLeave(&pTest->Lock);
561 PRTTESTINT pTest = hTest;
562 RTTEST_GET_VALID_RETURN(pTest);
576 pMem->aGuards[0].cb = pMem->aGuards[1].cb = pTest->cbGuard;
607 RTCritSectEnter(&pTest->Lock);
608 pMem->pNext = pTest->pGuardedMem;
609 pTest->pGuardedMem = pMem;
610 RTCritSectLeave(&pTest->Lock);
691 PRTTESTINT pTest = hTest;
692 RTTEST_GET_VALID_RETURN(pTest);
702 RTCritSectEnter(&pTest->Lock);
703 for (PRTTESTGUARDEDMEM pMem = pTest->pGuardedMem; pMem; pMem = pMem->pNext)
710 pTest->pGuardedMem = pMem->pNext;
717 RTCritSectLeave(&pTest->Lock);
726 * @param pTest The test instance.
730 static void rtTestXmlOutputV(PRTTESTINT pTest, const char *pszFormat, va_list va)
732 if (pTest->fXmlEnabled)
738 if (pTest->hXmlPipe != NIL_RTPIPE)
739 RTPipeWriteBlocking(pTest->hXmlPipe, pszStr, cchStr, NULL);
740 if (pTest->hXmlFile != NIL_RTFILE)
741 RTFileWrite(pTest->hXmlFile, pszStr, cchStr, NULL);
751 * @param pTest The test instance.
755 static void rtTestXmlOutput(PRTTESTINT pTest, const char *pszFormat, ...)
759 rtTestXmlOutputV(pTest, pszFormat, va);
767 * @param pTest The test instance.
770 static void rtTestXmlStart(PRTTESTINT pTest, const char *pszTest)
772 pTest->cXmlElements = 0;
773 if (pTest->fXmlEnabled)
775 rtTestXmlOutput(pTest, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
776 pTest->eXmlState = RTTESTINT::kXmlPos_ElementEnd;
777 pTest->fXmlTopTestDone = !(pTest->fFlags & RTTEST_C_XML_DELAY_TOP_TEST) || pTest->fXmlOmitTopTest;
778 if (pTest->fXmlTopTestDone && !pTest->fXmlOmitTopTest)
779 rtTestXmlElemStart(pTest, "Test", "name=%RMas", pszTest);
788 * @param pTest The test instance.
794 static void rtTestXmlElemV(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, va_list va)
796 if (pTest->fXmlEnabled)
803 if (pTest->eXmlState != RTTESTINT::kXmlPos_ElementEnd)
804 rtTestXmlOutput(pTest, "\n");
807 rtTestXmlOutput(pTest, "%*s<%s timestamp=%RMas/>\n",
808 pTest->cXmlElements * 2, "", pszTag, szTS);
813 rtTestXmlOutput(pTest, "%*s<%s timestamp=%RMas %N/>\n",
814 pTest->cXmlElements * 2, "", pszTag, szTS, pszAttrFmt, &va2);
817 pTest->eXmlState = RTTESTINT::kXmlPos_ElementEnd;
824 static void rtTestXmlElem(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, ...)
828 rtTestXmlElemV(pTest, pszTag, pszAttrFmt, va);
838 * @param pTest The test instance.
844 static void rtTestXmlElemStartV(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, va_list va)
847 size_t i = pTest->cXmlElements;
848 AssertReturnVoid(i < RT_ELEMENTS(pTest->apszXmlElements));
849 pTest->apszXmlElements[i] = pszTag;
850 pTest->cXmlElements = i + 1;
852 if (pTest->fXmlEnabled)
859 if (pTest->eXmlState != RTTESTINT::kXmlPos_ElementEnd)
860 rtTestXmlOutput(pTest, "\n");
863 rtTestXmlOutput(pTest, "%*s<%s timestamp=%RMas>",
869 rtTestXmlOutput(pTest, "%*s<%s timestamp=%RMas %N>",
873 pTest->eXmlState = RTTESTINT::kXmlPos_ValueStart;
881 static void rtTestXmlElemStart(PRTTESTINT pTest, const char *pszTag, const char *pszAttrFmt, ...)
885 rtTestXmlElemStartV(pTest, pszTag, pszAttrFmt, va);
895 * @param pTest The test instance.
899 static void rtTestXmlElemEnd(PRTTESTINT pTest, const char *pszTag)
902 size_t i = pTest->cXmlElements;
905 AssertReturnVoid(!strcmp(pszTag, pTest->apszXmlElements[i]));
906 pTest->cXmlElements = i;
909 if (pTest->fXmlEnabled)
911 if (pTest->eXmlState == RTTESTINT::kXmlPos_ValueStart)
912 rtTestXmlOutput(pTest, "\n%*s</%s>\n", i * 2, "", pszTag);
913 else if (pTest->eXmlState == RTTESTINT::kXmlPos_ElementEnd)
914 rtTestXmlOutput(pTest, "%*s</%s>\n", i * 2, "", pszTag);
916 rtTestXmlOutput(pTest, "</%s>\n", pszTag);
917 pTest->eXmlState = RTTESTINT::kXmlPos_ElementEnd;
927 * @param pTest The test instance.
929 static void rtTestXmlEnd(PRTTESTINT pTest)
931 if (pTest->fXmlEnabled)
937 size_t i = pTest->cXmlElements;
938 AssertReturnVoid(i > 0 || pTest->fXmlOmitTopTest || !pTest->fXmlTopTestDone);
941 const char *pszTag = pTest->apszXmlElements[pTest->cXmlElements];
942 if (pTest->eXmlState == RTTESTINT::kXmlPos_ValueStart)
943 rtTestXmlOutput(pTest, "\n%*s</%s>\n", i * 2, "", pszTag);
944 else if (pTest->eXmlState == RTTESTINT::kXmlPos_ElementEnd)
945 rtTestXmlOutput(pTest, "%*s</%s>\n", i * 2, "", pszTag);
947 rtTestXmlOutput(pTest, "</%s>\n", pszTag);
948 pTest->eXmlState = RTTESTINT::kXmlPos_ElementEnd;
951 if (!pTest->fXmlOmitTopTest && pTest->fXmlTopTestDone)
953 rtTestXmlElem(pTest, "End", "SubTests=\"%u\" SubTestsFailed=\"%u\" errors=\"%u\"",
954 pTest->cSubTests, pTest->cSubTestsFailed, pTest->cErrors);
955 rtTestXmlOutput(pTest, "</Test>\n");
961 if (pTest->hXmlPipe != NIL_RTPIPE)
963 RTPipeClose(pTest->hXmlPipe);
964 pTest->hXmlPipe = NIL_RTPIPE;
966 if (pTest->hXmlFile != NIL_RTFILE)
968 RTFileClose(pTest->hXmlFile);
969 pTest->hXmlFile = NIL_RTFILE;
971 pTest->fXmlEnabled = false;
972 pTest->eXmlState = RTTESTINT::kXmlPos_ElementEnd;
974 pTest->cXmlElements = 0;
988 PRTTESTINT pTest = (PRTTESTINT)pvArg;
994 if (pTest->fNewLine)
996 RTStrmWrite(pTest->pOutStrm, pTest->pszTest, pTest->cchTest);
997 RTStrmWrite(pTest->pOutStrm, ": ", 2);
998 cch += 2 + pTest->cchTest;
1005 pTest->fNewLine = false;
1006 RTStrmWrite(pTest->pOutStrm, pachChars, cbChars);
1011 pTest->fNewLine = true;
1013 RTStrmWrite(pTest->pOutStrm, pachChars, cchPart);
1020 RTStrmFlush(pTest->pOutStrm);
1031 * @param pTest The test instance.
1035 static int rtTestPrintfV(PRTTESTINT pTest, const char *pszFormat, va_list va)
1037 return (int)RTStrFormatV(rtTestPrintfOutput, pTest, NULL, NULL, pszFormat, va);
1047 * @param pTest The test instance.
1051 static int rtTestPrintf(PRTTESTINT pTest, const char *pszFormat, ...)
1056 int cch = rtTestPrintfV(pTest, pszFormat, va);
1075 PRTTESTINT pTest = hTest;
1076 RTTEST_GET_VALID_RETURN_RC(pTest, -1);
1078 RTCritSectEnter(&pTest->OutputLock);
1081 if (enmLevel <= pTest->enmMaxLevel)
1083 if (!pTest->fNewLine)
1084 cch += rtTestPrintf(pTest, "\n");
1085 cch += rtTestPrintfV(pTest, pszFormat, va);
1088 RTCritSectLeave(&pTest->OutputLock);
1128 PRTTESTINT pTest = hTest;
1129 RTTEST_GET_VALID_RETURN_RC(pTest, -1);
1131 RTCritSectEnter(&pTest->OutputLock);
1133 if (enmLevel <= pTest->enmMaxLevel)
1134 cch += rtTestPrintfV(pTest, pszFormat, va);
1135 RTCritSectLeave(&pTest->OutputLock);
1180 * @param pTest The test instance.
1183 static int rtTestSubTestReport(PRTTESTINT pTest)
1186 if ( !pTest->fSubTestReported
1187 && pTest->pszSubTest)
1189 pTest->fSubTestReported = true;
1190 uint32_t cErrors = ASMAtomicUoReadU32(&pTest->cErrors) - pTest->cSubTestAtErrors;
1193 if (!pTest->fSubTestSkipped)
1195 rtTestXmlElem(pTest, "Passed", NULL);
1196 rtTestXmlElemEnd(pTest, "Test");
1197 cch += RTTestPrintfNl(pTest, RTTESTLVL_SUB_TEST, "%-50s: PASSED\n", pTest->pszSubTest);
1201 rtTestXmlElem(pTest, "Skipped", NULL);
1202 rtTestXmlElemEnd(pTest, "Test");
1203 cch += RTTestPrintfNl(pTest, RTTESTLVL_SUB_TEST, "%-50s: SKIPPED\n", pTest->pszSubTest);
1208 pTest->cSubTestsFailed++;
1209 rtTestXmlElem(pTest, "Failed", "errors=\"%u\"", cErrors);
1210 rtTestXmlElemEnd(pTest, "Test");
1211 cch += RTTestPrintfNl(pTest, RTTESTLVL_SUB_TEST, "%-50s: FAILED (%u errors)\n",
1212 pTest->pszSubTest, cErrors);
1224 * @param pTest The test instance.
1227 static int rtTestSubCleanup(PRTTESTINT pTest)
1230 if (pTest->pszSubTest)
1232 cch += rtTestSubTestReport(pTest);
1234 RTStrFree((char *)pTest->pszSubTest);
1235 pTest->pszSubTest = NULL;
1236 pTest->fSubTestReported = true;
1251 PRTTESTINT pTest = hTest;
1252 RTTEST_GET_VALID_RETURN_RC(pTest, RTEXITCODE_FAILURE);
1254 RTCritSectEnter(&pTest->Lock);
1255 rtTestSubTestReport(pTest);
1256 RTCritSectLeave(&pTest->Lock);
1259 if (!pTest->cErrors)
1261 RTTestPrintfNl(hTest, RTTESTLVL_ALWAYS, "SUCCESS\n", pTest->cErrors);
1266 RTTestPrintfNl(hTest, RTTESTLVL_ALWAYS, "FAILURE - %u errors\n", pTest->cErrors);
1270 RTTestDestroy(pTest);
1277 PRTTESTINT pTest = hTest;
1278 RTTEST_GET_VALID_RETURN_RC(pTest, RTEXITCODE_SKIPPED);
1280 RTCritSectEnter(&pTest->Lock);
1281 rtTestSubTestReport(pTest);
1282 RTCritSectLeave(&pTest->Lock);
1285 if (!pTest->cErrors)
1289 RTTestPrintfNl(hTest, RTTESTLVL_ALWAYS, "SKIPPED\n", pTest->cErrors);
1294 RTTestPrintfNl(hTest, RTTESTLVL_ALWAYS, "FAILURE - %u errors\n", pTest->cErrors);
1298 RTTestDestroy(pTest);
1326 PRTTESTINT pTest = hTest;
1327 RTTEST_GET_VALID_RETURN_RC(pTest, -1);
1329 RTCritSectEnter(&pTest->Lock);
1332 rtTestSubCleanup(pTest);
1335 pTest->cSubTests++;
1336 pTest->cSubTestAtErrors = ASMAtomicUoReadU32(&pTest->cErrors);
1337 pTest->pszSubTest = RTStrDup(pszSubTest);
1338 pTest->cchSubTest = strlen(pszSubTest);
1339 pTest->fSubTestSkipped = false;
1340 pTest->fSubTestReported = false;
1343 if (pTest->enmMaxLevel >= RTTESTLVL_DEBUG)
1346 if (!pTest->fXmlTopTestDone)
1348 pTest->fXmlTopTestDone = true;
1349 rtTestXmlElemStart(pTest, "Test", "name=%RMas", pTest->pszTest);
1352 rtTestXmlElemStart(pTest, "Test", "name=%RMas", pszSubTest);
1354 RTCritSectLeave(&pTest->Lock);
1415 PRTTESTINT pTest = hTest;
1416 RTTEST_GET_VALID_RETURN_RC(pTest, VERR_INVALID_HANDLE);
1418 RTCritSectEnter(&pTest->Lock);
1419 int cch = rtTestSubCleanup(pTest);
1420 RTCritSectLeave(&pTest->Lock);
1439 PRTTESTINT pTest = hTest;
1441 RTTEST_GET_VALID_RETURN_RC(pTest, VERR_INVALID_HANDLE);
1444 if (pTest->enmMaxLevel >= RTTESTLVL_INFO)
1449 RTCritSectEnter(&pTest->OutputLock);
1450 cch += rtTestPrintf(pTest, "%N\n", pszFormat, &va2);
1451 RTCritSectLeave(&pTest->OutputLock);
1486 PRTTESTINT pTest = hTest;
1488 RTTEST_GET_VALID_RETURN_RC(pTest, VERR_INVALID_HANDLE);
1490 pTest->fSubTestSkipped = true;
1493 if (pszFormat && *pszFormat && pTest->enmMaxLevel >= RTTESTLVL_INFO)
1498 RTCritSectEnter(&pTest->OutputLock);
1499 cch += rtTestPrintf(pTest, "%N\n", pszFormat, &va2);
1500 RTCritSectLeave(&pTest->OutputLock);
1576 PRTTESTINT pTest = hTest;
1577 RTTEST_GET_VALID_RETURN(pTest);
1581 RTCritSectEnter(&pTest->Lock);
1582 rtTestXmlElem(pTest, "Value", "name=%RMas unit=%RMas value=\"%llu\"", pszName, pszUnit, u64Value);
1583 RTCritSectLeave(&pTest->Lock);
1585 RTCritSectEnter(&pTest->OutputLock);
1586 rtTestPrintf(pTest, " %-48s: %'16llu %s\n", pszName, u64Value, pszUnit);
1587 RTCritSectLeave(&pTest->OutputLock);
1624 PRTTESTINT pTest = hTest;
1625 RTTEST_GET_VALID_RETURN(pTest);
1627 ASMAtomicIncU32(&pTest->cErrors);
1643 PRTTESTINT pTest = hTest;
1644 RTTEST_GET_VALID_RETURN_RC(pTest, UINT32_MAX);
1646 return ASMAtomicReadU32(&pTest->cErrors);
1652 PRTTESTINT pTest = hTest;
1653 RTTEST_GET_VALID_RETURN_RC(pTest, UINT32_MAX);
1655 return ASMAtomicReadU32(&pTest->cErrors) - pTest->cSubTestAtErrors;
1670 PRTTESTINT pTest = hTest;
1671 RTTEST_GET_VALID_RETURN_RC(pTest, VERR_INVALID_HANDLE);
1673 RTTestErrorInc(pTest);
1676 if (pTest->enmMaxLevel >= RTTESTLVL_FAILURE)
1685 RTCritSectEnter(&pTest->OutputLock);
1686 cch += rtTestPrintf(pTest, fHasNewLine ? "%N" : "%N\n", pszFormat, &va2);
1687 RTCritSectLeave(&pTest->OutputLock);