[NTFS]
[reactos.git] / rostests / apitests / crt / sprintf.c
index 790f9b4..54636a1 100644 (file)
@@ -2,12 +2,13 @@
  * PROJECT:         ReactOS api tests
  * LICENSE:         GPLv2+ - See COPYING in the top level directory
  * PURPOSE:         Test for sprintf
- * PROGRAMMER:      Thomas Faber <thfabba@gmx.de>
+ * PROGRAMMER:      Thomas Faber <thomas.faber@reactos.org>
  */
 
+#include <apitest.h>
+
 #define WIN32_NO_STATUS
 #include <stdio.h>
-#include <wine/test.h>
 #include <tchar.h>
 #include <pseh/pseh2.h>
 #include <ndk/mmfuncs.h>
@@ -19,9 +20,6 @@
 #pragma GCC diagnostic ignored "-Wnonnull"
 #endif
 
-#define StartSeh()              ExceptionStatus = STATUS_SUCCESS; _SEH2_TRY {
-#define EndSeh(ExpectedStatus)  } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { ExceptionStatus = _SEH2_GetExceptionCode(); } _SEH2_END; ok(ExceptionStatus == ExpectedStatus, "Exception %lx, expected %lx\n", ExceptionStatus, ExpectedStatus)
-
 static
 PVOID
 AllocateGuarded(
@@ -73,7 +71,6 @@ FreeGuarded(
  *       user32's wsprintf. Make sure to test them all */
 START_TEST(sprintf)
 {
-    NTSTATUS ExceptionStatus;
     int Length;
     CHAR Buffer[128];
     PCHAR String;
@@ -151,9 +148,11 @@ START_TEST(sprintf)
     ok_str(Buffer, "hello");
     ok_int(Length, 5);
 
-    /* TODO: wsprintf can't do * */
-#ifndef TEST_USER32
     Length = sprintf(Buffer, "%*s", -8, "hello");
+#ifdef TEST_USER32
+    ok_str(Buffer, "*s");
+    ok_int(Length, 2);
+#else
     ok_str(Buffer, "hello   ");
     ok_int(Length, 8);
 #endif
@@ -179,13 +178,16 @@ START_TEST(sprintf)
     ok_str(Buffer, "hell");
     ok_int(Length, 4);
     
-#ifndef TEST_USER32
     StartSeh()
         Length = sprintf(Buffer, "%.*s", -1, "hello");
+#ifdef TEST_USER32
+        ok_str(Buffer, "*s");
+        ok_int(Length, 2);
+#else
         ok_str(Buffer, "hello");
         ok_int(Length, 5);
-    EndSeh(STATUS_SUCCESS);
 #endif
+    EndSeh(STATUS_SUCCESS);
 
     String = AllocateGuarded(6);
     if (!String)
@@ -219,32 +221,47 @@ START_TEST(sprintf)
         ok_int(Length, 4);
     EndSeh(STATUS_SUCCESS);
 
-    /* TODO: wsprintf can't do *, and also seems to use strlen despite a
-     * precision being given */
-#ifndef TEST_USER32
     String[5] = '!';
     StartSeh()
         Length = sprintf(Buffer, "%.5s", String);
         ok_str(Buffer, "hello");
         ok_int(Length, 5);
+#ifdef TEST_USER32
+    EndSeh(STATUS_ACCESS_VIOLATION);
+#else
     EndSeh(STATUS_SUCCESS);
+#endif
 
     StartSeh()
         Length = sprintf(Buffer, "%.6s", String);
         ok_str(Buffer, "hello!");
         ok_int(Length, 6);
+#ifdef TEST_USER32
+    EndSeh(STATUS_ACCESS_VIOLATION);
+#else
     EndSeh(STATUS_SUCCESS);
+#endif
 
     StartSeh()
         Length = sprintf(Buffer, "%.*s", 5, String);
+#ifdef TEST_USER32
+        ok_str(Buffer, "*s");
+        ok_int(Length, 2);
+#else
         ok_str(Buffer, "hello");
         ok_int(Length, 5);
+#endif
     EndSeh(STATUS_SUCCESS);
 
     StartSeh()
         Length = sprintf(Buffer, "%.*s", 6, String);
+#ifdef TEST_USER32
+        ok_str(Buffer, "*s");
+        ok_int(Length, 2);
+#else
         ok_str(Buffer, "hello!");
         ok_int(Length, 6);
+#endif
     EndSeh(STATUS_SUCCESS);
 
     /* both field width and precision */
@@ -252,20 +269,33 @@ START_TEST(sprintf)
         Length = sprintf(Buffer, "%8.5s", String);
         ok_str(Buffer, "   hello");
         ok_int(Length, 8);
+#ifdef TEST_USER32
+    EndSeh(STATUS_ACCESS_VIOLATION);
+#else
     EndSeh(STATUS_SUCCESS);
+#endif
 
     StartSeh()
         Length = sprintf(Buffer, "%-*.6s", -8, String);
+#ifdef TEST_USER32
+        ok_str(Buffer, "*.6s");
+        ok_int(Length, 4);
+#else
         ok_str(Buffer, "hello!  ");
         ok_int(Length, 8);
+#endif
     EndSeh(STATUS_SUCCESS);
 
     StartSeh()
         Length = sprintf(Buffer, "%*.*s", -8, 6, String);
+#ifdef TEST_USER32
+        ok_str(Buffer, "*.*s");
+        ok_int(Length, 4);
+#else
         ok_str(Buffer, "hello!  ");
         ok_int(Length, 8);
-    EndSeh(STATUS_SUCCESS);
 #endif
+    EndSeh(STATUS_SUCCESS);
 
     FreeGuarded(String);
 }