17 #define DISABLE_THIS_TESTCASE 21 #define NEW_DELIVERY_ONLY 23 #define RANDOM_QUARTER 57 #define TEST_FILE L"_TEST_.txt" 58 #define TEST_FILE_KAI L"_TEST_KAI_.txt" 59 #define TEST_DIR L"_TESTDIR_" 60 #define TEST_DIR_KAI L"_TESTDIR_KAI_" 61 #define MOVE_FILE(from, to) MoveFileW((from), (to)) 76 ok(
MOVE_FILE(pszPath1, pszPath2),
"Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n",
86 ok(
MOVE_FILE(pszPath1, pszPath2),
"Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n",
95 ok(
DeleteFileW(pszPath),
"Line %d: DeleteFileW(%ls) failed (%ld)\n",
114 ok(
MOVE_FILE(pszPath1, pszPath2),
"Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n",
124 ok(
MOVE_FILE(pszPath1, pszPath2),
"Line %d: MOVE_FILE(%ls, %ls) failed (%ld)\n",
170 #define WRITEDIR_0 DIRTYPE_DESKTOP 177 #define WRITEDIR_1 DIRTYPE_MYDOCUMENTS 462 s_buf[
i] = (
char)(
'0' + !!(
flags & (1 <<
i)));
470 pszPath1[0] = pszPath2[0] = 0;
477 fread(szText, 1,
sizeof(szText), fp);
506 UINT cTry = ((iEntry == 0) ? 100 : 60);
507 for (
UINT iTry = 0; iTry < cTry; ++iTry)
529 szPath1[0] = szPath2[0] = 0;
532 static UINT s_cCalmDown = 0;
536 trace(
"Line %d: SHCNE_UPDATEDIR: Calm down (%u)...\n",
entry->line, s_cCalmDown);
538 if (++s_cCalmDown < 3)
554 "Line %d: pattern mismatch '%s', tick=0x%08lX\n",
559 "Line %d: path1 mismatch '%S' (%d)\n",
entry->line, szPath1, bOK);
562 "Line %d: path2 mismatch '%S' (%d)\n",
entry->line, szPath2, bOK);
570 DWORD dwTick = dwNewTick - dwOldTick;
571 trace(
"DoTestEntry: Line %d: tick=%lu.%lu sec\n",
entry->line,
572 (dwTick / 1000), (dwTick / 100 % 10));
594 skip(
"Aborting the thread...\n");
663 trace(
"Closing Explorer windows...\n");
690 #define SRC_01 SHCNRF_ShellLevel 691 #define SRC_02 (SHCNRF_NewDelivery) 692 #define SRC_03 (SHCNRF_NewDelivery | SHCNRF_ShellLevel) 693 #define SRC_04 SHCNRF_InterruptLevel 694 #define SRC_05 (SHCNRF_InterruptLevel | SHCNRF_ShellLevel) 695 #define SRC_06 (SHCNRF_InterruptLevel | SHCNRF_NewDelivery) 696 #define SRC_07 (SHCNRF_InterruptLevel | SHCNRF_NewDelivery | SHCNRF_ShellLevel) 697 #define SRC_08 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel) 698 #define SRC_09 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel | SHCNRF_ShellLevel) 699 #define SRC_10 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel | SHCNRF_NewDelivery) 700 #define SRC_11 (SHCNRF_RecursiveInterrupt | SHCNRF_InterruptLevel | SHCNRF_NewDelivery | SHCNRF_ShellLevel) 702 #define WATCHDIR_0 DIRTYPE_NULL 703 #define WATCHDIR_1 DIRTYPE_DESKTOP 704 #define WATCHDIR_2 DIRTYPE_MYCOMPUTER 705 #define WATCHDIR_3 DIRTYPE_MYDOCUMENTS 711 #ifdef NO_INTERRUPT_LEVEL 715 #ifdef NO_SHELL_LEVEL 719 #ifdef NEW_DELIVERY_ONLY 726 #ifdef RANDOM_QUARTER 727 if ((
rand() & 3) == 0)
729 #elif defined(RANDOM_HALF) 734 trace(
"DoTestGroup: Line %d: fRecursive:%u, iWatchDir:%u, nSources:0x%X\n",
735 line, fRecursive, iWatchDir, nSources);
750 skip(
"Unable to run shell32_apitest_sub.exe.\n");
757 skip(
"Unable to find window.\n");
777 DWORD dwTick = dwNewTick - dwOldTick;
778 trace(
"DoTestGroup: Line %d: %lu.%lu sec\n",
line, (dwTick / 1000), (dwTick / 100 % 10));
785 #ifdef RANDOM_QUARTER 786 skip(
"RANDOM_QUARTER\n");
787 #elif defined(RANDOM_HALF) 788 skip(
"RANDOM_HALF\n");
807 #define SWITCH(x, y) (bTarget ? (x) : (y)) 911 #ifdef DISABLE_THIS_TESTCASE 912 skip(
"This testcase is disabled by DISABLE_THIS_TESTCASE macro.\n");
916 trace(
"Please don't operate your PC while testing...\n");
920 skip(
"shell32_apitest_sub.exe not found\n");
926 skip(
"Unable to initialize.\n");
937 DWORD dwTick = dwNewTick - dwOldTick;
938 trace(
"SHChangeNotify: Total %lu.%lu sec\n", (dwTick / 1000), (dwTick / 100 % 10));
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
static BOOL DoCreateEmptyFile(LPCWSTR pszFileName)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
static BOOL DoAction11(const TEST_ENTRY *entry)
static WCHAR s_szTestFile0[MAX_PATH]
BOOL WINAPI TerminateThread(IN HANDLE hThread, IN DWORD dwExitCode)
static WCHAR s_szSubProgram[MAX_PATH]
BOOL WINAPI IsWindow(_In_opt_ HWND)
_Check_return_ _CRTIMP FILE *__cdecl _wfopen(_In_z_ const wchar_t *_Filename, _In_z_ const wchar_t *_Mode)
static HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce)
static void DoDeleteFilesAndDirs(void)
DWORD WINAPI GetTickCount(VOID)
void __cdecl srand(_In_ unsigned int _Seed)
static void DoAbortThread(void)
DWORD WINAPI GetLastError(VOID)
static BOOL DoAction3(const TEST_ENTRY *entry)
static WCHAR s_szDesktop[MAX_PATH]
static WCHAR s_szDocuments[MAX_PATH]
static BOOL DoGetPaths(LPWSTR pszPath1, LPWSTR pszPath2)
START_TEST(SHChangeNotify)
static BOOL DoAction2(const TEST_ENTRY *entry)
static BOOL GetSubProgramPath(void)
_CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void *_Security, _In_ unsigned _StackSize, _In_ unsigned(__stdcall *_StartAddress)(void *), _In_opt_ void *_ArgList, _In_ unsigned _InitFlag, _Out_opt_ unsigned *_ThrdAddr)
static void DoTestEntry(INT iEntry, const TEST_ENTRY *entry, INT nSources)
static BOOL DoAction8(const TEST_ENTRY *entry)
static const TEST_ENTRY s_group_02[]
#define MOVE_FILE(from, to)
static BOOL DoAction7(const TEST_ENTRY *entry)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
static BOOL DoAction6(const TEST_ENTRY *entry)
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ int __cdecl rand(void)
static const TEST_ENTRY s_group_08[]
BOOL WINAPI DECLSPEC_HOTPATCH SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, BOOL Add)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
WORD WORD PSZ PSZ pszFileName
static void DoTestGroup(INT line, UINT cEntries, const TEST_ENTRY *pEntries, BOOL fRecursive, INT nSources, DIRTYPE iWatchDir)
#define WM_GET_NOTIFY_FLAGS
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
static unsigned __stdcall TestThreadProc(void *)
#define SHCNRF_InterruptLevel
struct TEST_ENTRY TEST_ENTRY
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
static BOOL DoAction9(const TEST_ENTRY *entry)
VERSIONHELPERAPI IsWindowsVistaOrGreater()
static WCHAR s_szTestFile0Kai[MAX_PATH]
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
static WCHAR s_szTestDir0Kai[MAX_PATH]
static BOOL DoAction1(const TEST_ENTRY *entry)
static WCHAR s_szTestDir0[MAX_PATH]
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
static const TEST_ENTRY s_group_05[]
VERSIONHELPERAPI IsWindowsXPOrGreater()
static const TEST_ENTRY s_group_01[]
#define SHCNRF_ShellLevel
static const TEST_ENTRY s_group_04[]
static const TEST_ENTRY s_group_00[]
_In_ UINT _In_ UINT cEntries
static WCHAR s_szTestDir1Kai[MAX_PATH]
static BOOL DoAction10(const TEST_ENTRY *entry)
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
static BOOL DoInitTest(void)
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
#define SHCNRF_NewDelivery
static WCHAR s_szTestDir1[MAX_PATH]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
static const TEST_ENTRY s_group_07[]
static BOOL DoAction5(const TEST_ENTRY *entry)
static BOOL DoAction12(const TEST_ENTRY *entry)
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static WCHAR s_szTestFile1Kai[MAX_PATH]
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
int strcmp(const char *String1, const char *String2)
static void DoQuitTest(BOOL bForce)
static const TEST_ENTRY s_group_06[]
static LPCSTR PatternFromFlags(DWORD flags)
static const TEST_ENTRY s_group_03[]
static BOOL DoAction4(const TEST_ENTRY *entry)
static LPWSTR DoGetDir(DIRTYPE iDir)
static BOOL CALLBACK HandlerRoutine(DWORD dwCtrlType)
static WCHAR s_szTestFile1[MAX_PATH]