Index: trunk/src/VBox/Runtime/Makefile.kmk
===================================================================
--- trunk/src/VBox/Runtime/Makefile.kmk	(revision 18808)
+++ trunk/src/VBox/Runtime/Makefile.kmk	(revision 18847)
@@ -291,4 +291,5 @@
 	r3/stream.cpp \
 	r3/test.cpp \
+	r3/testi.cpp \
 	r3/tcp.cpp
 
Index: trunk/src/VBox/Runtime/r3/test.cpp
===================================================================
--- trunk/src/VBox/Runtime/r3/test.cpp	(revision 18808)
+++ trunk/src/VBox/Runtime/r3/test.cpp	(revision 18847)
@@ -825,25 +825,9 @@
 }
 
-
-/**
- * Increments the error counter.
- *
- * @returns IPRT status code.
- * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
- *                      associated with the calling thread.
- */
-RTR3DECL(int) RTTestErrorInc(RTTEST hTest)
-{
-    PRTTESTINT pTest = hTest;
-    RTTEST_GET_VALID_RETURN(pTest);
-
-    ASMAtomicIncU32(&pTest->cErrors);
-
-    return VINF_SUCCESS;
-}
-
-
-/**
- * Increments the error counter and prints a failure message.
+/**
+ * Prints an extended PASSED message, optional.
+ *
+ * This does not conclude the sub-test, it could be used to report the passing
+ * of a sub-sub-to-the-power-of-N-test.
  *
  * @returns IPRT status code.
@@ -853,13 +837,11 @@
  * @param   va          The arguments.
  */
-RTR3DECL(int) RTTestFailedV(RTTEST hTest, const char *pszFormat, va_list va)
+RTR3DECL(int) RTTestPassedV(RTTEST hTest, const char *pszFormat, va_list va)
 {
     PRTTESTINT pTest = hTest;
     RTTEST_GET_VALID_RETURN_RC(pTest, -1);
 
-    RTTestErrorInc(pTest);
-
     int cch = 0;
-    if (pTest->enmMaxLevel >= RTTESTLVL_FAILURE)
+    if (pTest->enmMaxLevel >= RTTESTLVL_INFO)
     {
         va_list va2;
@@ -878,4 +860,79 @@
 
 /**
+ * Prints an extended PASSED message, optional.
+ *
+ * This does not conclude the sub-test, it could be used to report the passing
+ * of a sub-sub-to-the-power-of-N-test.
+ *
+ * @returns IPRT status code.
+ * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
+ *                      associated with the calling thread.
+ * @param   pszFormat   The message. No trailing newline.
+ * @param   ...         The arguments.
+ */
+RTR3DECL(int) RTTestPassed(RTTEST hTest, const char *pszFormat, ...)
+{
+    va_list va;
+
+    va_start(va, pszFormat);
+    int cch = RTTestPassedV(hTest, pszFormat, va);
+    va_end(va);
+
+    return cch;
+}
+
+
+/**
+ * Increments the error counter.
+ *
+ * @returns IPRT status code.
+ * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
+ *                      associated with the calling thread.
+ */
+RTR3DECL(int) RTTestErrorInc(RTTEST hTest)
+{
+    PRTTESTINT pTest = hTest;
+    RTTEST_GET_VALID_RETURN(pTest);
+
+    ASMAtomicIncU32(&pTest->cErrors);
+
+    return VINF_SUCCESS;
+}
+
+
+/**
+ * Increments the error counter and prints a failure message.
+ *
+ * @returns IPRT status code.
+ * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
+ *                      associated with the calling thread.
+ * @param   pszFormat   The message. No trailing newline.
+ * @param   va          The arguments.
+ */
+RTR3DECL(int) RTTestFailedV(RTTEST hTest, const char *pszFormat, va_list va)
+{
+    PRTTESTINT pTest = hTest;
+    RTTEST_GET_VALID_RETURN_RC(pTest, -1);
+
+    RTTestErrorInc(pTest);
+
+    int cch = 0;
+    if (pTest->enmMaxLevel >= RTTESTLVL_FAILURE)
+    {
+        va_list va2;
+        va_copy(va2, va);
+
+        RTCritSectEnter(&pTest->OutputLock);
+        cch += rtTestPrintf(pTest, "%N\n", pszFormat, &va2);
+        RTCritSectLeave(&pTest->OutputLock);
+
+        va_end(va2);
+    }
+
+    return cch;
+}
+
+
+/**
  * Increments the error counter and prints a failure message.
  *
@@ -899,58 +956,36 @@
 
 /**
- * Prints an extended PASSED message, optional.
- *
- * This does not conclude the sub-test, it could be used to report the passing
- * of a sub-sub-to-the-power-of-N-test.
- *
- * @returns IPRT status code.
- * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
- *                      associated with the calling thread.
- * @param   pszFormat   The message. No trailing newline.
- * @param   va          The arguments.
- */
-RTR3DECL(int) RTTestPassedV(RTTEST hTest, const char *pszFormat, va_list va)
-{
-    PRTTESTINT pTest = hTest;
-    RTTEST_GET_VALID_RETURN_RC(pTest, -1);
-
-    int cch = 0;
-    if (pTest->enmMaxLevel >= RTTESTLVL_INFO)
-    {
-        va_list va2;
-        va_copy(va2, va);
-
-        RTCritSectEnter(&pTest->OutputLock);
-        cch += rtTestPrintf(pTest, "%N\n", pszFormat, &va2);
-        RTCritSectLeave(&pTest->OutputLock);
-
-        va_end(va2);
-    }
-
-    return cch;
-}
-
-
-/**
- * Prints an extended PASSED message, optional.
- *
- * This does not conclude the sub-test, it could be used to report the passing
- * of a sub-sub-to-the-power-of-N-test.
- *
- * @returns IPRT status code.
- * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
- *                      associated with the calling thread.
- * @param   pszFormat   The message. No trailing newline.
- * @param   ...         The arguments.
- */
-RTR3DECL(int) RTTestPassed(RTTEST hTest, const char *pszFormat, ...)
+ * Same as RTTestPrintfV with RTTESTLVL_FAILURE.
+ *
+ * @returns Number of chars printed.
+ * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
+ *                      associated with the calling thread.
+ * @param   enmLevel    Message importance level.
+ * @param   pszFormat   The message.
+ * @param   va          Arguments.
+ */
+RTR3DECL(int) RTTestFailureDetailsV(RTTEST hTest, const char *pszFormat, va_list va)
+{
+    return RTTestPrintfV(hTest, RTTESTLVL_FAILURE, pszFormat, va);
+}
+
+
+/**
+ * Same as RTTestPrintf with RTTESTLVL_FAILURE.
+ *
+ * @returns Number of chars printed.
+ * @param   hTest       The test handle. If NIL_RTTEST we'll use the one
+ *                      associated with the calling thread.
+ * @param   enmLevel    Message importance level.
+ * @param   pszFormat   The message.
+ * @param   ...         Arguments.
+ */
+RTR3DECL(int) RTTestFailureDetails(RTTEST hTest, const char *pszFormat, ...)
 {
     va_list va;
-
     va_start(va, pszFormat);
-    int cch = RTTestPassedV(hTest, pszFormat, va);
+    int cch = RTTestFailureDetailsV(hTest, pszFormat, va);
     va_end(va);
-
-    return cch;
-}
-
+    return cch;
+}
+
Index: trunk/src/VBox/Runtime/r3/testi.cpp
===================================================================
--- trunk/src/VBox/Runtime/r3/testi.cpp	(revision 18847)
+++ trunk/src/VBox/Runtime/r3/testi.cpp	(revision 18847)
@@ -0,0 +1,107 @@
+/* $Id$ */
+/** @file
+ * IPRT - Testcase Framework, the implicit test handle API variation.
+ */
+
+/*
+ * Copyright (C) 2009 Sun Microsystems, Inc.
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ * Clara, CA 95054 USA or visit http://www.sun.com if you need
+ * additional information or have any questions.
+ */
+
+
+/*******************************************************************************
+*   Header Files                                                               *
+*******************************************************************************/
+#include <iprt/test.h>
+#include <iprt/stdarg.h>
+
+
+RTR3DECL(int) RTTestIPrintfV(RTTESTLVL enmLevel, const char *pszFormat, va_list va)
+{
+    return RTTestPrintfV(NIL_RTTEST, enmLevel, pszFormat, va);
+}
+
+
+RTR3DECL(int) RTTestIPrintf(RTTESTLVL enmLevel, const char *pszFormat, ...)
+{
+    va_list va;
+    va_start(va, pszFormat);
+    int cch = RTTestPrintfV(NIL_RTTEST, enmLevel, pszFormat, va);
+    va_end(va);
+    return cch;
+}
+
+
+RTR3DECL(int) RTTestIPassedV(const char *pszFormat, va_list va)
+{
+    return RTTestPassedV(NIL_RTTEST, pszFormat, va);
+}
+
+
+RTR3DECL(int) RTTestIPassed(const char *pszFormat, ...)
+{
+    va_list va;
+    va_start(va, pszFormat);
+    int cch = RTTestPassedV(NIL_RTTEST, pszFormat, va);
+    va_end(va);
+    return cch;
+}
+
+
+RTR3DECL(int) RTTestIErrorInc(void)
+{
+    return RTTestErrorInc(NIL_RTTEST);
+}
+
+
+RTR3DECL(int) RTTestIFailedV(const char *pszFormat, va_list va)
+{
+    return RTTestFailedV(NIL_RTTEST, pszFormat, va);
+}
+
+
+RTR3DECL(int) RTTestIFailed(const char *pszFormat, ...)
+{
+    va_list va;
+    va_start(va, pszFormat);
+    int cch = RTTestFailedV(NIL_RTTEST, pszFormat, va);
+    va_end(va);
+    return cch;
+}
+
+
+RTR3DECL(int) RTTestIFailureDetailsV(const char *pszFormat, va_list va)
+{
+    return RTTestFailureDetails(NIL_RTTEST, pszFormat, va);
+}
+
+
+RTR3DECL(int) RTTestIFailureDetails(const char *pszFormat, ...)
+{
+    va_list va;
+    va_start(va, pszFormat);
+    int cch = RTTestFailureDetailsV(NIL_RTTEST, pszFormat, va);
+    va_end(va);
+    return cch;
+}
+
Index: trunk/src/VBox/Runtime/testcase/tstUtf8.cpp
===================================================================
--- trunk/src/VBox/Runtime/testcase/tstUtf8.cpp	(revision 18808)
+++ trunk/src/VBox/Runtime/testcase/tstUtf8.cpp	(revision 18847)
@@ -80,8 +80,8 @@
     rc = RTStrToUtf16(s_szBadString1, &pwsz);
     RTTEST_CHECK_MSG(hTest, rc == VERR_NO_TRANSLATION || rc == VERR_INVALID_UTF8_ENCODING,
-                     (hTest, RTTESTLVL_FAILURE, "Conversion of first bad UTF-8 string to UTF-16 apparantly succeeded. It shouldn't. rc=%Rrc\n", rc));
+                     (hTest, "Conversion of first bad UTF-8 string to UTF-16 apparantly succeeded. It shouldn't. rc=%Rrc\n", rc));
     rc = RTStrToUtf16(s_szBadString2, &pwsz);
     RTTEST_CHECK_MSG(hTest, rc == VERR_NO_TRANSLATION || rc == VERR_INVALID_UTF8_ENCODING,
-                     (hTest, RTTESTLVL_FAILURE, "Conversion of second bad UTF-8 strings to UTF-16 apparantly succeeded. It shouldn't. rc=%Rrc\n", rc));
+                     (hTest, "Conversion of second bad UTF-8 strings to UTF-16 apparantly succeeded. It shouldn't. rc=%Rrc\n", rc));
 
     /*
