+static void TestFileWriteRetval(const char * a_pszEncoding) {
+ UChar * buffer;
+ UFILE * myFile;
+ int32_t count;
+ int32_t expected = 10000; /* test with large data to test internal buffer looping */
+ UChar testChar = 0xBEEF;
+
+ if (!*a_pszEncoding || 0 == strcmp(a_pszEncoding, "ASCII")) {
+ testChar = 0x65; /* 'A' - otherwise read test will fail */
+ }
+
+ buffer = (UChar*) malloc(expected * sizeof(UChar));
+ if (!buffer) {
+ log_err("Out of memory\n");
+ return;
+ }
+
+ /* write */
+ myFile = u_fopen(STANDARD_TEST_FILE, "w", NULL, a_pszEncoding);
+ if (!myFile) {
+ free(buffer);
+ log_err("Test file can't be opened for write\n");
+ return;
+ }
+ u_memset(buffer, testChar, expected);
+ count = u_file_write(buffer, expected, myFile);
+ u_fclose(myFile);
+ if (count != expected) {
+ free(buffer);
+ log_err("u_file_write returned incorrect number of characters written\n");
+ return;
+ }
+
+ free(buffer);
+ buffer = NULL;
+
+ /* read */
+ myFile = u_fopen(STANDARD_TEST_FILE, "r", NULL, a_pszEncoding);
+ if (!myFile) {
+ log_err("Test file can't be opened for read\n");
+ return;
+ }
+ for (count = 0; count < expected; ++count) {
+ UChar gotChar = u_fgetc(myFile);
+ if(gotChar != testChar) {
+ log_err("u_fgetc returned unexpected character U+%04X expected U+%04X\n", gotChar, testChar);
+ u_fclose(myFile);
+ return;
+ }
+ }
+ if (u_fgetc(myFile) != U_EOF) {
+ log_err("u_fgetc did not return expected EOF\n");
+ u_fclose(myFile);
+ return;
+ }
+ u_fclose(myFile);
+}
+
+static void TestFileWriteRetvalUTF16(void) {
+ TestFileWriteRetval("UTF-16");
+}
+
+static void TestFileWriteRetvalUTF8(void) {
+ TestFileWriteRetval("UTF-8");
+}
+
+static void TestFileWriteRetvalASCII(void) {
+ TestFileWriteRetval("ASCII");
+}
+
+static void TestFileWriteRetvalNONE(void) {
+ TestFileWriteRetval("");
+}