2 * Unit test suite for file functions
4 * Copyright 2002 Bill Currie
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "wine/test.h"
32 static void test_fdopen( void )
34 static char buffer
[] = {0,1,2,3,4,5,6,7,8,9};
38 fd
= open ("fdopen.tst", O_WRONLY
| O_CREAT
| O_BINARY
, _S_IREAD
|_S_IWRITE
);
39 write (fd
, buffer
, sizeof (buffer
));
42 fd
= open ("fdopen.tst", O_RDONLY
| O_BINARY
);
43 lseek (fd
, 5, SEEK_SET
);
44 file
= fdopen (fd
, "rb");
45 ok (fread (buffer
, 1, sizeof (buffer
), file
) == 5, "read wrong byte count");
46 ok (memcmp (buffer
, buffer
+ 5, 5) == 0, "read wrong bytes");
48 unlink ("fdopen.tst");
51 static WCHAR
* AtoW( char* p
)
54 DWORD len
= MultiByteToWideChar( CP_ACP
, 0, p
, -1, NULL
, 0 );
55 buffer
= malloc( len
* sizeof(WCHAR
) );
56 MultiByteToWideChar( CP_ACP
, 0, p
, -1, buffer
, len
);
60 static void test_fgetwc( void )
66 const char mytext
[]= "This is test_fgetwc\n";
68 WCHAR
*mytextW
= NULL
, *aptr
, *wptr
;
69 BOOL diff_found
= FALSE
;
72 tempf
=_tempnam(".","wne");
73 tempfh
= fopen(tempf
,"wt"); /* open in TEXT mode */
76 tempfh
= fopen(tempf
,"rt");
77 fgetws(wtextW
,LLEN
,tempfh
);
78 mytextW
= AtoW ((char*)mytext
);
82 for (i
=0; i
<strlen(mytext
); i
++, aptr
++, wptr
++)
84 diff_found
|= (*aptr
!= *wptr
);
86 ok(!(diff_found
), "fgetwc difference found in TEXT mode");
87 if(mytextW
) free (mytextW
);
92 static void test_file_put_get( void )
96 const char mytext
[]= "This is a test_file_put_get\n";
97 const char dostext
[]= "This is a test_file_put_get\r\n";
100 WCHAR
*mytextW
= NULL
, *aptr
, *wptr
;
101 BOOL diff_found
= FALSE
;
104 tempf
=_tempnam(".","wne");
105 tempfh
= fopen(tempf
,"wt"); /* open in TEXT mode */
106 fputs(mytext
,tempfh
);
108 tempfh
= fopen(tempf
,"rb"); /* open in TEXT mode */
109 fgets(btext
,LLEN
,tempfh
);
110 ok( strlen(mytext
) + 1 == strlen(btext
),"TEXT/BINARY mode not handled for write");
111 ok( btext
[strlen(mytext
)-1] == '\r', "CR not written");
113 tempfh
= fopen(tempf
,"wb"); /* open in BINARY mode */
114 fputs(dostext
,tempfh
);
116 tempfh
= fopen(tempf
,"rt"); /* open in TEXT mode */
117 fgets(btext
,LLEN
,tempfh
);
118 ok(strcmp(btext
, mytext
) == 0,"_O_TEXT read doesn't strip CR");
120 tempfh
= fopen(tempf
,"rb"); /* open in TEXT mode */
121 fgets(btext
,LLEN
,tempfh
);
122 ok(strcmp(btext
, dostext
) == 0,"_O_BINARY read doesn't preserve CR");
125 tempfh
= fopen(tempf
,"rt"); /* open in TEXT mode */
126 fgetws(wtextW
,LLEN
,tempfh
);
127 mytextW
= AtoW ((char*)mytext
);
131 for (i
=0; i
<strlen(mytext
); i
++, aptr
++, wptr
++)
133 diff_found
|= (*aptr
!= *wptr
);
135 ok(!(diff_found
), "fgetwc doesn't strip CR in TEXT mode");
136 if(mytextW
) free (mytextW
);
140 static void test_file_write_read( void )
144 const char mytext
[]= "This is test_file_write_read\nsecond line\n";
145 const char dostext
[]= "This is test_file_write_read\r\nsecond line\r\n";
148 tempf
=_tempnam(".","wne");
149 ok((tempfd
= _open(tempf
,_O_CREAT
|_O_TRUNC
|_O_TEXT
|_O_RDWR
,_S_IREAD
| _S_IWRITE
)) != -1,"Can't open"); /* open in TEXT mode */
150 ok(_write(tempfd
,mytext
,strlen(mytext
)) == lstrlenA(mytext
), "_write _O_TEXT bad return value");
152 tempfd
= _open(tempf
,_O_RDONLY
|_O_BINARY
,0); /* open in BINARY mode */
153 ok(_read(tempfd
,btext
,LLEN
) == lstrlenA(dostext
), "_read _O_BINARY got bad length");
154 ok( memcmp(dostext
,btext
,strlen(dostext
)) == 0,"problems with _O_TEXT _write and _O_BINARY _write");
155 ok( btext
[strlen(dostext
)-2] == '\r', "CR not written");
157 tempfd
= _open(tempf
,_O_RDONLY
|_O_TEXT
); /* open in TEXT mode */
158 ok(_read(tempfd
,btext
,LLEN
) == lstrlenA(mytext
), "_read _O_TEXT got bad length");
159 ok( memcmp(mytext
,btext
,strlen(mytext
)) == 0,"problems with _O_TEXT _write / _write");
161 ok(unlink(tempf
) !=-1 ,"Can't unlink");
163 tempf
=_tempnam(".","wne");
164 ok((tempfd
= _open(tempf
,_O_CREAT
|_O_TRUNC
|_O_BINARY
|_O_RDWR
,0)) != -1,"Can't open %s",tempf
); /* open in BINARY mode */
165 ok(_write(tempfd
,dostext
,strlen(dostext
)) == lstrlenA(dostext
), "_write _O_TEXT bad return value");
167 tempfd
= _open(tempf
,_O_RDONLY
|_O_BINARY
,0); /* open in BINARY mode */
168 ok(_read(tempfd
,btext
,LLEN
) == lstrlenA(dostext
), "_read _O_BINARY got bad length");
169 ok( memcmp(dostext
,btext
,strlen(dostext
)) == 0,"problems with _O_TEXT _write and _O_BINARY _write");
170 ok( btext
[strlen(dostext
)-2] == '\r', "CR not written");
172 tempfd
= _open(tempf
,_O_RDONLY
|_O_TEXT
); /* open in TEXT mode */
173 ok(_read(tempfd
,btext
,LLEN
) == lstrlenA(mytext
), "_read _O_TEXT got bad length");
174 ok( memcmp(mytext
,btext
,strlen(mytext
)) == 0,"problems with _O_TEXT _write / _write");
186 test_file_write_read();