Private Profile Regression Test
Joshua Thielen
thielen at netprince.net
Mon Jul 1 23:23:11 CDT 2002
Hello,
Here is my first stab at a profile regression test. Would anyone care to
try it out? 26 of 162 tests fail right now. I also have windows source
code and executable implementing the same tests if anyone is interested.
I believe one test (GetPrivateProfileStruct) fails because of structure
packing differences between gcc and msvc since the test passes with the
windows executable and fails with the winelib executable. I don't know
for sure, though, and I definitely don't know how to fix it.
Anyhoo, please let me know what you think - are the tests sufficient,
too much, not written properly? etc.
Thanks,
Josh Thielen
Changelog:
added profile regression tests for Get/WritePrivateProfilexxx functions
Added files:
wine/dlls/kernel/tests/profile.c
wine/dlls/kernel/tests/test.ini
wine/dlls/kernel/tests/compare1.ini
wine/dlls/kernel/tests/compare2.ini
Modified files:
wine/dlls/kernel/Makefile.in
License:
LGPL
-------------- next part --------------
/*
* Unit tests for profile functions in Wine
*
* Copyright (c) 2002 Joshua Thielen
*
* 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
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
*
*
* TODO: INI file mappings in NT registry.
* public profile functions
* more extensive testing of Get/WritePrivateProfileStructA
* separate testing of 16-bit and unicode functions
*
* Test Files:
* test.ini is used to test the GetPrivateProfileX functions and is
* also used as the base INI file for comparing against compare2.ini.
*
* test.ini is copied to c:\
* test.ini is copied to the windows directory as winetest.ini
*
* compare1.ini and compare2.ini are compared against the output file,
* result.ini, of the WritePrivateProfileX test functions.
*
* The win.ini file is copied to the working directory and restored
* at the end of the test.
*
*/
#include <stdio.h>
#include "wine/test.h"
#include "winbase.h"
#include "winerror.h"
char winpath[1024];
/*
* Helper function to compare two files.
*
* Returns TRUE if files match.
*/
BOOL compare(char *file1, char *file2)
{
HANDLE handle1, handle2;
DWORD bytes_read1, bytes_read2;
char buf1[1024], buf2[1024];
BOOL ret = TRUE;
handle1 = handle2 = INVALID_HANDLE_VALUE;
handle1 = CreateFileA( file1, GENERIC_READ, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
handle2 = CreateFileA( file2, GENERIC_READ, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if(handle1 == INVALID_HANDLE_VALUE) {
trace("Could not open compare file 1\n");
ret = FALSE;
} else if(handle2 == INVALID_HANDLE_VALUE) {
trace("Could not open compare file 2\n");
ret = FALSE;
} else if(!ReadFile(handle1, buf1, sizeof(buf1), &bytes_read1, NULL)) {
trace("Could not read compare file 1\n");
ret = FALSE;
} else if(!ReadFile(handle2, buf2, sizeof(buf2), &bytes_read2, NULL)) {
trace("Could not read compare file 2\n");
ret = FALSE;
} else if(bytes_read1 != bytes_read2) {
trace("Number of bytes read do not match\n");
ret = FALSE;
} else if(memcmp(buf1, buf2, bytes_read1)) {
trace("Bytes do not match\n");
ret = FALSE;
}
if(handle1 != INVALID_HANDLE_VALUE) CloseHandle(handle1);
if(handle2 != INVALID_HANDLE_VALUE) CloseHandle(handle2);
return ret;
}
static void test_GetPrivateProfileIntA( void )
{
int i;
UINT ret;
struct param {
char *lpAppName;
char *lpKeyName;
INT nDefault;
char *lpFileName;
UINT ret;
};
struct param params[] = {
/* lpAppName lpKeyName nDefault lpFileName Ret */
{NULL, NULL, 1, NULL, 0},
{NULL, NULL, 1, "C:\\test.ini", 0},
{NULL, "Value", 1, "C:\\test.ini", 0},
{"No Keys", NULL, 1, "C:\\test.ini", 1},
{"No Keys", "Value", 1, "C:\\test.ini", 1},
{"Values 1", "NoValue", 1, "C:\\test.ini", 1},
{"VaLuEs 1", "Value", 1, "C:\\test.ini", 32767},
{"VaLuEs 1", "Value", 1, "test.ini", 1},
{"VaLuEs 1", "Value", 1, "winetest.ini", 32767},
{"Values 1", "Comment", 1, "C:\\test.ini", 1},
{"Values 2", "NoValue", 1, "C:\\test.ini", 1},
{"VALUES 2", "Value", 1, "C:\\test.ini", -32768},
{"Values 3", "NoValue", 1, "C:\\test.ini", 1},
{"Values 3", "Value", 1, "C:\\test.ini", 32768},
{"Values 4", "NoValue", 1, "C:\\test.ini", 1},
{"Values 4", "Value", 1, "C:\\test.ini", -32769},
{"\"Strange\"", "Value1", 1, "C:\\test.ini", 1592593939},
{"\"Strange\"", "Value2", 1, "C:\\test.ini", 0},
{"\"Strange\"", "Value3", 1, "C:\\test.ini", 1},
{"Duplicate", "Value1", 1, "C:\\test.ini", 7}
};
for(i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
ret = GetPrivateProfileIntA(params[i].lpAppName,
params[i].lpKeyName,
params[i].nDefault,
params[i].lpFileName);
ok(ret == params[i].ret,
"case %d: ret %u should be %u", i + 1, ret, params[i].ret);
}
}
static void test_GetPrivateProfileSectionA( void )
{
unsigned i, j;
DWORD ret;
BOOL isError;
char buf [1024];
struct param {
char *lpAppName;
DWORD nSize;
char *lpFileName;
DWORD ret;
};
struct param params[] = {
/* lpAppName nSize, lpFileName Ret */
{NULL, 0, NULL, 0},
{NULL, 1024, NULL, 0},
{NULL, 1024, "C:\\test.ini", 0},
{"No Keys", -1, "C:\\test.ini", 0},
{"No Keys", 0, "C:\\test.ini", -1},
{"No Keys", 1, "C:\\test.ini", -1},
{"No Keys", 2, "C:\\test.ini", 0},
{"No Keys", 1024, "C:\\test.ini", 0},
{"Values 1", 1024, "C:\\test.ini", 21},
{"Values 1", 1024, "winetest.ini", 21},
{"\"Strange\"", 1024, "C:\\test.ini", 76},
{"Duplicate", 10, "C:\\test.ini", 8}
};
char *lpReturnedString[] = {
"test",
"",
"",
"",
"test",
"",
"",
"",
"NoValue=\0Value=32767",
"NoValue=\0Value=32767",
"Value1=112233445566778899\0Value1=-112233445566778899\0Value2=\" \\\"[Weird]\\\" \"",
"Value1=7"
};
for(i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
isError = FALSE;
strcpy(buf, "test");
ret = GetPrivateProfileSectionA(params[i].lpAppName,
buf,
params[i].nSize,
params[i].lpFileName);
ok(ret == params[i].ret, "case %d: ret %ld should be %ld", i + 1,
ret, params[i].ret);
if(!ret || ret == -1) {
ok(!strcmp(buf, lpReturnedString[i]),
"case %d: '%s' should be '%s'", i + 1, buf, lpReturnedString[i]);
} else {
for(j = 0; j < ret; j++) {
if(buf[j] != lpReturnedString[i][j]) {
ok(0, "case %d: return buffer does not match expected value", i + 1);
break;
}
}
/* Make sure there is a double null terminator when needed */
ok(params[i].lpAppName || !buf[j],
"case %d: missing double null termination", i + 1);
}
}
/*
* Special case: NULL lpReturnedString with size > 0
* This causes an application error in win2k. Let's make wine better :)
*/
ok(!GetPrivateProfileSectionA("No Keys", NULL, 1024, "C:\\test.ini"),
"special case not handled properly\n");
}
static void test_GetPrivateProfileSectionNamesA( void )
{
unsigned i, j;
DWORD ret;
BOOL isError;
char buf[1024];
struct param {
INT nSize;
char *lpFileName;
DWORD ret;
};
char *lpszReturnBuffer[] = {
"test",
"No Keys\0Values 1\0Values 2\0Values 3\0Values 4\0\"Strange\"\0Duplicate\0Duplicate\0Struct Section\0",
"test",
"",
"",
"No Keys\0Values 1\0Values 2\0Values 3\0Values 4\0\"Strange\"\0Duplicate\0Duplicate\0Struct Section\0",
"No Keys\0Values 1\0Values 2\0Values 3\0Values 4\0\"Strange\"\0Duplicate\0Duplicate\0Struct Section\0",
"",
};
struct param params[] = {
/* nSize, lpFileName Ret */
/* Test all null values */
{0, NULL, 0},
/* Test with negative buffer size (large int) */
{-1, "C:\\test.ini", 89},
/* Buffer size too small (0) */
{0, "C:\\test.ini", 0},
/* Buffer size too small (1) */
{1, "C:\\test.ini", 0},
/* Buffer size too small (2) */
{2, "C:\\test.ini", 0},
/* Test normal operation */
{1024, "C:\\test.ini", 89},
/* Test for file in windows directory */
{1024, "winetest.ini", 89},
/* Test when file does not exist */
{1024, "test.ini", 0}
};
for(i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
isError = FALSE;
strcpy(buf, "test");
ret = GetPrivateProfileSectionNamesA(buf, params[i].nSize,
params[i].lpFileName);
ok(ret == params[i].ret,
"case %d: ret %ld should be %ld", i + 1, ret, params[i].ret);
if(!ret) {
ok(!strcmp(buf, lpszReturnBuffer[i]),
"buffer '%s' should be '%s'", buf, lpszReturnBuffer[i]);
} else {
for(j = 0; j < ret; j++) {
if(buf[j] != lpszReturnBuffer[i][j]) {
ok(0, "case %d: return buffer does not match expected value", i + 1);
break;
}
}
/* Make sure there is a double null terminator */
ok(!buf[j], "case %d: missing double null termination\n", i + 1);
}
}
/*
* Special case: NULL lpReturnedString with size > 0
* This causes an application error in win2k. Let's make wine better :)
*/
ok(!GetPrivateProfileSectionNamesA(NULL, 1024, "C:\\test.ini"),
"special case not handled");
}
static void test_GetPrivateProfileStringA( void )
{
unsigned i, j;
DWORD ret;
BOOL isError;
char buf [1024];
struct param {
char *lpAppName;
char *lpKeyName;
char *lpDefault;
DWORD nSize;
char *lpFileName;
DWORD ret;
};
struct param params[] = {
/* # lpAppName lpKeyName pDefault nSize lpFileName Ret */
/* 1: All null params */
{NULL, NULL, NULL, 0, NULL, 0},
/* 2: Default value with non-existent file */
{NULL, NULL, "def ", 1024, "test.ini", 3},
/* 3: Buffer too small for section names (1) */
{NULL, NULL, "def", 1, "C:\\test.ini", 0},
/* 4: Buffer too small for section names (2) */
{NULL, NULL, "def", 2, "C:\\test.ini", 0},
/* 5: Buffer too small for section names (3) */
{NULL, NULL, "def", 3, "C:\\test.ini", 1},
/* 6: Section names */
{NULL, NULL, "def", 1024, "C:\\test.ini", 89},
/* 7: Buffer too small for keys (1) */
{"No Keys", NULL, "def", 1, "C:\\test.ini", -1},
/* 8: Buffer too small for keys (2) */
{"No Keys", NULL, "def", 2, "C:\\test.ini", 0},
/* 9: Buffer too small for keys (3) */
{"No Keys", NULL, "def", 2, "C:\\test.ini", 0},
/* 10: Keys */
{"Values 1", NULL, "def", 1024, "C:\\test.ini", 14},
/* 11: Comments */
{"Values 1", "Comment", "def", 1024, "C:\\test.ini", 3},
/* 12 */
{"Values 1", "NoValue", "", 1024, "C:\\test.ini", 0},
/* 13 */
{"VaLuEs 1", "Value", "def", 1024, "C:\\test.ini", 5},
/* 14: Make sure files in current directory are not opened */
{"VaLuEs 1", "Value", "def", 1024, "test.ini", 3},
/* 15: Make sure files in windows directory are opened */
{"VaLuEs 1", "Value", "def", 1024, "winetest.ini", 5},
/* 16 - 25: Test various values */
{"Values 2", "NoValue", " ", 1024, "C:\\test.ini", 0},
/* 17 */
{"VALUES 2", "Value", "def", 1024, "C:\\test.ini", 6},
/* 18 */
{"Values 3", "NoValue", "def ", 1024, "C:\\test.ini", 0},
/* 19 */
{"Values 3", "Value", "def", 1024, "C:\\test.ini", 5},
/* 20 */
{"Values 4", "NoValue", " def", 1024, "C:\\test.ini", 0},
/* 21 */
{"Values 4", "Value", "def", 1024, "C:\\test.ini", 6},
/* 22 */
{"\"Strange\"", "Value1", "def", 1024, "C:\\test.ini", 18},
/* 23 */
{"\"Strange\"", "Value2", "def", 1024, "C:\\test.ini", 13},
/* 24 */
{"\"Strange\"", "Value3", "def", 1024, "C:\\test.ini", 3},
/* 25 */
{"Duplicate", "Value1", "def", 1024, "C:\\test.ini", 1}
};
char *lpReturnedString[] = {
"test",
"def",
"",
"",
"N",
"No Keys\0Values 1\0Values 2\0Values 3\0Values 4\0\"Strange\"\0Duplicate\0Duplicate\0Struct Section\0",
"",
"",
"",
"NoValue\0Value\0",
"def",
"",
"32767",
"def",
"32767",
"",
"-32768",
"",
"32768",
"",
"-32769",
"112233445566778899",
" \\\"[Weird]\\\" ",
"def",
"7"
};
for(i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
isError = FALSE;
strcpy(buf, "test");
ret = GetPrivateProfileStringA(params[i].lpAppName,
params[i].lpKeyName,
params[i].lpDefault,
buf,
params[i].nSize,
params[i].lpFileName);
ok(ret == params[i].ret,
"case %d: ret %ld should be %ld\n", i + 1, ret, params[i].ret);
if(!ret || ret == -1) {
ok(!strcmp(buf, lpReturnedString[i]),
"buffer '%s' should be '%s'\n", buf, lpReturnedString[i]);
} else {
for(j = 0; j < ret; j++) {
if(buf[j] != lpReturnedString[i][j]) {
ok(0, "case %d: return buffer does not match expected value", i + 1);
break;
}
}
/* Make sure there is a double null terminator when needed */
ok((params[i].lpAppName && params[i].lpKeyName) || !buf[j],
"case %d: missing double null termination", i + 1);
}
}
/* Get section names of win.ini */
ret = GetPrivateProfileStringA(NULL, NULL, NULL, buf, 1024, NULL);
ok(ret > 3, "error opening win.ini");
}
static void test_GetPrivateProfileStructA( void )
{
struct test {
char str[5];
int number;
double pi;
} orig = {"Josh", 7, 3.14}, test;
ok(GetPrivateProfileStructA("Struct Section", "Struct Key", &test,
sizeof(struct test), "C:\\test.ini"),
"GetPrivateProfileStructA failed");
ok(!strcmp(orig.str, test.str)
&& test.number == orig.number
&& test.pi == orig.pi,
"returned struct values do not match expected values");
}
static void test_WritePrivateProfileSectionA( void )
{
int i;
DWORD error;
BOOL ret, isError;
HANDLE handle;
char filename[1024];
struct param {
char *lpAppName;
char *lpString;
char *lpFileName;
BOOL ret;
DWORD error;
};
struct param params[] = {
/* # lpAppName lpString lpFileName Ret Error */
/* 1: Null parameters. */
{NULL, NULL, NULL, 1, 0},
/* 2: Test if win.ini is written to */
{"Wine Test", "Value=1\0", NULL, 1, 0},
/* 3: Test if windows directory is used (and file is created) */
{"Wine Test", "Value=1\0", "winetest.ini", 1, 0},
/* 4: Test what happens when lpAppName is null */
{NULL, "Test\0", "C:\\result.ini", 0, 2},
/* 5: Test what happens when lpString is null. */
{"Null", NULL, "C:\\result.ini", 1, 0},
/* 6: Test section with no keys. */
{"No Keys", " ", "C:\\result.ini", 1, 0},
/* 7: Test key with no value */
{"No Values 2", "Value=\0", "C:\\result.ini", 1, 0},
/* 8: Test overwrite of key */
{"Duplicate",
"Value1=112233445566778899\0Value1=-112233445566778899\0Value2=\" \\\"[Weird]\\\" \"\0",
"C:\\result.ini", 1, 0},
/* 9: Test what happens when absolute path file does not exist.
* (MSDN docs are wrong. The file should be created)
*/
{"Wine Test", "Value=1\0", "C:\\winetest.ini", 1, 2},
/* 10 - 11: Interesting obscure behaviour here... should this be tested? */
{"[Strange 2]", "Value=1\0", "C:\\result.ini", 1, 0},
{"[Strange 2]", "Value=2\0", "C:\\result.ini", 1, 0},
};
for(i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
isError = FALSE;
ret = WritePrivateProfileSectionA(params[i].lpAppName,
params[i].lpString,
params[i].lpFileName);
ok(ret == params[i].ret,
"case %d: ret %d should be %d", i + 1, ret, params[i].ret);
if(!ret) {
error = GetLastError();
ok(error == params[i].error,
"case %d: GetLastError should return %ld; not %ld", i + 1,
params[i].error, error);
}
}
sprintf(filename, "%s\\winetest.ini", winpath);
handle = CreateFileA( filename, 0, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if(handle == INVALID_HANDLE_VALUE) {
ok(0, "%s was not created", filename);
} else {
CloseHandle(handle);
DeleteFileA(filename);
}
sprintf(filename, "c:\\winetest.ini");
handle = CreateFileA( filename, 0, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
ok(handle != INVALID_HANDLE_VALUE, "%s was not created", filename);
CloseHandle(handle);
DeleteFileA(filename);
ok(SearchPathA(NULL, "compare1.ini", NULL, sizeof(filename), filename, NULL), "could not find compare1.ini");
ok(compare(filename, "C:\\result.ini"),
"c:\\result.ini does not match compare1.ini");
DeleteFileA("C:\\result.ini");
}
static void test_WritePrivateProfileStringA( void )
{
int i;
BOOL ret;
DWORD error;
HANDLE handle;
char filename[1024];
struct param {
char *lpAppName;
char *lpKeyName;
char *lpString;
char *lpFileName;
BOOL ret;
DWORD error;
};
struct param params[] = {
/* # lpAppName lpKeyName, lpString lpFileName Ret Error */
/* 1 Null parameters. I guess windows lies about the return value */
{NULL, NULL, NULL, NULL, 1, 0},
/* 2 Test if win.ini is written to and entry is deleted */
{"Wine Test", NULL, NULL, NULL, 1, 0},
/* 3 Test if windows directory is used and file is created */
{"Wine Test", "Value1", "1", "winetest.ini", 1, 0},
/* 4 Test what happens when lpAppName is null */
{NULL, "Value2", "2", "C:\\result.ini", 0, 2},
/* 5 Test what happens when section is not found */
{"Null", "Key", "Value", "C:\\result.ini", 1, 0},
/* 5 Test what happens when key is not found */
{"Values 1", "Null", "Value", "C:\\result.ini", 1, 0},
/* 6 Test section with no keys. */
{"No Keys", "", "3", "C:\\result.ini", 1, 0},
/* 7 Test deletion of value */
{"Values 1", "Value", NULL, "C:\\result.ini", 1, 0},
/* 8: Test deletion of value */
{"Values 2", "Value", "", "C:\\result.ini", 1, 0},
/* 9: Test overwrite of value */
{"Duplicate", "Value1", " Replaced", "C:\\result.ini", 1, 0},
/* 10 Test key deletion */
{"\"Strange\"", NULL, "Replace", "C:\\result.ini", 1, 0},
/* 11 Test what happens when absolute path file does not exist
* (File should be created) */
{"Wine Test", "Test", "1", "C:\\winetest.ini", 1, 0},
};
ok(CopyFileA("c:\\test.ini", "c:\\result.ini", FALSE),
"could not copy c:\\test.ini to c:\\result.ini, err=%ld",
GetLastError());
for(i = 0; i < sizeof(params) / sizeof(params[0]); i++) {
ret = WritePrivateProfileStringA(params[i].lpAppName,
params[i].lpKeyName,
params[i].lpString,
params[i].lpFileName);
ok(ret == params[i].ret, "case %d: ret %d should be %d", i + 1,
ret, params[i].ret);
if(!ret) {
error = GetLastError();
ok(error == params[i].error,
"case %d: GetLastError should return %ld; not %ld", ret + 1,
params[i].error, error);
}
}
/* See if the Wine Test key was deleted in win.ini */
ok(!GetPrivateProfileIntA("Wine Test", "Value", 0, NULL),
"Wine Test key was not deleted from win.ini");
/* See if the INI file was created in the windows directory */
sprintf(filename, "%s\\winetest.ini", winpath);
handle = CreateFileA( filename, 0, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
ok(handle != INVALID_HANDLE_VALUE, "%s was not created", filename);
CloseHandle(handle);
DeleteFileA(filename);
/* See if the INI file with an absolute path was created */
sprintf(filename, "c:\\winetest.ini");
handle = CreateFileA( filename, 0, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
ok(handle != INVALID_HANDLE_VALUE, "%s was not created", filename);
CloseHandle(handle);
sprintf(filename, "%s", filename);
DeleteFileA(filename);
ok(SearchPathA(NULL, "compare2.ini", NULL, sizeof(filename), filename, NULL), "could not find compare2.ini");
ok(compare(filename, "C:\\result.ini"),
"c:\\result.ini does not match compare2.ini");
DeleteFileA("C:\\result.ini");
}
static void test_WritePrivateProfileStructA( void )
{
struct test {
char str[5];
int number;
double e;
} orig = {"Test", 0x7FFFFFFF, 2.718281828459 }, test;
ok(WritePrivateProfileStructA("Struct Test", "Struct Key", &orig,
sizeof(struct test), "C:\\result.ini"),
"[Struct Test] key was not created");
ok(GetPrivateProfileStructA("Struct Test", "Struct Key", &test,
sizeof(struct test), "C:\\result.ini"),
"key, [Struct Test], was not found");
ok(!strcmp(orig.str, test.str)
&& test.number == orig.number
&& test.e == orig.e,
"returned struct values do not match expected values");
DeleteFileA("C:\\result.ini");
}
START_TEST(profile)
{
char testname[1024], filename[1024];
GetWindowsDirectoryA(winpath, sizeof(filename));
/* Back up win.ini (just in case) */
sprintf(filename, "%s\\win.ini", winpath);
ok(CopyFileA(filename, "win.ini", FALSE),
"could back up win.ini to current directory (err=%ld)", GetLastError());
/* Copy test.ini to c:\ */
ok(SearchPathA(NULL, "test.ini", NULL, sizeof(testname), testname, NULL),
"could not find test.ini");
ok(CopyFileA(testname, "C:\\test.ini", FALSE),
"could not copy test.ini to C:\\test.ini (err=%ld)", GetLastError());
/* Copy test.ini to windows directory as winetest.ini */
sprintf(filename, "%s\\winetest.ini", winpath);
ok(CopyFileA(testname, filename, FALSE),
"could not copy test.ini to %s (err=%ld)", filename, GetLastError());
test_GetPrivateProfileIntA();
test_GetPrivateProfileSectionA();
test_GetPrivateProfileSectionNamesA();
test_GetPrivateProfileStringA();
test_GetPrivateProfileStructA();
DeleteFileA(filename);
test_WritePrivateProfileSectionA();
test_WritePrivateProfileStringA();
test_WritePrivateProfileStructA();
/* Restore win.ini */
sprintf(filename, "%s\\win.ini", winpath);
CopyFileA("win.ini", filename, FALSE);
DeleteFileA("win.ini");
sprintf(filename, "%s\\winetest.ini", winpath);
DeleteFileA("C:\\winetest.ini");
DeleteFileA("c:\\test.ini");
}
-------------- next part --------------
;INI file to test GetProfile functions
[No Keys]
;
[Values 1]
;Comment=1
NoValue=
Value=32767
[Values 2]
NoValue=""
Value="-32768"
[Values 3]
NoValue =
Value = 32768
[Values 4]
NoValue = ""
Value = "-32769"
["Strange"]
; Testing
Value1 = 112233445566778899
Value1 = -112233445566778899
Value2 = " \"[Weird]\" "
[Duplicate]
Value1 = 7
; Comment = "3"
[Duplicate]
Value1 = 10
[Struct Section]
Struct Key=4A6F73680000000007000000089241001F85EB51B81E094075
;Comment 4
-------------- next part --------------
; INI file used to test WritePrivateProfile functions
[No Keys]
[No Values 2]
Value=
[Duplicate]
Value1=112233445566778899
Value1=-112233445566778899
Value2=" \"[Weird]\" "
[[Strange 2]]
Value=1
[[Strange 2]]
Value=2
-------------- next part --------------
;INI file to test WritePrivateProfile functions
[No Keys]
=3
;
[Values 1]
;Comment=1
NoValue=
Null=Value
[Values 2]
NoValue=""
Value=
[Values 3]
NoValue =
Value = 32768
[Values 4]
NoValue = ""
Value = "-32769"
[Duplicate]
Value1 = Replaced
; Comment = "3"
[Duplicate]
Value1 = 10
[Struct Section]
Struct Key=4A6F73680000000007000000089241001F85EB51B81E094075
;Comment 4
[Null]
Key=Value
-------------- next part --------------
Index: wine/dlls/kernel/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/kernel/Makefile.in,v
retrieving revision 1.37
diff -u -r1.37 Makefile.in
--- wine/dlls/kernel/Makefile.in 14 Jun 2002 02:09:08 -0000 1.37
+++ wine/dlls/kernel/Makefile.in 2 Jul 2002 04:00:42 -0000
@@ -46,6 +46,7 @@
tests/locale.c \
tests/path.c \
tests/process.c \
+ tests/profile.c \
tests/thread.c
PLTESTS = \
More information about the wine-patches
mailing list