License: LGPL Nice people pointed out errors in the unit tests in dlls/kernel/tests/file.c I fixed them and verified it all on Windows 95 by crosscompiling with mingw-gcc. To ease crosscompiling I created a small h-file "unittest.h" that does magic to make the "ok()" macro work when run in a standalone EXE. Attached is the cvs diff for file.c and dlls/kernel/tests/unittest.h
#ifndef _UNITTEST_H #define _UNITTEST_H #ifdef REAL_EXE #include <windows.h> #include <stdio.h> static line_passed = 0; static tests_passed = 0; #define ok(val, msg) {if (!(val)) {printf ("%s %s:%d\n", msg, __FILE__, __LINE__); ExitProcess(1);} else {if (line_passed < __LINE__){ printf("test %d OK (%s:%d)\n", tests_passed, __FILE__, __LINE__); line_passed = __LINE__; tests_passed++; }}} #define todo_wine #define START_TEST main #else #include "winbase.h" #include "winerror.h" #include "wine/test.h" #endif /* REAL_EXE */ #endif /* _UNITTEST_H */
? profile.c ? realfile.c ? unittest.diff ? unittest.h Index: directory.c =================================================================== RCS file: /home/wine/wine/dlls/kernel/tests/directory.c,v retrieving revision 1.2 diff -u -r1.2 directory.c --- directory.c 1 Apr 2002 21:00:26 -0000 1.2 +++ directory.c 21 May 2002 21:57:02 -0000 @@ -126,3 +126,4 @@ test_GetSystemDirectoryA(); test_GetSystemDirectoryW(); } + Index: file.c =================================================================== RCS file: /home/wine/wine/dlls/kernel/tests/file.c,v retrieving revision 1.4 diff -u -r1.4 file.c --- file.c 10 May 2002 01:10:04 -0000 1.4 +++ file.c 21 May 2002 21:57:02 -0000 @@ -1,8 +1,10 @@ -/* +/* -*- wine-c -*- + * * Unit tests for file functions in Wine * * Copyright (c) 2002 Jakob Eriksson * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -19,11 +21,23 @@ * */ -#include "winbase.h" -#include "winerror.h" -#include "wine/test.h" + +/* + * Compile tests for Windows with: + * + * i586-mingw32msvc-gcc -DREAL_EXE -o file.exe file.c + * + * + * I'm planning on a unit test EXE builder with a twist. Stand by. + * Help very much appreciated! + * /jakob@vmlinux.org + * + */ + +#include "unittest.h" + #include <stdlib.h> #include <time.h> @@ -209,8 +223,14 @@ ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should be able to find file" ); - ok( DeleteFileA( filename ) != 0, "DeleteFileA complains." ); - + todo_wine + { + ok( 0 == DeleteFileA( filename ), "shouldn't be able to delete a readonly file" ); + + ok( SetFileAttributesA(filename, FILE_ATTRIBUTE_NORMAL ) != 0, "couldn't change attributes on file" ); + + ok( DeleteFileA( filename ) != 0, "now it should be possible to delete the file!" ); + } filehandle = _lcreat( filename, 2 ); ok( HFILE_ERROR != filehandle, "couldn't create file. Wrong permissions on directory?" ); @@ -223,30 +243,25 @@ ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains." ); - todo_wine - { - ok( INVALID_HANDLE_VALUE == FindFirstFileA( filename, &search_results ), "should NOT be able to find file" ); - } + ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should be able to find file" ); ok( DeleteFileA( filename ) != 0, "DeleteFileA complains." ); - filehandle = _lcreat( filename, 4 ); + filehandle = _lcreat( filename, 4 ); /* SYSTEM file */ + ok( HFILE_ERROR != filehandle, "couldn't create file. Wrong permissions on directory?" ); ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains." ); - ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains." ); + ok( 0 == _llseek( filehandle, 0, FILE_BEGIN ), "_llseek complains" ); ok( _hread( filehandle, buffer, strlen( sillytext ) ) == strlen( sillytext ), "erratic _hread return value." ); - ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains." ); + ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains" ); - todo_wine - { - ok( INVALID_HANDLE_VALUE == FindFirstFileA( filename, &search_results ), "should NOT be able to find file" ); - } + ok( INVALID_HANDLE_VALUE != FindFirstFileA( filename, &search_results ), "should still be able to find file"); - ok( DeleteFileA( filename ) != 0, "DeleteFileA complains." ); + ok( DeleteFileA( filename ) != 0, "DeleteFileA complains" ); } @@ -287,7 +302,7 @@ HFILE filehandle; UINT bytes_read; char buffer[10000]; - + filehandle = _lcreat( filename, 0 ); ok( HFILE_ERROR != filehandle, "couldn't create file. Wrong permissions on directory?" ); ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains." ); @@ -430,6 +445,7 @@ ok( HFILE_ERROR != _lclose( filehandle ), "_lclose complains." ); ok( DeleteFileA( filename ) != 0, "DeleteFile complains." ); + /* TODO - add tests for the SHARE modes - use two processes to pull this one off */ }