This msvcrt-A?? series patch implements test cases for the *printf family of functions License: LGPL Changelog: * dlls/msvcrt/tests/Makefile.in, dlls/msvcrt/tests/printf.c: Jaco Greeff <jaco@puxedo.org> - Test case for the *printf family of functions --[ inline patch ]-- diff -aurN msvcrt-A02/dlls/msvcrt/tests/Makefile.in msvcrt-A03/dlls/msvcrt/tests/Makefile.in --- msvcrt-A02/dlls/msvcrt/tests/Makefile.in 2002-10-30 23:49:03.000000000 +0000 +++ msvcrt-A03/dlls/msvcrt/tests/Makefile.in 2002-11-02 22:51:10.000000000 +0000 @@ -7,6 +7,7 @@ EXTRAINCL = -I$(TOPSRCDIR)/include/msvcrt CTESTS = \ + printf.c \ scanf.c @MAKE_TEST_RULES@ diff -aurN msvcrt-A02/dlls/msvcrt/tests/printf.c msvcrt-A03/dlls/msvcrt/tests/printf.c --- msvcrt-A02/dlls/msvcrt/tests/printf.c 1970-01-01 00:00:00.000000000 +0000 +++ msvcrt-A03/dlls/msvcrt/tests/printf.c 2002-11-02 22:54:21.000000000 +0000 @@ -0,0 +1,69 @@ +/* + * Unit test suite for *printf functions. + * + * Copyright 2002 Jaco Greeff + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "stdio.h" +#include "wine/test.h" +#include "wine/unicode.h" + +static void test_string(FILE *f, void *pExpected, INT nLen, INT nSize) +{ + CHAR szResult[1024]; + + ok(fread(szResult, nSize, nLen, f) == nLen, "Unexpected number of bytes read\n"); + ok(memcmp(szResult, pExpected, nLen*nSize) == 0, "String comparison failed\n"); +} + +static void test_printf(void) +{ + /* test strings */ + static const CHAR szTestA[] = "ASCII"; + static const CHAR szTestU[] = "Unicode"; + static const WCHAR wszTestA[] = { 'A', 'S', 'C', 'I', 'I', 0 }; + static const WCHAR wszTestU[] = { 'U', 'n', 'i', 'c', 'o', 'd', 'e', 0 }; + + /* test formatting operations */ + static const CHAR szFmtA[] = "%s"; + static const CHAR szFmtW[] = "%S"; + static const WCHAR wszFmtW[] = { '%', 's', 0 }; + static const WCHAR wszFmtA[] = { '%', 'S', 0 }; + + FILE *f; + + /* write the strings to disk */ + ok((f = fopen("printf.txt", "w")) != NULL, "Unable to create printf.txt\n"); + ok(fprintf(f, szFmtA, szTestA) == strlen(szTestA), "Failed writing string\n"); + ok(fprintf(f, szFmtW, wszTestA) == strlenW(wszTestA), "Failed writing string\n"); + ok(fwprintf(f, wszFmtA, szTestU) == strlen(szTestU), "Failed writing string\n"); + ok(fwprintf(f, wszFmtW, wszTestU) == strlenW(wszTestU), "Failed writing string\n"); + fclose(f); + + /* read/test the strings on disk */ + ok((f = fopen("printf.txt", "r")) != NULL, "Unable to open printf.txt\n"); + test_string(f, (void *)szTestA, strlen(szTestA), sizeof(CHAR)); + test_string(f, (void *)szTestA, strlen(szTestA), sizeof(CHAR)); + test_string(f, (void *)wszTestU, strlenW(wszTestU), sizeof(WCHAR)); + test_string(f, (void *)wszTestU, strlenW(wszTestU), sizeof(WCHAR)); + fclose(f); +} + +START_TEST(printf) +{ + test_printf(); +}