1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ********************************************************************** 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (C) 2004-2011, International Business Machines 4c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 5c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ********************************************************************** 6c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * file name: filetst.c 7c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * encoding: US-ASCII 8c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * tab size: 8 (not used) 9c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * indentation:4 10c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * 11c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * created on: 2004apr06 12c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * created by: George Rhoten 13c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */ 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "iotest.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustdio.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 21b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <stdlib.h> 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruconst char *STANDARD_TEST_FILE = "iotest-c.txt"; 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFileFromICU(UFILE *myFile) { 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t n[1]; 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru float myFloat = -1234.0; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t newValuePtr[1]; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double newDoubleValuePtr[1]; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar myUString[256]; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uStringBuf[256]; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char myString[256] = ""; 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char testBuf[256] = ""; 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void *origPtr, *ptr; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_STRING_DECL(myStringOrig, "My-String", 9); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_STRING_INIT(myStringOrig, "My-String", 9); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(myUString, 0x2a, sizeof(myUString)/sizeof(*myUString)); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(uStringBuf, 0x2a, sizeof(uStringBuf)/sizeof(*uStringBuf)); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(myString, '*', sizeof(myString)/sizeof(*myString)); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(testBuf, '*', sizeof(testBuf)/sizeof(*testBuf)); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *n = -1234; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (sizeof(void *) == 4) { 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru origPtr = (void *)0xdeadbeef; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (sizeof(void *) == 8) { 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru origPtr = (void *) INT64_C(0x1000200030004000); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (sizeof(void *) == 16) { 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* iSeries */ 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru union { 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t arr[4]; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void *ptr; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } massiveBigEndianPtr = {{ 0x10002000, 0x30004000, 0x50006000, 0x70008000 }}; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru origPtr = massiveBigEndianPtr.ptr; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("sizeof(void*)=%d hasn't been tested before", (int)sizeof(void*)); 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test fprintf */ 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Signed decimal integer %%d: %d\n", *n); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Signed decimal integer %%i: %i\n", *n); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Unsigned octal integer %%o: %o\n", *n); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Unsigned decimal integer %%u: %u\n", *n); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Lowercase unsigned hexadecimal integer %%x: %x\n", *n); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Uppercase unsigned hexadecimal integer %%X: %X\n", *n); 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Float %%f: %f\n", myFloat); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Lowercase float %%e: %e\n", myFloat); 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Uppercase float %%E: %E\n", myFloat); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Lowercase float %%g: %g\n", myFloat); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Uppercase float %%G: %G\n", myFloat); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Pointer %%p: %p\n", origPtr); 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Char %%c: %c\n", 'A'); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "UChar %%C: %C\n", (UChar)0x0041); /*'A'*/ 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "String %%s: %s\n", "My-String"); 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "NULL String %%s: %s\n", NULL); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Unicode String %%S: %S\n", myStringOrig); 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "NULL Unicode String %%S: %S\n", NULL); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Percent %%P (non-ANSI): %P\n", myFloat); 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Spell Out %%V (non-ANSI): %V\n", myFloat); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_feof(myFile)) { 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got feof while writing the file.\n"); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *n = 1; 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "\t\nPointer to integer (Count) %%n: n=%d %n n=%d\n", *n, n, *n); 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "Pointer to integer Value: %d\n", *n); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "This is a long test123456789012345678901234567890123456789012345678901234567890\n"); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *n = 1; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "\tNormal fprintf count: n=%d %n n=%d\n", (int)*n, (int*)n, (int)*n); 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fprintf(u_fgetfile(myFile), "\tNormal fprintf count value: n=%d\n", (int)*n); /* Should be 27 as stated later on. */ 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't read test file."); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_feof(myFile)) { 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got feof while reading the file and not at the end of the file.\n"); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myUString[0] = u_fgetc(myFile); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myUString[0] != 0x53 /* S */) { 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgetc 1 returned %X. Expected 'S'.", myString[0]); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fungetc(myUString[0], myFile); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myUString[0] = u_fgetc(myFile); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myUString[0] != 0x53 /* S */) { 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgetc 2 returned %X. Expected 'S'.", myString[0]); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fungetc(myUString[0], myFile); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myUString[0] = u_fgetc(myFile); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myUString[0] != 0x53 /* S */) { 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgetc 3 returned %X. Expected 'S'.", myString[0]); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fungetc(myUString[0], myFile); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myUString[0] = u_fgetc(myFile); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myUString[1] = (UChar)u_fgetcx(myFile); /* Mix getc and getcx and see what happens. */ 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myUString[2] = u_fgetc(myFile); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myUString[0] != 0x53 /* S */ && myUString[1] != 0x69 /* i */ && myUString[2] != 0x6E /* n */) { 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgetcx returned \\u%04X\\u%04X\\u%04X. Expected 'Sin'.", myString[0], myString[1], myString[2]); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fungetc(myUString[2], myFile); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fungetc(myUString[1], myFile); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fungetc(myUString[0], myFile); 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *n = -1234; 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newValuePtr = 1; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Signed decimal integer %%d: %d\n", newValuePtr); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*n != *newValuePtr) { 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%d Got: %d, Expected: %d\n", *newValuePtr, *n); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newValuePtr = 1; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Signed decimal integer %%i: %i\n", newValuePtr); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*n != *newValuePtr) { 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%i Got: %i, Expected: %i\n", *newValuePtr, *n); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newValuePtr = 1; 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Unsigned octal integer %%o: %o\n", newValuePtr); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*n != *newValuePtr) { 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%o Got: %o, Expected: %o\n", *newValuePtr, *n); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newValuePtr = 1; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Unsigned decimal integer %%u: %u\n", newValuePtr); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*n != *newValuePtr) { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%u Got: %u, Expected: %u\n", *newValuePtr, *n); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newValuePtr = 1; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Lowercase unsigned hexadecimal integer %%x: %x\n", newValuePtr); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*n != *newValuePtr) { 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%x Got: %x, Expected: %x\n", *newValuePtr, *n); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newValuePtr = 1; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Uppercase unsigned hexadecimal integer %%X: %X\n", newValuePtr); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*n != *newValuePtr) { 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%X Got: %X, Expected: %X\n", *newValuePtr, *n); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Float %%f: %lf\n", newDoubleValuePtr); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%f Got: %f, Expected: %f\n", *newDoubleValuePtr, myFloat); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Lowercase float %%e: %le\n", newDoubleValuePtr); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%e Got: %e, Expected: %e\n", *newDoubleValuePtr, myFloat); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Uppercase float %%E: %lE\n", newDoubleValuePtr); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%E Got: %E, Expected: %E\n", *newDoubleValuePtr, myFloat); 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Lowercase float %%g: %lg\n", newDoubleValuePtr); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%g Got: %g, Expected: %g\n", *newDoubleValuePtr, myFloat); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Uppercase float %%G: %lG\n", newDoubleValuePtr); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%G Got: %G, Expected: %G\n", *newDoubleValuePtr, myFloat); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ptr = NULL; 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Pointer %%p: %p\n", &ptr); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ptr != origPtr) { 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%p Got: %p, Expected: %p\n", ptr, origPtr); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Char %%c: %c\n", myString); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*myString != 'A') { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%c Got: %c, Expected: A\n", *myString); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "UChar %%C: %C\n", myUString); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*myUString != (UChar)0x0041) { /*'A'*/ 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%C Got: %C, Expected: A\n", *myUString); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "String %%s: %s\n", myString); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(myString, "My-String")) { 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%s Got: %s, Expected: My String\n", myString); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "NULL String %%s: %s\n", myString); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(myString, "(null)")) { 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%s Got: %s, Expected: My String\n", myString); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Unicode String %%S: %S\n", myUString); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(myString, "My-String")) { 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%S Got: %S, Expected: My String\n", myUString); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "NULL Unicode String %%S: %S\n", myUString); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(myString, "(null)")) { 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%S Got: %S, Expected: My String\n", myUString); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Percent %%P (non-ANSI): %P\n", newDoubleValuePtr); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%P Got: %f, Expected: %f\n", *newDoubleValuePtr, myFloat); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *newDoubleValuePtr = -1.0; 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(myFile, "Spell Out %%V (non-ANSI): %V\n", newDoubleValuePtr); 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFloat != *newDoubleValuePtr) { 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%V Got: %f, Expected: %f\n", *newDoubleValuePtr, myFloat); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgets(myUString, 4, myFile); 237c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru myString[2] = '!'; 238c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru myString[3] = '!'; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myString == NULL || strcmp(myString, "\t\n") != 0) { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(myUString, sizeof(myUString)/sizeof(*myUString), myFile) != myUString) { 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets did not return myUString\n"); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myString == NULL || strcmp(myString, "Pointer to integer (Count) %n: n=1 n=1\n") != 0) { 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(myUString, sizeof(myUString)/sizeof(*myUString), myFile) != myUString) { 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets did not return myUString\n"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myString == NULL || strcmp(myString, "Pointer to integer Value: 37\n") != 0) { 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(myUString, sizeof(myUString)/sizeof(*myUString), myFile) != myUString) { 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets did not return myUString\n"); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myString == NULL || strcmp(myString, "This is a long test123456789012345678901234567890123456789012345678901234567890\n") != 0) { 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(myUString, 0, myFile) != NULL) { 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\" and it should have returned NULL\n", myString); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(myUString, 1, myFile) != myUString) { 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets did not return myUString\n"); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myString == NULL || strcmp(myString, "") != 0) { 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(myUString, 2, myFile) != myUString) { 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets did not return myUString\n"); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, myUString, sizeof(myUString)/sizeof(*myUString)); 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myString == NULL || strcmp(myString, "\t") != 0) { 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, u_fgets(myUString, sizeof(myUString)/sizeof(*myUString), myFile), 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(myUString)/sizeof(*myUString)); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(myString, "Normal fprintf count: n=1 n=1\n") != 0) { 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_feof(myFile)) { 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got feof while reading the file and not at the end of the file.\n"); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(myString, u_fgets(myUString, sizeof(myUString)/sizeof(*myUString), myFile), 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sizeof(myUString)/sizeof(*myUString)); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(myString, "\tNormal fprintf count value: n=27\n") != 0) { 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets got \"%s\"\n", myString); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!u_feof(myFile)) { 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did not get feof while reading the end of the file.\n"); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fscanf(myFile, "%S\n", myUString) != 0) { 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fscanf read data while reading the end of the file.\n"); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFile(void) { 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* FILE *standardFile;*/ 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing u_fopen\n"); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFileFromICU(u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL)); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Don't know how to make this work without stdout or stderr */ 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing u_finit\n"); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru standardFile = fopen(STANDARD_TEST_FILE, "wb"); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFileFromICU(u_finit(standardFile, NULL, NULL)); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(standardFile); 32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("Testing u_fadopt\n"); 32650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho standardFile = fopen(STANDARD_TEST_FILE, "wb"); 32750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TestFileFromICU(u_fadopt(standardFile, NULL, NULL)); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void StdinBuffering(void) { 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if 0 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buff[255]; 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t num = 0; 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *uStdIn = NULL; 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *uStdOut = NULL; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uStdIn = u_finit(stdin, NULL, NULL); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uStdOut = u_finit(stdout, NULL, NULL); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uStdIn == NULL) 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buff[0] = 0x40; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buff[1] = 0; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgets(buff, sizeof(buff)/sizeof(buff[0]), uStdIn); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(uStdOut, "%S\n", buff); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(uStdIn, "%d", &num); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(uStdOut, "%d\n", num); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf(uStdIn, "%d", &num); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(uStdOut, "%d\n", num); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Test disabled because it requires user interaction"); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCodepageAndLocale(void) { 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, NULL); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetcodepage(myFile) == NULL 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetcodepage(myFile), ucnv_getDefaultName()) != 0) 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default codepage. Got %s expected: %s\n", 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetcodepage(myFile), ucnv_getDefaultName()); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetlocale(myFile) == NULL 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetlocale(myFile), uloc_getDefault()) != 0) 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default locale. Got %s expected: %s\n", 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetlocale(myFile), uloc_getDefault()); 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", "es", NULL); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetcodepage(myFile) == NULL 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetcodepage(myFile), ucnv_getDefaultName()) != 0) 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default codepage for \"es\". Got %s expected: iso-8859-1\n", 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetcodepage(myFile)); 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetlocale(myFile) == NULL 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetlocale(myFile), "es") != 0) 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default locale. Got %s expected: %s\n", 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetlocale(myFile), "es"); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-16"); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetcodepage(myFile) == NULL 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetcodepage(myFile), "UTF-16") != 0) 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default codepage for \"en\". Got %s expected: iso-8859-1\n", 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetcodepage(myFile)); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetlocale(myFile) == NULL 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetlocale(myFile), uloc_getDefault()) != 0) 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default locale. Got %s expected: %s\n", 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetlocale(myFile), uloc_getDefault()); 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", "zh", "UTF-16"); 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetcodepage(myFile) == NULL 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetcodepage(myFile), "UTF-16") != 0) 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default codepage for \"en\". Got %s expected: iso-8859-1\n", 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetcodepage(myFile)); 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetlocale(myFile) == NULL 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru || strcmp(u_fgetlocale(myFile), "zh") != 0) 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the proper default locale. Got %s expected: %s\n", 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgetlocale(myFile), "zh"); 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestfgetsBuffers(void) { 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[2048]; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expectedBuffer[2048]; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char testStr[] = "This is a test string that tests u_fgets. It makes sure that we don't try to read too much!"; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-16"); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedSize = (int32_t)strlen(testStr); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t readSize; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t repetitions; 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fputc(0x3BC, myFile); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fputc(0x110000, myFile) != U_EOF) { 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fputc should return U_EOF for 0x110000.\n"); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fputc((UChar32)0xFFFFFFFFu, myFile) != U_EOF) { 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fputc should return U_EOF for 0xFFFFFFFF.\n"); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fputc(0xFF41, myFile); 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(expectedBuffer, 0, sizeof(expectedBuffer)/sizeof(expectedBuffer[0])); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(buffer, testStr, expectedSize+1); 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < 16; repetitions++) { 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_write(buffer, expectedSize, myFile); 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(expectedBuffer, buffer); 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "UTF-16"); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetc(myFile) != 0x3BC) { 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The first character is wrong\n"); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetc(myFile) != 0xFF41) { 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The second character is wrong\n"); 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile) != buffer) { 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the buffer back\n"); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru readSize = u_strlen(buffer); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (readSize != expectedSize*repetitions) { 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Buffer is the wrong size. Got %d Expected %d\n", u_strlen(buffer), expectedSize*repetitions); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[(expectedSize*repetitions) + 1] != 0xBEEF) { 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets wrote too much data\n"); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(buffer, expectedBuffer) != 0) { 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did get expected string back\n"); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(u_fgetcodepage(myFile), "UTF-16") != 0) { 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got %s instead of UTF-16\n", u_fgetcodepage(myFile)); 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Now trying a multi-byte encoding (UTF-8).\n"); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-8"); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fputc(0x3BC, myFile); 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fputc(0xFF41, myFile); 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(expectedBuffer, 0, sizeof(expectedBuffer)/sizeof(expectedBuffer[0])); 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(buffer, testStr, expectedSize+1); 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < 16; repetitions++) { 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_write(buffer, expectedSize, myFile); 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(expectedBuffer, buffer); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "UTF-8"); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(u_fgetcodepage(myFile), "UTF-8") != 0) { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got %s instead of UTF-8\n", u_fgetcodepage(myFile)); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetc(myFile) != 0x3BC) { 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The first character is wrong\n"); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgetc(myFile) != 0xFF41) { 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The second character is wrong\n"); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile) != buffer) { 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the buffer back\n"); 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru readSize = u_strlen(buffer); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (readSize != expectedSize*repetitions) { 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Buffer is the wrong size. Got %d Expected %d\n", u_strlen(buffer), expectedSize*repetitions); 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[(expectedSize*repetitions) + 1] != 0xBEEF) { 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets wrote too much data\n"); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(buffer, expectedBuffer) != 0) { 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did get expected string back\n"); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Now trying a multi-byte encoding (UTF-8) with a really small buffer.\n"); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-8"); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fputc(0xFF41, myFile); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(expectedBuffer, 0, sizeof(expectedBuffer)/sizeof(expectedBuffer[0])); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(buffer, testStr, expectedSize+1); 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < 1; repetitions++) { 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_write(buffer, expectedSize, myFile); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcat(expectedBuffer, buffer); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "UTF-8"); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(buffer, 2, myFile) != buffer) { 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the buffer back\n"); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru readSize = u_strlen(buffer); 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (readSize != 1) { 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Buffer is the wrong size. Got %d Expected %d\n", u_strlen(buffer), 1); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[0] != 0xFF41 || buffer[1] != 0) { 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Did get expected string back\n"); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[2] != 0xBEEF) { 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets wrote too much data\n"); 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFileReadBuffering(void) { 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[1024]; 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-16"); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t how_many; 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t repetitions; 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < 2; repetitions++) { 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_write(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xDEAD, sizeof(buffer)/sizeof(buffer[0])); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "UTF-16"); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru how_many = u_file_read(buffer, 1024, myFile); 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (how_many != 1024 || buffer[1023] != 0xBEEF) { 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_file_read read too much or not enough data\n"); 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestfgetsLineCount(void) { 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[2048]; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expectedBuffer[2048]; 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char charBuffer[2048]; 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char testStr[] = "This is a test string that tests u_fgets. It makes sure that we don't try to read too much!"; 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = NULL; 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILE *stdFile = fopen(STANDARD_TEST_FILE, "w"); 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t expectedSize = (int32_t)strlen(testStr); 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t repetitions; 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t nlRepetitions; 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stdFile == NULL) { 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(expectedBuffer, 0, sizeof(expectedBuffer)/sizeof(expectedBuffer[0])); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < 16; repetitions++) { 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(testStr, sizeof(testStr[0]), expectedSize, stdFile); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (nlRepetitions = 0; nlRepetitions < repetitions; nlRepetitions++) { 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite("\n", sizeof(testStr[0]), 1, stdFile); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(stdFile); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, NULL); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stdFile = fopen(STANDARD_TEST_FILE, "r"); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;;) { 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *returnedCharBuffer; 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *returnedUCharBuffer; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnedCharBuffer = fgets(charBuffer, sizeof(charBuffer)/sizeof(charBuffer[0]), stdFile); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnedUCharBuffer = u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!returnedCharBuffer && !returnedUCharBuffer) { 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Both returned NULL. stop. */ 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (returnedCharBuffer != charBuffer) { 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the charBuffer back\n"); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(expectedBuffer, charBuffer, (int32_t)strlen(charBuffer)+1); 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (returnedUCharBuffer != buffer) { 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Didn't get the buffer back\n"); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(buffer, expectedBuffer) != 0) { 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("buffers are different\n"); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[u_strlen(buffer)+1] != 0xBEEF) { 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets wrote too much\n"); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(stdFile); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestfgetsNewLineHandling(void) { 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[256]; 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar testUStr[][16] = { 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000D, 0}, 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000D, 0x000A, 0}, 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000D, 0}, 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000D, 0}, 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0085, 0}, 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000A, 0}, 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000D, 0}, 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000B, 0}, 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000C, 0}, 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x000C, 0}, 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x2028, 0}, 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0085, 0}, 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x2029, 0}, 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0085, 0}, 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x008B, 0x000D, 0}, 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00A0, 0x000D, 0x000A, 0}, 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x3000, 0x000D, 0}, 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0xd800, 0xdfff, 0x000D, 0}, 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00AB, 0x0085, 0}, 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00AC, 0x000A, 0}, 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00AD, 0x000D, 0}, 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00BA, 0x000B, 0}, 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00AB, 0x000C, 0}, 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00B1, 0x000C, 0}, 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x30BB, 0x2028, 0}, 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00A5, 0x0085, 0}, 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x0080, 0x2029, 0}, 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru {0x00AF, 0x0085, 0} 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = NULL; 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lineIdx; 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "wb", NULL, "UTF-8"); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (lineIdx = 0; lineIdx < (int32_t)(sizeof(testUStr)/sizeof(testUStr[0])); lineIdx++) { 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_write(testUStr[lineIdx], u_strlen(testUStr[lineIdx]), myFile); 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "rb", NULL, "UTF-8"); 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (lineIdx = 0; lineIdx < (int32_t)(sizeof(testUStr)/sizeof(testUStr[0])); lineIdx++) { 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *returnedUCharBuffer; 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnedUCharBuffer = u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!returnedUCharBuffer) { 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Returned NULL. stop. */ 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(buffer, testUStr[lineIdx]) != 0) { 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("buffers are different at index = %d\n", lineIdx); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[u_strlen(buffer)+1] != 0xBEEF) { 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets wrote too much\n"); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (lineIdx != (int32_t)(sizeof(testUStr)/sizeof(testUStr[0]))) { 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets read too much\n"); 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile) != NULL) { 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_file_write wrote too much\n"); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestLineCount(const char *prefixLine, const char *line, int32_t numRepititions) { 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[64]; 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar expectedBuffer[64]; 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lineLen = strlen(line); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *returnedUCharBuffer; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t repetitions; 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = NULL; 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILE *stdFile = fopen(STANDARD_TEST_FILE, "wb"); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stdFile == NULL) { 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Write a prefix line and then write a bunch of lines */ 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(prefixLine, strlen(prefixLine), 1, stdFile); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < numRepititions; repetitions++) { 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(line, lineLen, 1, stdFile); 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(stdFile); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "rb", NULL, NULL); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't read test file.\n"); 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Read the prefix line. This can make sure that a Windows newline is either on a boundary or before it. */ 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(expectedBuffer, prefixLine, (int32_t)strlen(prefixLine)+1); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnedUCharBuffer = u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(returnedUCharBuffer, expectedBuffer) != 0) { 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("prefix buffer is different. prefix=\"%s\"\n", prefixLine); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrncpy(expectedBuffer, line, (int32_t)strlen(line)+1); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; ; repetitions++) { 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnedUCharBuffer = u_fgets(buffer, sizeof(buffer)/sizeof(buffer[0]), myFile); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!returnedUCharBuffer) { 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* returned NULL. stop. */ 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(buffer, expectedBuffer) != 0) { 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("buffers are different at count %d\n", repetitions); 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[u_strlen(buffer)+1] != 0xBEEF) { 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgets wrote too much\n"); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (repetitions != numRepititions) { 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("got wrong number of lines. got=%d expected=%d\n", repetitions, numRepititions); 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestfgetsNewLineCount(void) { 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* This makes sure that lines are correctly handled between buffer boundaries. */ 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestLineCount("\n", "\n", 1024); /* Unix newlines */ 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestLineCount("\r\n", "\r\n", 1024);/* Windows newlines */ 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestLineCount("a\r\n", "\r\n", 1024);/* Windows newlines offset by 1 byte */ 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestLineCount("\r\n", "a\r\n", 1024);/* Windows newlines offset with data */ 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestLineCount("\n", "a\n", 1024); /* Unix newlines offset with data */ 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestLineCount("\n", "\r\n", 1024); /* a mixed number of lines. */ 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFgetsLineBuffering(void) { 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buffer[2003]; /* Use a non-power of 2 or 10 */ 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *returnedUCharBuffer; 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t repetitions; 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = NULL; 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILE *stdFile = fopen(STANDARD_TEST_FILE, "wb"); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stdFile == NULL) { 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(buffer, 0xBEEF, sizeof(buffer)/sizeof(buffer[0])); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Write one very long line */ 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (repetitions = 0; repetitions < ((sizeof(buffer)/sizeof(buffer[0]))*2); repetitions++) { 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fwrite(repetitions ? "1" : "2", 1, 1, stdFile); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(stdFile); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "rb", NULL, NULL); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't read test file.\n"); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Read part of one very long line */ 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru returnedUCharBuffer = u_fgets(buffer, (sizeof(buffer)/sizeof(buffer[0]))-1, myFile); 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strlen(returnedUCharBuffer) != ((sizeof(buffer)/sizeof(buffer[0]))-2)) { 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Line is wrong length. Got %d. Expected %d.\n", 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strlen(returnedUCharBuffer), ((sizeof(buffer)/sizeof(buffer[0]))-2)); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* We better not read too much */ 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[(sizeof(buffer)/sizeof(buffer[0]))-1] != 0xBEEF) { 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Too much data was written\n"); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCodepage(void) { 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = NULL; 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar strABAccentA[] = { 0x0041, 0x0042, 0x00C1, 0x0043, 0}; 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar strBadConversion[] = { 0x0041, 0x0042, 0xfffd, 0x0043, 0}; 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar testBuf[sizeof(strABAccentA)/sizeof(strABAccentA[0])*2]; /* *2 to see if too much was */ 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char convName[UCNV_MAX_CONVERTER_NAME_LENGTH]; 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t retVal; 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "absurd converter that can't be opened"); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile) { 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Recieved a UFILE * with an invalid codepage parameter\n"); 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "ISO-8859-1"); 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file for iso-8859-1.\n"); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp("ISO-8859-1", u_fgetcodepage(myFile)) != 0) { 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Couldn't get ISO-8859-1 back as opened codepage\n"); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_write(strABAccentA, u_strlen(strABAccentA), myFile); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Now see what we got wrote */ 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, NULL); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fsetcodepage("ISO-8859-1", myFile) != 0) { 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fsetcodepage didn't set the codepage\n"); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = u_file_read(testBuf, u_strlen(strABAccentA), myFile); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strncmp(strABAccentA, testBuf, u_strlen(strABAccentA)) != 0) { 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The test data was read and written differently!\n"); 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (retVal != u_strlen(strABAccentA)) { 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The test data returned different lengths. Got: %d, Expected %d\n", retVal, u_strlen(strABAccentA)); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* What happens on invalid input? */ 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "ISO-8859-1"); 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(ucnv_getName(u_fgetConverter(myFile), &status), "ISO-8859-1") != 0) { 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgetConverter returned %s\n", ucnv_getName(u_fgetConverter(myFile), &status)); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fsetcodepage("UTF-8", myFile) != 0) { 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fsetcodepage didn't set the codepage to UTF-8\n"); 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(ucnv_getName(u_fgetConverter(myFile), &status), "UTF-8") != 0) { 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fgetConverter returned %s\n", ucnv_getName(u_fgetConverter(myFile), &status)); 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = u_file_read(testBuf, u_strlen(strBadConversion), myFile); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strncmp(strBadConversion, testBuf, u_strlen(strBadConversion)) != 0) { 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The test data wasn't subsituted as expected\n"); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Can't currently swap codepages midstream */ 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "ISO-8859-1"); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strcpy(convName, u_fgetcodepage(myFile)); 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_file_read(testBuf, 1, myFile); 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_fsetcodepage("UTF-8", myFile) == 0) { 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fsetcodepage set the codepage after reading a byte\n"); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = u_file_read(testBuf + 1, u_strlen(strABAccentA) - 1, myFile); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strncmp(strABAccentA, testBuf, u_strlen(strABAccentA)) != 0) { 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fsetcodepage changed the codepages after writing data\n"); 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((retVal + 1) != u_strlen(strABAccentA)) { 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The test data returned different lengths. Got: %d, Expected %d\n", retVal, u_strlen(strABAccentA)); 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_frewind(myFile); 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru retVal = u_file_read(testBuf, u_strlen(strABAccentA), myFile); 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strncmp(strABAccentA, testBuf, u_strlen(strABAccentA)) != 0) { 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The test data was read and written differently!\n"); 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (retVal != u_strlen(strABAccentA)) { 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("The test data returned different lengths. Got: %d, Expected %d\n", retVal, u_strlen(strABAccentA)); 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 91227f654740f2a26ad62a5c155af9199af9e69b889clairehostatic void TestCodepageFlush(void) { 913b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#if UCONFIG_NO_LEGACY_CONVERSION || UCONFIG_NO_FORMATTING 914b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("Skipping, legacy conversion or formatting is disabled."); 91527f654740f2a26ad62a5c155af9199af9e69b889claireho#else 91627f654740f2a26ad62a5c155af9199af9e69b889claireho UChar utf16String[] = { 0x39, 0x39, 0x39, 0x20, 0x65E0, 0x6CD6, 0x5728, 0x0000 }; 91727f654740f2a26ad62a5c155af9199af9e69b889claireho uint8_t inBuf[200]; 91827f654740f2a26ad62a5c155af9199af9e69b889claireho size_t inLen =0; 91927f654740f2a26ad62a5c155af9199af9e69b889claireho const char *enc = "IBM-1388"; /* GBK EBCDIC stateful */ 92027f654740f2a26ad62a5c155af9199af9e69b889claireho UFILE *myFile = u_fopen(STANDARD_TEST_FILE, "wb", "en_US_POSIX", enc); 92127f654740f2a26ad62a5c155af9199af9e69b889claireho FILE *myCFile; 92227f654740f2a26ad62a5c155af9199af9e69b889claireho int shift = 0; 923b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t i; 92427f654740f2a26ad62a5c155af9199af9e69b889claireho 92527f654740f2a26ad62a5c155af9199af9e69b889claireho if (myFile == NULL) { 92627f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Can't write test file %s\n", STANDARD_TEST_FILE); 92727f654740f2a26ad62a5c155af9199af9e69b889claireho return; 92827f654740f2a26ad62a5c155af9199af9e69b889claireho } 92927f654740f2a26ad62a5c155af9199af9e69b889claireho 93027f654740f2a26ad62a5c155af9199af9e69b889claireho u_fprintf(myFile, "%S", utf16String); 93127f654740f2a26ad62a5c155af9199af9e69b889claireho u_fclose(myFile); 93227f654740f2a26ad62a5c155af9199af9e69b889claireho 93327f654740f2a26ad62a5c155af9199af9e69b889claireho /* now read it back */ 93427f654740f2a26ad62a5c155af9199af9e69b889claireho myCFile = fopen(STANDARD_TEST_FILE, "rb"); 93527f654740f2a26ad62a5c155af9199af9e69b889claireho if (myCFile == NULL) { 93627f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Can't read test file."); 93727f654740f2a26ad62a5c155af9199af9e69b889claireho return; 93827f654740f2a26ad62a5c155af9199af9e69b889claireho } 93927f654740f2a26ad62a5c155af9199af9e69b889claireho 94027f654740f2a26ad62a5c155af9199af9e69b889claireho inLen = fread(inBuf, 1, 200, myCFile); 94127f654740f2a26ad62a5c155af9199af9e69b889claireho fclose(myCFile); 94227f654740f2a26ad62a5c155af9199af9e69b889claireho 94327f654740f2a26ad62a5c155af9199af9e69b889claireho if(inLen<=0) { 94427f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Failed during read of test file."); 94527f654740f2a26ad62a5c155af9199af9e69b889claireho return; 94627f654740f2a26ad62a5c155af9199af9e69b889claireho } 94727f654740f2a26ad62a5c155af9199af9e69b889claireho 94827f654740f2a26ad62a5c155af9199af9e69b889claireho /* check if shift in and out */ 949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for(i=0;i<(int32_t)inLen;i++) { 95027f654740f2a26ad62a5c155af9199af9e69b889claireho if(inBuf[i]==0x0E) { /* SO */ 95127f654740f2a26ad62a5c155af9199af9e69b889claireho shift= 1; 95227f654740f2a26ad62a5c155af9199af9e69b889claireho } else if(inBuf[i]==0x0F) { /* SI */ 95327f654740f2a26ad62a5c155af9199af9e69b889claireho shift= -1; 95427f654740f2a26ad62a5c155af9199af9e69b889claireho } 95527f654740f2a26ad62a5c155af9199af9e69b889claireho } 95627f654740f2a26ad62a5c155af9199af9e69b889claireho 95727f654740f2a26ad62a5c155af9199af9e69b889claireho if(shift==0) { 95827f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Err: shift was unchanged\n"); 95927f654740f2a26ad62a5c155af9199af9e69b889claireho } else if(shift==1) { 96027f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Err: at end of string, we were still shifted out (SO, 0x0E).\n"); 96127f654740f2a26ad62a5c155af9199af9e69b889claireho } else if(shift==-1) { 96227f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("OK: Shifted in (SI, 0x0F)\n"); 96327f654740f2a26ad62a5c155af9199af9e69b889claireho } 96427f654740f2a26ad62a5c155af9199af9e69b889claireho 96527f654740f2a26ad62a5c155af9199af9e69b889claireho if(inLen != 12) { 96627f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("Expected 12 bytes, read %d\n", inLen); 96727f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 96827f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("OK: read %d bytes\n", inLen); 96927f654740f2a26ad62a5c155af9199af9e69b889claireho } 97027f654740f2a26ad62a5c155af9199af9e69b889claireho 97127f654740f2a26ad62a5c155af9199af9e69b889claireho 97227f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 97327f654740f2a26ad62a5c155af9199af9e69b889claireho} 97427f654740f2a26ad62a5c155af9199af9e69b889claireho 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFilePrintCompatibility(void) { 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile = u_fopen(STANDARD_TEST_FILE, "wb", "en_US_POSIX", NULL); 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FILE *myCFile; 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t num; 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cVal; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar emptyStr[] = {0}; 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char readBuf[512] = ""; 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char testBuf[512] = ""; 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file.\n"); 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(u_fgetlocale(myFile), "en_US_POSIX") != 0) { 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got %s instead of en_US_POSIX for locale\n", u_fgetlocale(myFile)); 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Compare against C API compatibility */ 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (num = -STANDARD_TEST_NUM_RANGE; num < STANDARD_TEST_NUM_RANGE; num++) { 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%x ", num); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%X ", num); 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%o ", num); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%d ", num); 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%i ", num); 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%f ", (double)num); 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* u_fprintf(myFile, "%e ", (double)num); 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%E ", (double)num);*/ 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%g ", (double)num); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%G", (double)num); 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fputs(emptyStr, myFile); 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf_u(myFile, NEW_LINE); 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (num = 0; num < 0x80; num++) { 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%c", num); 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myCFile = fopen(STANDARD_TEST_FILE, "rb"); 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myCFile == NULL) { 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't read test file."); 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (num = -STANDARD_TEST_NUM_RANGE; num < STANDARD_TEST_NUM_RANGE; num++) { 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%x", (int)num); 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%x Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%X", (int)num); 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%X Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%o", (int)num); 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%o Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* fprintf is not compatible on all platforms e.g. the iSeries */ 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%d", (int)num); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%d Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%i", (int)num); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%i Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%f", (double)num); 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%f Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* fscanf(myCFile, "%s", readBuf); 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%e", (double)num); 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%e Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%E", (double)num); 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%E Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }*/ 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%g", (double)num); 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%g Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%s", readBuf); 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(testBuf, "%G", (double)num); 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(readBuf, testBuf) != 0) { 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%G Got: \"%s\", Expected: \"%s\"\n", readBuf, testBuf); 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Properly eat the newlines */ 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (num = 0; num < (int32_t)strlen(C_NEW_LINE); num++) { 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%c", &cVal); 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cVal != C_NEW_LINE[num]) { 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("OS newline error\n"); 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (num = 0; num < (int32_t)strlen(C_NEW_LINE); num++) { 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%c", &cVal); 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cVal != C_NEW_LINE[num]) { 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ustdio newline error\n"); 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (num = 0; num < 0x80; num++) { 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cVal = -1; 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fscanf(myCFile, "%c", &cVal); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (num != cVal) { 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%c Got: 0x%x, Expected: 0x%x\n", cVal, num); 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fclose(myCFile); 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TestFPrintFormat(uFormat, uValue, cFormat, cValue) \ 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL);\ 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) {\ 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file for %s.\n", uFormat);\ 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return;\ 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }\ 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Reinitialize the buffer to verify null termination works. */\ 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(uBuffer, 0x2a, sizeof(uBuffer)/sizeof(*uBuffer));\ 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer, '*', sizeof(buffer)/sizeof(*buffer));\ 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru \ 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uNumPrinted = u_fprintf(myFile, uFormat, uValue);\ 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile);\ 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL);\ 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgets(uBuffer, sizeof(uBuffer)/sizeof(*uBuffer), myFile);\ 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile);\ 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(compBuffer, uBuffer, sizeof(uBuffer)/sizeof(*uBuffer));\ 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cNumPrinted = sprintf(buffer, cFormat, cValue);\ 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(buffer, compBuffer) != 0) {\ 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%" uFormat " Got: \"%s\", Expected: \"%s\"\n", compBuffer, buffer);\ 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }\ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cNumPrinted != uNumPrinted) {\ 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%" uFormat " number printed Got: %d, Expected: %d\n", uNumPrinted, cNumPrinted);\ 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }\ 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[uNumPrinted+1] != '*') {\ 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%" uFormat " too much stored\n");\ 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }\ 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFprintfFormat(void) { 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar abcUChars[] = {0x61,0x62,0x63,0}; 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char abcChars[] = "abc"; 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uBuffer[256]; 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char compBuffer[256]; 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t uNumPrinted; 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t cNumPrinted; 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile; 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8S", abcUChars, "%8s", abcChars); 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8S", abcUChars, "%-8s", abcChars); 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.2S", abcUChars, "%.2s", abcChars); /* strlen is 3 */ 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8s", abcChars, "%8s", abcChars); 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8s", abcChars, "%-8s", abcChars); 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.2s", abcChars, "%.2s", abcChars); /* strlen is 3 */ 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8c", (char)'e', "%8c", (char)'e'); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8c", (char)'e', "%-8c", (char)'e'); 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8C", (UChar)0x65, "%8c", (char)'e'); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8C", (UChar)0x65, "%-8c", (char)'e'); 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%f", 1.23456789, "%f", 1.23456789); 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%f", 12345.6789, "%f", 12345.6789); 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%f", 123456.789, "%f", 123456.789); 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%f", 1234567.89, "%f", 1234567.89); 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%10f", 1.23456789, "%10f", 1.23456789); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-10f", 1.23456789, "%-10f", 1.23456789); 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%10f", 123.456789, "%10f", 123.456789); 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%10.4f", 123.456789, "%10.4f", 123.456789); 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-10f", 123.456789, "%-10f", 123.456789); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* TestFPrintFormat("%g", 12345.6789, "%g", 12345.6789); 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%g", 123456.789, "%g", 123456.789); 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%g", 1234567.89, "%g", 1234567.89); 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%G", 123456.789, "%G", 123456.789); 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%G", 1234567.89, "%G", 1234567.89);*/ 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%10g", 1.23456789, "%10g", 1.23456789); 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%10.4g", 1.23456789, "%10.4g", 1.23456789); 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-10g", 1.23456789, "%-10g", 1.23456789); 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%10g", 123.456789, "%10g", 123.456789); 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-10g", 123.456789, "%-10g", 123.456789); 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8x", 123456, "%8x", 123456); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8x", 123456, "%-8x", 123456); 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%08x", 123456, "%08x", 123456); 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8X", 123456, "%8X", 123456); 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8X", 123456, "%-8X", 123456); 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%08X", 123456, "%08X", 123456); 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%#x", 123456, "%#x", 123456); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%#x", -123456, "%#x", -123456); 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8o", 123456, "%8o", 123456); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8o", 123456, "%-8o", 123456); 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%08o", 123456, "%08o", 123456); 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%#o", 123, "%#o", 123); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%#o", -123, "%#o", -123); 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8u", 123456, "%8u", 123456); 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8u", 123456, "%-8u", 123456); 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%08u", 123456, "%08u", 123456); 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8u", -123456, "%8u", -123456); 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8u", -123456, "%-8u", -123456); 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.5u", 123456, "%.5u", 123456); 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.6u", 123456, "%.6u", 123456); 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.7u", 123456, "%.7u", 123456); 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8d", 123456, "%8d", 123456); 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8d", 123456, "%-8d", 123456); 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%08d", 123456, "%08d", 123456); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("% d", 123456, "% d", 123456); 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("% d", -123456, "% d", -123456); 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%8i", 123456, "%8i", 123456); 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-8i", 123456, "%-8i", 123456); 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%08i", 123456, "%08i", 123456); 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Get really crazy with the formatting.\n"); 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-#12x", 123, "%-#12x", 123); 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-#12x", -123, "%-#12x", -123); 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%#12x", 123, "%#12x", 123); 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%#12x", -123, "%#12x", -123); 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-+12d", 123, "%-+12d", 123); 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-+12d", -123, "%-+12d", -123); 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%- 12d", 123, "%- 12d", 123); 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%- 12d", -123, "%- 12d", -123); 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%+12d", 123, "%+12d", 123); 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%+12d", -123, "%+12d", -123); 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("% 12d", 123, "% 12d", 123); 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("% 12d", -123, "% 12d", -123); 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%12d", 123, "%12d", 123); 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%12d", -123, "%12d", -123); 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.12d", 123, "%.12d", 123); 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.12d", -123, "%.12d", -123); 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-+12.1f", 1.234, "%-+12.1f", 1.234); 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%-+12.1f", -1.234, "%-+12.1f", -1.234); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%- 12.10f", 1.234, "%- 12.10f", 1.234); 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%- 12.1f", -1.234, "%- 12.1f", -1.234); 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%+12.1f", 1.234, "%+12.1f", 1.234); 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%+12.1f", -1.234, "%+12.1f", -1.234); 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("% 12.1f", 1.234, "% 12.1f", 1.234); 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("% 12.1f", -1.234, "% 12.1f", -1.234); 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%12.1f", 1.234, "%12.1f", 1.234); 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%12.1f", -1.234, "%12.1f", -1.234); 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.2f", 1.234, "%.2f", 1.234); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%.2f", -1.234, "%.2f", -1.234); 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%3f", 1.234, "%3f", 1.234); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFPrintFormat("%3f", -1.234, "%3f", -1.234); 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Reinitialize the buffer to verify null termination works. */ 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(uBuffer, 0x2a, sizeof(uBuffer)/sizeof(*uBuffer)); 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer, '*', sizeof(buffer)/sizeof(*buffer)); 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uNumPrinted = u_fprintf(myFile, "%d % d %d", -1234, 1234, 1234); 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL); 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgets(uBuffer, sizeof(uBuffer)/sizeof(*uBuffer), myFile); 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(compBuffer, uBuffer, sizeof(uBuffer)/sizeof(*uBuffer)); 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cNumPrinted = sprintf(buffer, "%d % d %d", -1234, 1234, 1234); 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(buffer, compBuffer) != 0) { 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%d %% d %%d Got: \"%s\", Expected: \"%s\"\n", compBuffer, buffer); 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cNumPrinted != uNumPrinted) { 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%d %% d %%d number printed Got: %d, Expected: %d\n", uNumPrinted, cNumPrinted); 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (buffer[uNumPrinted+1] != '*') { 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%%d %% d %%d too much stored\n"); 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#undef TestFPrintFormat 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFScanSetFormat(const char *format, const UChar *uValue, const char *cValue, UBool expectedToPass) { 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile; 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uBuffer[256]; 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char buffer[256]; 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char compBuffer[256]; 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t uNumScanned; 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t cNumScanned; 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, NULL); 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file for %s.\n", format); 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Reinitialize the buffer to verify null termination works. */ 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(uBuffer, 0x2a, sizeof(uBuffer)/sizeof(*uBuffer)); 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uBuffer[sizeof(uBuffer)/sizeof(*uBuffer)-1] = 0; 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(buffer, '*', sizeof(buffer)/sizeof(*buffer)); 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru buffer[sizeof(buffer)/sizeof(*buffer)-1] = 0; 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%S", uValue); 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL); 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uNumScanned = u_fscanf(myFile, format, uBuffer); 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (expectedToPass) { 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(compBuffer, uBuffer, sizeof(uBuffer)/sizeof(*uBuffer)); 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cNumScanned = sscanf(cValue, format, buffer); 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strncmp(buffer, compBuffer, sizeof(buffer)/sizeof(*buffer)) != 0) { 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%s Got: \"%s\", Expected: \"%s\"\n", format, compBuffer, buffer); 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (cNumScanned != uNumScanned) { 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%s number printed Got: %d, Expected: %d\n", format, uNumScanned, cNumScanned); 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uNumScanned > 0 && uBuffer[u_strlen(uBuffer)+1] != 0x2a) { 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%s too much stored\n", format); 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uNumScanned != 0 || uBuffer[0] != 0x2a || uBuffer[1] != 0x2a) { 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%s too much stored on a failure\n", format); 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFScanset(void) { 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar abcUChars[] = {0x61,0x62,0x63,0x63,0x64,0x65,0x66,0x67,0}; 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char abcChars[] = "abccdefg"; 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[bc]S", abcUChars, abcChars, TRUE); 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[cb]S", abcUChars, abcChars, TRUE); 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[ab]S", abcUChars, abcChars, TRUE); 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[ba]S", abcUChars, abcChars, TRUE); 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[ab]", abcUChars, abcChars, TRUE); 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[ba]", abcUChars, abcChars, TRUE); 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[abcdefgh]", abcUChars, abcChars, TRUE); 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[;hgfedcba]", abcUChars, abcChars, TRUE); 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[^a]", abcUChars, abcChars, TRUE); 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[^e]", abcUChars, abcChars, TRUE); 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[^ed]", abcUChars, abcChars, TRUE); 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[^dc]", abcUChars, abcChars, TRUE); 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[^e] ", abcUChars, abcChars, TRUE); 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%1[ab] ", abcUChars, abcChars, TRUE); 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%2[^f]", abcUChars, abcChars, TRUE); 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[qrst]", abcUChars, abcChars, TRUE); 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Extra long string for testing */ 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat(" %[qrst]", 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru abcUChars, abcChars, TRUE); 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[a-]", abcUChars, abcChars, TRUE); 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Bad format */ 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[f-a]", abcUChars, abcChars, FALSE); 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[c-a]", abcUChars, abcChars, FALSE); 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestFScanSetFormat("%[a", abcUChars, abcChars, FALSE); 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* The following is not deterministic on Windows */ 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* TestFScanSetFormat("%[a-", abcUChars, abcChars);*/ 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* TODO: Need to specify precision with a "*" */ 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBadFScanfFormat(const char *format, const UChar *uValue, const char *cValue) { 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile; 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uBuffer[256]; 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t uNumScanned; 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, NULL); 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (myFile == NULL) { 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Can't write test file for %s.\n", format); 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Reinitialize the buffer to verify null termination works. */ 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(uBuffer, 0x2a, sizeof(uBuffer)/sizeof(*uBuffer)); 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uBuffer[sizeof(uBuffer)/sizeof(*uBuffer)-1] = 0; 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf(myFile, "%S", uValue); 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL); 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uNumScanned = u_fscanf(myFile, format, uBuffer); 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (uNumScanned != 0 || uBuffer[0] != 0x2a || uBuffer[1] != 0x2a) { 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("%s too much stored on a failure\n", format); 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestBadScanfFormat(void) { 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar abcUChars[] = {0x61,0x62,0x63,0x63,0x64,0x65,0x66,0x67,0}; 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char abcChars[] = "abccdefg"; 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestBadFScanfFormat("%[] ", abcUChars, abcChars); 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void Test_u_vfprintf(const char *expectedResult, const char *format, ...) { 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uBuffer[256]; 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar uBuffer2[256]; 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_list ap; 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count; 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile; 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", "UTF-8"); 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!myFile) { 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Test file can't be opened\n"); 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, format); 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = u_vfprintf(myFile, format, ap); 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", "UTF-8"); 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!myFile) { 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Test file can't be opened\n"); 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgets(uBuffer, sizeof(uBuffer)/sizeof(*uBuffer), myFile); 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(uBuffer2, expectedResult); 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(uBuffer, uBuffer2) != 0) { 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got two different results for \"%s\" expected \"%s\"\n", format, expectedResult); 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", "en_US_POSIX", NULL); 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!myFile) { 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Test file can't be opened\n"); 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(uBuffer, format); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_start(ap, format); 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = u_vfprintf_u(myFile, uBuffer, ap); 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru va_end(ap); 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", "en_US_POSIX", NULL); 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!myFile) { 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Test file can't be opened\n"); 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fgets(uBuffer, sizeof(uBuffer)/sizeof(*uBuffer), myFile); 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(uBuffer2, expectedResult); 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(uBuffer, uBuffer2) != 0) { 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got two different results for \"%s\" expected \"%s\"\n", format, expectedResult); 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestVargs(void) { 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Test_u_vfprintf("8 9 a B 8.9", "%d %u %x %X %.1f", 8, 9, 10, 11, 8.9); 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestUnicodeFormat(void) 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Make sure that invariant conversion doesn't happen on the _u formats. */ 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar myUString[256]; 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UFILE *myFile; 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar TEST_STR[] = { 0x03BC, 0x0025, 0x0024, 0}; 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar PERCENT_S[] = { 0x03BC, 0x0025, 0x0053, 0}; 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_memset(myUString, 0x2a, sizeof(myUString)/sizeof(*myUString)); 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, "UTF-8"); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!myFile) { 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Test file can't be opened\n"); 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fprintf_u(myFile, PERCENT_S, TEST_STR); 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, "UTF-8"); 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!myFile) { 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Test file can't be opened\n"); 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fscanf_u(myFile, PERCENT_S, myUString); 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_fclose(myFile); 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(TEST_STR, myUString) != 0) { 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("u_fscanf_u doesn't work.\n"); 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestFileWriteRetval(const char * a_pszEncoding) { 1502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar * buffer; 1503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UFILE * myFile; 1504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t count; 1505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t expected = 10000; /* test with large data to test internal buffer looping */ 1506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar testChar = 0xBEEF; 1507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!*a_pszEncoding || 0 == strcmp(a_pszEncoding, "ASCII")) { 150950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho testChar = 0x65; /* 'A' - otherwise read test will fail */ 1510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru buffer = (UChar*) malloc(expected * sizeof(UChar)); 1513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!buffer) { 1514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Out of memory\n"); 1515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 1516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* write */ 1519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, a_pszEncoding); 1520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!myFile) { 1521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru free(buffer); 1522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Test file can't be opened for write\n"); 1523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 1524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_memset(buffer, testChar, expected); 1526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru count = u_file_write(buffer, expected, myFile); 1527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_fclose(myFile); 1528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (count != expected) { 1529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru free(buffer); 1530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("u_file_write returned incorrect number of characters written\n"); 1531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 1532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru free(buffer); 1535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru buffer = NULL; 1536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* read */ 1538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, a_pszEncoding); 1539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!myFile) { 1540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Test file can't be opened for read\n"); 1541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 1542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (count = 0; count < expected; ++count) { 154450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UChar gotChar = u_fgetc(myFile); 154550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(gotChar != testChar) { 154650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("u_fgetc returned unexpected character U+%04X expected U+%04X\n", gotChar, testChar); 1547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_fclose(myFile); 1548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 1549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (u_fgetc(myFile) != U_EOF) { 1552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("u_fgetc did not return expected EOF\n"); 1553b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_fclose(myFile); 1554b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 1555b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1556b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_fclose(myFile); 1557b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1558b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1559b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestFileWriteRetvalUTF16(void) { 1560b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TestFileWriteRetval("UTF-16"); 1561b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1562b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1563b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestFileWriteRetvalUTF8(void) { 1564b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TestFileWriteRetval("UTF-8"); 1565b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1566b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1567b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestFileWriteRetvalASCII(void) { 1568b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TestFileWriteRetval("ASCII"); 1569b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1570b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestFileWriteRetvalNONE(void) { 1572b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TestFileWriteRetval(""); 1573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC void 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruaddFileTest(TestNode** root) { 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFile, "file/TestFile"); 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &StdinBuffering, "file/StdinBuffering"); 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestfgetsBuffers, "file/TestfgetsBuffers"); 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFileReadBuffering, "file/TestFileReadBuffering"); 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestfgetsLineCount, "file/TestfgetsLineCount"); 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestfgetsNewLineHandling, "file/TestfgetsNewLineHandling"); 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestfgetsNewLineCount, "file/TestfgetsNewLineCount"); 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFgetsLineBuffering, "file/TestFgetsLineBuffering"); 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCodepage, "file/TestCodepage"); 158827f654740f2a26ad62a5c155af9199af9e69b889claireho addTest(root, &TestCodepageFlush, "file/TestCodepageFlush"); 1589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestFileWriteRetvalUTF16, "file/TestFileWriteRetvalUTF16"); 1590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestFileWriteRetvalUTF8, "file/TestFileWriteRetvalUTF8"); 1591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestFileWriteRetvalASCII, "file/TestFileWriteRetvalASCII"); 1592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestFileWriteRetvalNONE, "file/TestFileWriteRetvalNONE"); 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCodepageAndLocale, "file/TestCodepageAndLocale"); 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFprintfFormat, "file/TestFprintfFormat"); 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFScanset, "file/TestFScanset"); 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFilePrintCompatibility, "file/TestFilePrintCompatibility"); 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestBadScanfFormat, "file/TestBadScanfFormat"); 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestVargs, "file/TestVargs"); 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestUnicodeFormat, "file/TestUnicodeFormat"); 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1603