[SHELL32_APITEST] Improve ShellHook testcase (#6582)

Make shell32:ShellHook testcase stable and trustworthy.
JIRA issue: ROSTESTS-389
- Use real shell hook.
- Delete HSHELL_RUDEAPPACTIVATED tests.
- Add HSHELL_WINDOWDESTROYED tests.
This commit is contained in:
Katayama Hirofumi MZ 2024-03-08 18:17:09 +09:00 committed by GitHub
parent 0709dff84c
commit b383b70089
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 323 additions and 441 deletions

View file

@ -2,15 +2,15 @@
* PROJECT: ReactOS api tests * PROJECT: ReactOS api tests
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
* PURPOSE: Test for Shell Hook * PURPOSE: Test for Shell Hook
* COPYRIGHT: Copyright 2020-2021 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) * COPYRIGHT: Copyright 2020-2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/ */
#include "shelltest.h" #include "shelltest.h"
#include "undocshell.h"
struct TEST_ENTRY struct TEST_ENTRY
{ {
INT lineno; INT lineno;
UINT nCount; UINT cCreated;
UINT cDestroyed;
BOOL bIsChild; BOOL bIsChild;
BOOL bHasOwner; BOOL bHasOwner;
DWORD style; DWORD style;
@ -35,353 +35,228 @@ struct TEST_ENTRY
static const TEST_ENTRY s_entries1[] = static const TEST_ENTRY s_entries1[] =
{ {
// TYPE_0 // TYPE_0
{ __LINE__, 0, TYPE_0, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_0, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_0, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_0, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_0, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_0, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_0, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_0, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_0, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_0, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_0, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_0, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_0, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_0, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_0, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_0, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_0, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_0, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_0, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_0, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_0, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_0, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_0, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_0, STYLE_2, EXSTYLE_3 },
// TYPE_1 // TYPE_1
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_1, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_1 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_1, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_3 },
// TYPE_2 // TYPE_2
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_0, STYLE_2, EXSTYLE_3 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_0 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_1 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_2 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_1 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_1 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_1, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_1, EXSTYLE_2, STYLE_2, EXSTYLE_3 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_0 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_0 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_1 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_1 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_2 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_3 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_0, EXSTYLE_3 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_0 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_1 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_2 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_1, EXSTYLE_3 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_0 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_0 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_1 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_1 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_2 }, { __LINE__, 1, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_2 },
{ __LINE__, 1, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_3 }, { __LINE__, 1, 2, TYPE_2, STYLE_1, EXSTYLE_3, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_0, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_1, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_2, STYLE_2, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_0 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_1 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_3 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_0, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_1, EXSTYLE_3 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_0 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_0 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_1 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_1 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_2 }, { __LINE__, 0, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_2 },
{ __LINE__, 0, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_3 }, { __LINE__, 0, 1, TYPE_2, STYLE_2, EXSTYLE_3, STYLE_2, EXSTYLE_3 },
}; };
typedef struct RUDEAPP_TEST_ENTRY static HHOOK s_hShellHook = NULL;
{ static UINT s_cCreated = 0;
INT lineno; static UINT s_cDestroyed = 0;
UINT nCount; static WCHAR s_szName[] = L"ReactOS ShellHook testcase";
DWORD style;
DWORD exstyle;
BOOL bSetForeground;
BOOL bFullscreen;
BOOL bSetFullscreen;
} RUDEAPP_TEST_ENTRY;
static const RUDEAPP_TEST_ENTRY s_entries2[] =
{
/* STYLE_0 */
{ __LINE__, 0, STYLE_0, EXSTYLE_0, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_0, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_1, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_2, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_0, EXSTYLE_3, TRUE, TRUE, TRUE },
/* STYLE_1 */
{ __LINE__, 0, STYLE_1, EXSTYLE_0, FALSE, FALSE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_0, FALSE, FALSE, TRUE },
{ __LINE__, 1, STYLE_1, EXSTYLE_0, FALSE, TRUE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_0, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_0, TRUE, FALSE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_0, TRUE, FALSE, TRUE },
{ __LINE__, 1, STYLE_1, EXSTYLE_0, TRUE, TRUE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_0, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_1, FALSE, FALSE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_1, FALSE, FALSE, TRUE },
{ __LINE__, 1, STYLE_1, EXSTYLE_1, FALSE, TRUE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_1, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_1, TRUE, FALSE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_1, TRUE, FALSE, TRUE },
{ __LINE__, 1, STYLE_1, EXSTYLE_1, TRUE, TRUE, FALSE },
{ __LINE__, 1, STYLE_1, EXSTYLE_1, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_2, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_1, EXSTYLE_3, TRUE, TRUE, TRUE },
/* STYLE_2 */
{ __LINE__, 0, STYLE_2, EXSTYLE_0, FALSE, FALSE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_0, FALSE, FALSE, TRUE },
{ __LINE__, 1, STYLE_2, EXSTYLE_0, FALSE, TRUE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_0, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_0, TRUE, FALSE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_0, TRUE, FALSE, TRUE },
{ __LINE__, 1, STYLE_2, EXSTYLE_0, TRUE, TRUE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_0, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_1, FALSE, FALSE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_1, FALSE, FALSE, TRUE },
{ __LINE__, 1, STYLE_2, EXSTYLE_1, FALSE, TRUE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_1, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_1, TRUE, FALSE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_1, TRUE, FALSE, TRUE },
{ __LINE__, 1, STYLE_2, EXSTYLE_1, TRUE, TRUE, FALSE },
{ __LINE__, 1, STYLE_2, EXSTYLE_1, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_2, TRUE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, FALSE, FALSE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, FALSE, FALSE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, FALSE, TRUE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, FALSE, TRUE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, TRUE, FALSE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, TRUE, FALSE, TRUE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, TRUE, TRUE, FALSE },
{ __LINE__, 0, STYLE_2, EXSTYLE_3, TRUE, TRUE, TRUE },
};
static UINT s_uShellHookMsg = 0;
static HWND s_hwndHookViewer = NULL;
static HWND s_hwndParent = NULL; static HWND s_hwndParent = NULL;
static HWND s_hwndTarget = NULL; static HWND s_hwndTarget = NULL;
static UINT s_nWindowCreatedCount = 0; static HWND s_hwndMain = NULL;
static UINT s_nRudeAppActivated = 0;
static WCHAR s_szName[] = L"ReactOS ShellHook testcase";
static HWND static HWND
DoCreateWindow(HWND hwndParent, DWORD style, DWORD exstyle, BOOL bFullscreen = FALSE) DoCreateWindow(HWND hwndParent, DWORD style, DWORD exstyle, BOOL bFullscreen = FALSE)
{ {
INT x = CW_USEDEFAULT, y = CW_USEDEFAULT, cx = 100, cy = 100; INT x = CW_USEDEFAULT, y = CW_USEDEFAULT, cx = 300, cy = 100;
if (bFullscreen) if (bFullscreen)
{ {
x = y = 0; x = y = 0;
@ -399,9 +274,7 @@ static void DoTestEntryPart1(const TEST_ENTRY *pEntry)
s_hwndParent = NULL; s_hwndParent = NULL;
if (pEntry->bIsChild || pEntry->bHasOwner) if (pEntry->bIsChild || pEntry->bHasOwner)
{
s_hwndParent = DoCreateWindow(NULL, pEntry->owner_style, pEntry->owner_exstyle); s_hwndParent = DoCreateWindow(NULL, pEntry->owner_style, pEntry->owner_exstyle);
}
DWORD style = pEntry->style; DWORD style = pEntry->style;
DWORD exstyle = pEntry->exstyle; DWORD exstyle = pEntry->exstyle;
@ -410,123 +283,119 @@ static void DoTestEntryPart1(const TEST_ENTRY *pEntry)
else else
style &= ~WS_CHILD; style &= ~WS_CHILD;
s_nWindowCreatedCount = 0; s_cCreated = s_cDestroyed = 0;
s_hwndTarget = DoCreateWindow(s_hwndParent, style, exstyle); s_hwndTarget = DoCreateWindow(s_hwndParent, style, exstyle);
} }
static void DoTestEntryPart2(const TEST_ENTRY *pEntry) static void DoTestEntryPart2(const TEST_ENTRY *pEntry)
{ {
ok(s_nWindowCreatedCount == pEntry->nCount, DestroyWindow(s_hwndTarget);
"Line %d: s_nWindowCreatedCount expected %u but was %u\n",
pEntry->lineno, pEntry->nCount, s_nWindowCreatedCount);
PostMessageW(s_hwndTarget, WM_CLOSE, 0, 0);
s_hwndTarget = NULL; s_hwndTarget = NULL;
if (pEntry->bIsChild || pEntry->bHasOwner) if (pEntry->bIsChild || pEntry->bHasOwner)
{ {
PostMessageW(s_hwndParent, WM_CLOSE, 0, 0); DestroyWindow(s_hwndParent);
s_hwndParent = NULL; s_hwndParent = NULL;
} }
ok(s_cCreated == pEntry->cCreated,
"Line %d: cCreated expected %u but was %u\n",
pEntry->lineno, pEntry->cCreated, s_cCreated);
ok(s_cDestroyed == pEntry->cDestroyed,
"Line %d: cDestroyed expected %u but was %u\n",
pEntry->lineno, pEntry->cDestroyed, s_cDestroyed);
} }
static void DoRudeAppTest1(const RUDEAPP_TEST_ENTRY *pEntry) static
LRESULT CALLBACK
ShellProc(
INT nCode,
WPARAM wParam,
LPARAM lParam)
{ {
s_hwndParent = NULL; if (nCode < 0)
return CallNextHookEx(s_hShellHook, nCode, wParam, lParam);
DWORD style = pEntry->style; switch (nCode)
DWORD exstyle = pEntry->exstyle;
s_nRudeAppActivated = 0;
s_hwndTarget = DoCreateWindow(s_hwndParent, style, exstyle, pEntry->bFullscreen);
if (pEntry->bSetForeground)
SetForegroundWindow(s_hwndTarget);
if (pEntry->bSetFullscreen)
{ {
MoveWindow(s_hwndTarget, 0, 0, case HSHELL_WINDOWCREATED:
GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), TRUE); s_cCreated++;
break;
case HSHELL_WINDOWDESTROYED:
s_cDestroyed++;
break;
} }
return CallNextHookEx(s_hShellHook, nCode, wParam, lParam);
} }
static void DoRudeAppTest2(const RUDEAPP_TEST_ENTRY *pEntry) static INT_PTR CALLBACK
DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
ok(s_nRudeAppActivated == pEntry->nCount, #define ID_TESTSTART 1000
"Line %d: s_nRudeAppActivated expected %u but was %u\n", #define ID_TESTEND 2000
pEntry->lineno, pEntry->nCount, s_nRudeAppActivated); switch (uMsg)
{
case WM_INITDIALOG:
ok_int(s_cCreated, 0);
ok_int(s_cDestroyed, 0);
PostMessageW(hwnd, WM_COMMAND, ID_TESTSTART, 0);
return TRUE;
PostMessageW(s_hwndTarget, WM_CLOSE, 0, 0); case WM_COMMAND:
s_hwndTarget = NULL; switch (LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
DestroyWindow(hwnd);
break;
default:
{
if (ID_TESTSTART <= LOWORD(wParam) && LOWORD(wParam) < ID_TESTEND)
{
UINT_PTR i = (UINT_PTR)wParam - ID_TESTSTART;
if (i < _countof(s_entries1))
{
DoTestEntryPart1(&s_entries1[i]);
PostMessageW(hwnd, WM_COMMAND, ID_TESTEND + i, 0);
}
else
{
DestroyWindow(hwnd);
}
}
else if (ID_TESTEND <= LOWORD(wParam))
{
UINT_PTR i = (UINT_PTR)wParam - ID_TESTEND;
if (i < _countof(s_entries1))
{
DoTestEntryPart2(&s_entries1[i]);
PostMessageW(hwnd, WM_COMMAND, ID_TESTSTART + i + 1, 0);
}
}
}
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return 0;
} }
static LRESULT CALLBACK static LRESULT CALLBACK
WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
if (uMsg == s_uShellHookMsg && uMsg != 0)
{
switch (wParam)
{
case HSHELL_WINDOWCREATED:
if ((HWND)lParam != s_hwndTarget)
break;
++s_nWindowCreatedCount;
break;
case HSHELL_RUDEAPPACTIVATED:
if ((HWND)lParam != s_hwndTarget)
break;
++s_nRudeAppActivated;
break;
}
}
#define ID_IGNITION 1000
#define ID_BURNING 2000
#define ID_RUDEAPPTEST1 3000
#define ID_RUDEAPPTEST2 4000
switch (uMsg) switch (uMsg)
{ {
case WM_CREATE: case WM_CREATE:
PostMessageW(hwnd, WM_COMMAND, ID_IGNITION, 0);
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
case WM_COMMAND:
if (hwnd != s_hwndHookViewer)
break;
if (ID_IGNITION <= wParam && wParam < ID_BURNING)
{
INT i = (INT)wParam - ID_IGNITION;
DoTestEntryPart1(&s_entries1[i]);
PostMessageW(hwnd, WM_COMMAND, ID_BURNING + i, 0);
}
else if (ID_BURNING <= wParam && wParam < ID_RUDEAPPTEST1)
{
INT i = (INT)wParam - ID_BURNING;
DoTestEntryPart2(&s_entries1[i]);
++i;
if (i == (INT)_countof(s_entries1))
{
PostMessageW(hwnd, WM_COMMAND, ID_RUDEAPPTEST1, 0);
break;
}
PostMessageW(hwnd, WM_COMMAND, ID_IGNITION + i, 0);
}
else if (ID_RUDEAPPTEST1 <= wParam && wParam < ID_RUDEAPPTEST2)
{
INT i = (INT)wParam - ID_RUDEAPPTEST1;
DoRudeAppTest1(&s_entries2[i]);
PostMessageW(hwnd, WM_COMMAND, ID_RUDEAPPTEST2 + i, 0);
}
else if (ID_RUDEAPPTEST2 <= wParam)
{
INT i = (INT)wParam - ID_RUDEAPPTEST2;
DoRudeAppTest2(&s_entries2[i]);
++i;
if (i == (INT)_countof(s_entries2))
{
PostQuitMessage(0);
break;
}
PostMessageW(hwnd, WM_COMMAND, ID_RUDEAPPTEST1 + i, 0);
}
break; break;
default: default:
return DefWindowProcW(hwnd, uMsg, wParam, lParam); return DefWindowProcW(hwnd, uMsg, wParam, lParam);
@ -536,14 +405,11 @@ WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
START_TEST(ShellHook) START_TEST(ShellHook)
{ {
WNDCLASSW wc; WNDCLASSW wc = { CS_HREDRAW | CS_VREDRAW, WindowProc };
ZeroMemory(&wc, sizeof(wc));
wc.lpfnWndProc = WindowProc;
wc.hInstance = GetModuleHandleW(NULL); wc.hInstance = GetModuleHandleW(NULL);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1); wc.hbrBackground = (HBRUSH)(INT_PTR)(COLOR_3DFACE + 1);
wc.lpszClassName = s_szName; wc.lpszClassName = s_szName;
if (!RegisterClassW(&wc)) if (!RegisterClassW(&wc))
{ {
@ -551,24 +417,33 @@ START_TEST(ShellHook)
return; return;
} }
s_hwndHookViewer = DoCreateWindow(NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0); s_hShellHook = SetWindowsHookEx(WH_SHELL, ShellProc, NULL, GetCurrentThreadId());
if (s_hwndHookViewer == NULL) if (!s_hShellHook)
{ {
skip("CreateWindowExW failed\n"); skip("!s_hShellHook\n");
return; return;
} }
s_uShellHookMsg = RegisterWindowMessageW(L"SHELLHOOK"); s_hwndMain = CreateDialogW(GetModuleHandleW(NULL), L"ShellHook", NULL, DialogProc);
RegisterShellHookWindow(s_hwndHookViewer); if (!s_hShellHook)
{
skip("!s_hwndMain\n");
UnhookWindowsHookEx(s_hShellHook);
return;
}
ShowWindow(s_hwndMain, SW_SHOWNOACTIVATE);
UpdateWindow(s_hwndMain);
MSG msg; MSG msg;
while (GetMessageW(&msg, NULL, 0, 0)) while (GetMessageW(&msg, NULL, 0, 0))
{ {
if (IsDialogMessageW(s_hwndMain, &msg))
continue;
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessageW(&msg); DispatchMessageW(&msg);
} }
DeregisterShellHookWindow(s_hwndHookViewer); UnhookWindowsHookEx(s_hShellHook);
DestroyWindow(s_hwndHookViewer);
s_hwndHookViewer = NULL;
} }

View file

@ -16,3 +16,10 @@ FONT 9, "Tahoma"
CONTROL "edt1", edt1, "EDIT", ES_AUTOHSCROLL | ES_MULTILINE | WS_BORDER | WS_TABSTOP, 19, 18, 80, 14 CONTROL "edt1", edt1, "EDIT", ES_AUTOHSCROLL | ES_MULTILINE | WS_BORDER | WS_TABSTOP, 19, 18, 80, 14
LTEXT "stc1", stc1, 24, 49, 72, 21 LTEXT "stc1", stc1, 24, 49, 72, 21
} }
ShellHook DIALOG 0, 0, 200, 84
CAPTION "ReactOS ShellHook test dialog"
STYLE DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
FONT 9, "Tahoma"
{
}