Eric Pouech : msvcrt: Added tests in fileops with different buffer management modes.
Alexandre Julliard
julliard at winehq.org
Mon Apr 25 12:47:12 CDT 2011
Module: wine
Branch: master
Commit: dc9904a3385223ffaac09fb6aa09deeb62926e6f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=dc9904a3385223ffaac09fb6aa09deeb62926e6f
Author: Eric Pouech <eric.pouech at orange.fr>
Date: Sun Apr 24 11:01:48 2011 +0200
msvcrt: Added tests in fileops with different buffer management modes.
---
dlls/msvcrt/tests/file.c | 98 ++++++++++++++++++++++++++-------------------
1 files changed, 57 insertions(+), 41 deletions(-)
diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c
index f70285b..5aaaaf7 100644
--- a/dlls/msvcrt/tests/file.c
+++ b/dlls/msvcrt/tests/file.c
@@ -106,54 +106,70 @@ static void test_fileops( void )
int fd;
FILE *file;
fpos_t pos;
- int i, c;
+ int i, c, bufmode;
+ static const int bufmodes[] = {_IOFBF,_IONBF};
fd = open ("fdopen.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE);
write (fd, outbuffer, sizeof (outbuffer));
close (fd);
- fd = open ("fdopen.tst", O_RDONLY | O_BINARY);
- file = fdopen (fd, "rb");
- ok(strlen(outbuffer) == (sizeof(outbuffer)-1),"strlen/sizeof error\n");
- ok(fgets(buffer,sizeof(buffer),file) !=0,"fgets failed unexpected\n");
- ok(fgets(buffer,sizeof(buffer),file) ==0,"fgets didn't signal EOF\n");
- ok(feof(file) !=0,"feof doesn't signal EOF\n");
- rewind(file);
- ok(fgets(buffer,strlen(outbuffer),file) !=0,"fgets failed unexpected\n");
- ok(lstrlenA(buffer) == lstrlenA(outbuffer) -1,"fgets didn't read right size\n");
- ok(fgets(buffer,sizeof(outbuffer),file) !=0,"fgets failed unexpected\n");
- ok(strlen(buffer) == 1,"fgets dropped chars\n");
- ok(buffer[0] == outbuffer[strlen(outbuffer)-1],"fgets exchanged chars\n");
-
- rewind(file);
- for (i = 0, c = EOF; i < sizeof(outbuffer); i++)
+ for (bufmode=0; bufmode < sizeof(bufmodes)/sizeof(bufmodes[0]); bufmode++)
{
- ok((c = fgetc(file)) == outbuffer[i], "fgetc returned wrong data\n");
+ fd = open ("fdopen.tst", O_RDONLY | O_BINARY);
+ file = fdopen (fd, "rb");
+ setvbuf(file,NULL,bufmodes[bufmode],2048);
+ ok(strlen(outbuffer) == (sizeof(outbuffer)-1),"strlen/sizeof error for bufmode=%x\n", bufmodes[bufmode]);
+ ok(fgets(buffer,sizeof(buffer),file) !=0,"fgets failed unexpected for bufmode=%x\n", bufmodes[bufmode]);
+ ok(fgets(buffer,sizeof(buffer),file) ==0,"fgets didn't signal EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(feof(file) !=0,"feof doesn't signal EOF for bufmode=%x\n", bufmodes[bufmode]);
+ rewind(file);
+ ok(fgets(buffer,strlen(outbuffer),file) !=0,"fgets failed unexpected for bufmode=%x\n", bufmodes[bufmode]);
+ ok(lstrlenA(buffer) == lstrlenA(outbuffer) -1,"fgets didn't read right size for bufmode=%x\n", bufmodes[bufmode]);
+ ok(fgets(buffer,sizeof(outbuffer),file) !=0,"fgets failed unexpected for bufmode=%x\n", bufmodes[bufmode]);
+ ok(strlen(buffer) == 1,"fgets dropped chars for bufmode=%x\n", bufmodes[bufmode]);
+ ok(buffer[0] == outbuffer[strlen(outbuffer)-1],"fgets exchanged chars for bufmode=%x\n", bufmodes[bufmode]);
+
+ rewind(file);
+ for (i = 0, c = EOF; i < sizeof(outbuffer); i++)
+ {
+ ok((c = fgetc(file)) == outbuffer[i], "fgetc returned wrong data for bufmode=%x\n", bufmodes[bufmode]);
+ }
+ ok((c = fgetc(file)) == EOF, "getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(feof(file), "feof did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(ungetc(c, file) == EOF, "ungetc(EOF) did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(feof(file), "feof after ungetc(EOF) did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok((c = fgetc(file)) == EOF, "getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+ c = outbuffer[sizeof(outbuffer) - 1];
+ if (bufmodes[bufmode] == _IONBF) todo_wine {
+ ok(ungetc(c, file) == c, "ungetc did not return its input for bufmode=%x\n", bufmodes[bufmode]);
+ ok(!feof(file), "feof after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(c == outbuffer[sizeof(outbuffer) - 1],
+ "getc did not return ungetc'd data for bufmode=%x\n", bufmodes[bufmode]);
+ ok(!feof(file), "feof after getc returned EOF prematurely for bufmode=%x\n", bufmodes[bufmode]);
+ }
+ else
+ {
+ ok(ungetc(c, file) == c, "ungetc did not return its input for bufmode=%x\n", bufmodes[bufmode]);
+ ok(!feof(file), "feof after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(c == outbuffer[sizeof(outbuffer) - 1],
+ "getc did not return ungetc'd data for bufmode=%x\n", bufmodes[bufmode]);
+ ok(!feof(file), "feof after getc returned EOF prematurely for bufmode=%x\n", bufmodes[bufmode]);
+ }
+ ok((c = fgetc(file)) == EOF, "getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+ ok(feof(file), "feof after getc did not return EOF for bufmode=%x\n", bufmodes[bufmode]);
+
+ rewind(file);
+ ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected for bufmode=%x\n", bufmodes[bufmode]);
+ ok(pos == 0, "Unexpected result of fgetpos %x%08x for bufmode=%x\n", (DWORD)(pos >> 32), (DWORD)pos, bufmodes[bufmode]);
+ pos = sizeof (outbuffer);
+ ok(fsetpos(file, &pos) == 0, "fsetpos failed unexpected for bufmode=%x\n", bufmodes[bufmode]);
+ ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected for bufmode=%x\n", bufmodes[bufmode]);
+ ok(pos == sizeof (outbuffer), "Unexpected result of fgetpos %x%08x for bufmode=%x\n", (DWORD)(pos >> 32), (DWORD)pos, bufmodes[bufmode]);
+
+ fclose (file);
}
- ok((c = fgetc(file)) == EOF, "getc did not return EOF\n");
- ok(feof(file), "feof did not return EOF\n");
- ok(ungetc(c, file) == EOF, "ungetc(EOF) did not return EOF\n");
- ok(feof(file), "feof after ungetc(EOF) did not return EOF\n");
- ok((c = fgetc(file)) == EOF, "getc did not return EOF\n");
- c = outbuffer[sizeof(outbuffer) - 1];
- ok(ungetc(c, file) == c, "ungetc did not return its input\n");
- ok(!feof(file), "feof after ungetc returned EOF\n");
- ok((c = fgetc(file)) != EOF, "getc after ungetc returned EOF\n");
- ok(c == outbuffer[sizeof(outbuffer) - 1],
- "getc did not return ungetc'd data\n");
- ok(!feof(file), "feof after getc returned EOF prematurely\n");
- ok((c = fgetc(file)) == EOF, "getc did not return EOF\n");
- ok(feof(file), "feof after getc did not return EOF\n");
-
- rewind(file);
- ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n");
- ok(pos == 0, "Unexpected result of fgetpos %x%08x\n", (DWORD)(pos >> 32), (DWORD)pos);
- pos = sizeof (outbuffer);
- ok(fsetpos(file, &pos) == 0, "fsetpos failed unexpected\n");
- ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n");
- ok(pos == sizeof (outbuffer), "Unexpected result of fgetpos %x%08x\n", (DWORD)(pos >> 32), (DWORD)pos);
-
- fclose (file);
fd = open ("fdopen.tst", O_RDONLY | O_TEXT);
file = fdopen (fd, "rt"); /* open in TEXT mode */
ok(fgetws(wbuffer,sizeof(wbuffer)/sizeof(wbuffer[0]),file) !=0,"fgetws failed unexpected\n");
More information about the wine-cvs
mailing list