Index: apitests/kernel32/CMakeLists.txt =================================================================== --- apitests/kernel32/CMakeLists.txt (revision 75915) +++ apitests/kernel32/CMakeLists.txt (working copy) @@ -7,6 +7,7 @@ DefaultActCtx.c DeviceIoControl.c dosdev.c + FileAttributes.c FindActCtxSectionStringW.c FindFiles.c GetComputerNameEx.c Index: apitests/kernel32/FileAttributes.c =================================================================== --- apitests/kernel32/FileAttributes.c (nonexistent) +++ apitests/kernel32/FileAttributes.c (working copy) @@ -0,0 +1,124 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Test for GetFileAttributes and SetFileAttributes + * PROGRAMMER: Katayama Hirofumi MZ + */ +#define WIN32_LEAN_AND_MEAN +#include +#include + +typedef struct TEST_ENTRY +{ + UINT nEntryNumber; /* # */ + BOOL bRetVal; /* return value */ + DWORD input_attrs; + DWORD output_attrs; +} TEST_ENTRY; + +#define ATTRS_00 0 +#define ATTRS_01 (FILE_ATTRIBUTE_NORMAL) +#define ATTRS_02 (FILE_ATTRIBUTE_DIRECTORY) +#define ATTRS_03 (FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_DIRECTORY) +#define ATTRS_04 (FILE_ATTRIBUTE_READONLY) +#define ATTRS_05 (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_NORMAL) +#define ATTRS_06 (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY) +#define ATTRS_07 (FILE_ATTRIBUTE_HIDDEN) +#define ATTRS_08 (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_NORMAL) +#define ATTRS_09 (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY) +#define ATTRS_10 (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_DIRECTORY) +#define ATTRS_11 (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY) +#define ATTRS_12 (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_NORMAL) +#define ATTRS_13 (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY) +#define ATTRS_14 INVALID_FILE_ATTRIBUTES + +static const TEST_ENTRY file_test_entries[] = +{ + { 1, TRUE, ATTRS_00, FILE_ATTRIBUTE_NORMAL }, + { 2, TRUE, ATTRS_01, FILE_ATTRIBUTE_NORMAL }, + { 3, TRUE, ATTRS_02, FILE_ATTRIBUTE_NORMAL }, + { 4, TRUE, ATTRS_03, FILE_ATTRIBUTE_NORMAL }, + { 5, TRUE, ATTRS_04, FILE_ATTRIBUTE_READONLY }, + { 6, TRUE, ATTRS_05, FILE_ATTRIBUTE_READONLY }, + { 7, TRUE, ATTRS_06, FILE_ATTRIBUTE_READONLY }, + { 8, TRUE, ATTRS_07, FILE_ATTRIBUTE_HIDDEN }, + { 9, TRUE, ATTRS_08, FILE_ATTRIBUTE_HIDDEN }, + { 10, TRUE, ATTRS_09, FILE_ATTRIBUTE_HIDDEN }, + { 11, TRUE, ATTRS_10, FILE_ATTRIBUTE_HIDDEN }, + { 12, TRUE, ATTRS_11, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN }, + { 13, TRUE, ATTRS_12, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN }, + { 14, TRUE, ATTRS_13, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN }, + { 15, TRUE, ATTRS_14, 0x001A3127 }, +}; + +static const TEST_ENTRY folder_test_entries[] = +{ + { 16, TRUE, ATTRS_00, FILE_ATTRIBUTE_DIRECTORY }, + { 17, TRUE, ATTRS_01, FILE_ATTRIBUTE_DIRECTORY }, + { 18, TRUE, ATTRS_02, FILE_ATTRIBUTE_DIRECTORY }, + { 19, TRUE, ATTRS_03, FILE_ATTRIBUTE_DIRECTORY }, + { 20, TRUE, ATTRS_04, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY }, + { 21, TRUE, ATTRS_05, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY }, + { 22, TRUE, ATTRS_06, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_READONLY }, + { 23, TRUE, ATTRS_07, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN }, + { 24, TRUE, ATTRS_08, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN }, + { 25, TRUE, ATTRS_09, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN }, + { 26, TRUE, ATTRS_10, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN }, + { 27, TRUE, ATTRS_11, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY }, + { 28, TRUE, ATTRS_12, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY }, + { 29, TRUE, ATTRS_13, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY }, + { 30, FALSE, ATTRS_14, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY }, +}; + +static VOID +TestEntry(LPCWSTR pszItem, UINT nCount, const TEST_ENTRY *entries) +{ + const TEST_ENTRY *entry; + BOOL bRetVal; + DWORD output_attrs; + UINT i; + + for (i = 0; i < nCount; ++i) + { + entry = &entries[i]; + + /* set */ + bRetVal = SetFileAttributesW(pszItem, entry->input_attrs); + ok(bRetVal == entry->bRetVal, + "Entry #%u, bRetVal expected %d got %d\n", + entry->nEntryNumber, entry->bRetVal, bRetVal); + + /* get */ + output_attrs = GetFileAttributesW(pszItem); + ok(entry->output_attrs == output_attrs, + "Entry #%u, output_attrs expected 0x%08lX got 0x%08lX\n", + entry->nEntryNumber, entry->output_attrs, output_attrs); + } +} + +static BOOL +MakeFileW(LPCWSTR filename) +{ + HANDLE hFile = CreateFileW(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, + CREATE_ALWAYS, 0, NULL); + CloseHandle(hFile); + return hFile != INVALID_HANDLE_VALUE; +} + +START_TEST(FileAttributes) +{ + static const WCHAR file[] = L"file.txt"; + static const WCHAR folder[] = L"folder"; + + MakeFileW(file); + CreateDirectoryW(folder, NULL); + + TestEntry(file, _countof(file_test_entries), file_test_entries); + TestEntry(folder, _countof(folder_test_entries), folder_test_entries); + + SetFileAttributesW(file, FILE_ATTRIBUTE_NORMAL); + SetFileAttributesW(folder, FILE_ATTRIBUTE_NORMAL); + + DeleteFileW(file); + RemoveDirectoryW(folder); +} Index: apitests/kernel32/testlist.c =================================================================== --- apitests/kernel32/testlist.c (revision 75915) +++ apitests/kernel32/testlist.c (working copy) @@ -8,6 +8,7 @@ extern void func_DefaultActCtx(void); extern void func_DeviceIoControl(void); extern void func_dosdev(void); +extern void func_FileAttributes(void); extern void func_FindActCtxSectionStringW(void); extern void func_FindFiles(void); extern void func_GetComputerNameEx(void); @@ -36,6 +37,7 @@ { "DefaultActCtx", func_DefaultActCtx }, { "DeviceIoControl", func_DeviceIoControl }, { "dosdev", func_dosdev }, + { "FileAttributes", func_FileAttributes }, { "FindActCtxSectionStringW", func_FindActCtxSectionStringW }, { "FindFiles", func_FindFiles }, { "GetComputerNameEx", func_GetComputerNameEx },