2011-09-07 14:05:58 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: ReactOS api tests
|
|
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
|
|
|
* PURPOSE: Test for SetActiveWindow
|
|
|
|
* PROGRAMMERS: Giannis Adamopoulos
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <wine/test.h>
|
|
|
|
#include <windows.h>
|
2011-09-23 12:05:40 +00:00
|
|
|
#include "helper.h"
|
2011-09-24 11:55:19 +00:00
|
|
|
#include <undocuser.h>
|
2011-09-07 23:08:14 +00:00
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
MSG_ENTRY message_cache[100];
|
|
|
|
HWND hWnd1, hWnd2, hWnd3, hWnd4;
|
|
|
|
|
2011-09-24 11:55:19 +00:00
|
|
|
/* FIXME: test for HWND_TOP, etc...*/
|
2011-09-23 12:05:40 +00:00
|
|
|
static int get_iwnd(HWND hWnd)
|
2011-09-08 15:53:38 +00:00
|
|
|
{
|
2011-09-23 12:05:40 +00:00
|
|
|
if(hWnd == hWnd1) return 1;
|
|
|
|
else if(hWnd == hWnd2) return 2;
|
|
|
|
else if(hWnd == hWnd3) return 3;
|
|
|
|
else if(hWnd == hWnd4) return 4;
|
|
|
|
else return 0;
|
2011-09-08 15:53:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
LRESULT CALLBACK OwnerTestProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
|
|
{
|
2011-09-24 11:55:19 +00:00
|
|
|
int iwnd = get_iwnd(hWnd);
|
|
|
|
|
|
|
|
if(message > WM_USER || !iwnd || IsDWmMsg(message) || IseKeyMsg(message))
|
|
|
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
|
|
|
|
|
|
switch(message)
|
2011-09-08 15:53:38 +00:00
|
|
|
{
|
2011-09-24 11:55:19 +00:00
|
|
|
case WM_IME_SETCONTEXT:
|
|
|
|
case WM_IME_NOTIFY :
|
|
|
|
case WM_GETICON :
|
|
|
|
case WM_GETTEXT:
|
|
|
|
break;
|
|
|
|
case WM_WINDOWPOSCHANGING:
|
|
|
|
case WM_WINDOWPOSCHANGED:
|
|
|
|
{
|
|
|
|
WINDOWPOS* pwp = (WINDOWPOS*)lParam;
|
|
|
|
ok(wParam==0,"expected wParam=0\n");
|
|
|
|
record_message(iwnd, message, SENT, get_iwnd(pwp->hwndInsertAfter), pwp->flags);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
record_message(iwnd, message, SENT, 0,0);
|
2011-09-08 15:53:38 +00:00
|
|
|
}
|
|
|
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
|
|
}
|
|
|
|
|
2011-09-24 11:55:19 +00:00
|
|
|
static void FlushMessages()
|
|
|
|
{
|
|
|
|
MSG msg;
|
|
|
|
|
|
|
|
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
|
|
|
|
{
|
|
|
|
int iwnd = get_iwnd(msg.hwnd);
|
|
|
|
if(!(msg.message > WM_USER || !iwnd || IsDWmMsg(msg.message) || IseKeyMsg(msg.message)))
|
|
|
|
record_message(iwnd, msg.message, POST,0,0);
|
|
|
|
DispatchMessageA( &msg );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
static void create_test_windows()
|
|
|
|
{
|
2011-09-23 12:05:40 +00:00
|
|
|
RegisterSimpleClass(OwnerTestProc, L"ownertest");
|
2011-09-08 15:53:38 +00:00
|
|
|
hWnd1 = CreateWindowW(L"ownertest", L"ownertest", WS_OVERLAPPEDWINDOW,
|
2011-09-07 23:08:14 +00:00
|
|
|
20, 20, 300, 300, NULL, NULL, 0, NULL);
|
2011-09-07 14:05:58 +00:00
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
hWnd2 = CreateWindowW(L"ownertest", L"ownertest", WS_OVERLAPPEDWINDOW,
|
2011-09-07 23:08:14 +00:00
|
|
|
20, 350, 300, 300, hWnd1, NULL, 0, NULL);
|
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
hWnd3 = CreateWindowW(L"ownertest", L"ownertest", WS_OVERLAPPEDWINDOW,
|
2011-09-07 14:05:58 +00:00
|
|
|
200, 200, 300, 300, NULL, NULL, 0, NULL);
|
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
hWnd4 = CreateWindowW(L"ownertest", L"ownertest", WS_OVERLAPPEDWINDOW,
|
2011-09-07 23:08:14 +00:00
|
|
|
250, 250, 200, 200, hWnd1, NULL, 0, NULL);
|
2011-09-08 15:53:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* the actual test begins here */
|
|
|
|
|
|
|
|
MSG_ENTRY Activate1_chain[]={{4,WM_NCACTIVATE},
|
|
|
|
{4,WM_ACTIVATE},
|
2011-09-24 11:55:19 +00:00
|
|
|
{4,WM_WINDOWPOSCHANGING,SENT,0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE},
|
|
|
|
{2,WM_WINDOWPOSCHANGING,SENT,4,SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE},
|
|
|
|
{1,WM_WINDOWPOSCHANGING,SENT,2,SWP_NOMOVE | SWP_NOSIZE},
|
2011-09-08 15:53:38 +00:00
|
|
|
{1,WM_NCACTIVATE},
|
|
|
|
{1,WM_ACTIVATE},
|
|
|
|
{4,WM_KILLFOCUS},
|
|
|
|
{1,WM_SETFOCUS},
|
|
|
|
{0,0}};
|
|
|
|
|
|
|
|
MSG_ENTRY Activate2_chain[]={{1,WM_NCACTIVATE},
|
|
|
|
{1,WM_ACTIVATE},
|
2011-09-24 11:55:19 +00:00
|
|
|
{3,WM_WINDOWPOSCHANGING,SENT, 0, SWP_NOMOVE | SWP_NOSIZE},
|
|
|
|
{3,WM_WINDOWPOSCHANGED ,SENT, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE},
|
2011-09-08 15:53:38 +00:00
|
|
|
{3,WM_NCACTIVATE},
|
|
|
|
{3,WM_ACTIVATE},
|
|
|
|
{1,WM_KILLFOCUS},
|
|
|
|
{3,WM_SETFOCUS},
|
|
|
|
{0,0}};
|
|
|
|
|
|
|
|
MSG_ENTRY Activate3_chain[]={{3,WM_NCACTIVATE},
|
|
|
|
{3,WM_ACTIVATE},
|
2011-09-24 11:55:19 +00:00
|
|
|
{2,WM_WINDOWPOSCHANGING, SENT,0, SWP_NOMOVE | SWP_NOSIZE },
|
|
|
|
{4,WM_WINDOWPOSCHANGING, SENT,2, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE},
|
|
|
|
{1,WM_WINDOWPOSCHANGING, SENT,4, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE},
|
|
|
|
{2,WM_WINDOWPOSCHANGED, SENT,0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOCLIENTMOVE |SWP_NOCLIENTSIZE },
|
|
|
|
{4,WM_WINDOWPOSCHANGED, SENT,2, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE |SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE},
|
|
|
|
{1,WM_WINDOWPOSCHANGED, SENT,4, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE |SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE},
|
2011-09-08 15:53:38 +00:00
|
|
|
{2,WM_NCACTIVATE},
|
|
|
|
{2,WM_ACTIVATE},
|
|
|
|
{3,WM_KILLFOCUS},
|
|
|
|
{2,WM_SETFOCUS},
|
|
|
|
{0,0}};
|
|
|
|
|
2011-09-24 11:55:19 +00:00
|
|
|
MSG_ENTRY Activate4_chain[]={{2,WM_NCACTIVATE, },
|
2011-09-08 15:53:38 +00:00
|
|
|
{2,WM_ACTIVATE},
|
2011-09-24 11:55:19 +00:00
|
|
|
{2,WM_WINDOWPOSCHANGING, SENT ,0 ,SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE},
|
|
|
|
{4,WM_WINDOWPOSCHANGING, SENT, 2, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE} ,
|
|
|
|
{1,WM_WINDOWPOSCHANGING, SENT, 4, SWP_NOMOVE | SWP_NOSIZE},
|
2011-09-08 15:53:38 +00:00
|
|
|
{1,WM_NCACTIVATE},
|
|
|
|
{1,WM_ACTIVATE},
|
|
|
|
{2,WM_KILLFOCUS},
|
|
|
|
{1,WM_SETFOCUS},
|
|
|
|
{0,0}};
|
|
|
|
|
|
|
|
void Test_SetActiveWindow()
|
|
|
|
{
|
2011-09-23 12:05:40 +00:00
|
|
|
SetCursorPos(0,0);
|
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
create_test_windows();
|
|
|
|
|
2011-09-07 14:05:58 +00:00
|
|
|
ShowWindow(hWnd1, SW_SHOW);
|
|
|
|
UpdateWindow(hWnd1);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd4,hWnd2);
|
|
|
|
EXPECT_NEXT(hWnd1,hWnd3);
|
|
|
|
|
2011-09-07 14:05:58 +00:00
|
|
|
ShowWindow(hWnd2, SW_SHOW);
|
|
|
|
UpdateWindow(hWnd2);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd2,hWnd4);
|
|
|
|
EXPECT_NEXT(hWnd4,hWnd1);
|
|
|
|
|
|
|
|
ShowWindow(hWnd3, SW_SHOW);
|
|
|
|
UpdateWindow(hWnd3);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd3,hWnd2);
|
|
|
|
EXPECT_NEXT(hWnd2,hWnd4);
|
|
|
|
EXPECT_NEXT(hWnd4,hWnd1);
|
2011-09-07 14:05:58 +00:00
|
|
|
|
2011-09-07 23:08:14 +00:00
|
|
|
ShowWindow(hWnd4, SW_SHOW);
|
|
|
|
UpdateWindow(hWnd4);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd4,hWnd2);
|
|
|
|
EXPECT_NEXT(hWnd2,hWnd1);
|
|
|
|
EXPECT_NEXT(hWnd1,hWnd3);
|
|
|
|
EXPECT_ACTIVE(hWnd4);
|
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
empty_message_cache();
|
2011-09-07 23:08:14 +00:00
|
|
|
|
2011-09-08 15:53:38 +00:00
|
|
|
SetActiveWindow(hWnd1);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd4,hWnd2);
|
|
|
|
EXPECT_NEXT(hWnd2,hWnd1);
|
|
|
|
EXPECT_NEXT(hWnd1,hWnd3);
|
|
|
|
EXPECT_ACTIVE(hWnd1);
|
2011-09-23 12:05:40 +00:00
|
|
|
COMPARE_CACHE(Activate1_chain);
|
2011-09-07 23:08:14 +00:00
|
|
|
|
|
|
|
SetActiveWindow(hWnd3);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd3,hWnd4);
|
|
|
|
EXPECT_NEXT(hWnd4,hWnd2);
|
|
|
|
EXPECT_NEXT(hWnd2,hWnd1);
|
|
|
|
EXPECT_ACTIVE(hWnd3);
|
2011-09-23 12:05:40 +00:00
|
|
|
COMPARE_CACHE(Activate2_chain);
|
2011-09-07 14:05:58 +00:00
|
|
|
|
2011-09-07 23:08:14 +00:00
|
|
|
SetActiveWindow(hWnd2);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-07 23:08:14 +00:00
|
|
|
EXPECT_NEXT(hWnd2,hWnd4);
|
|
|
|
EXPECT_NEXT(hWnd4,hWnd1);
|
|
|
|
EXPECT_NEXT(hWnd1,hWnd3);
|
|
|
|
EXPECT_ACTIVE(hWnd2);
|
2011-09-23 12:05:40 +00:00
|
|
|
COMPARE_CACHE(Activate3_chain);
|
2011-09-08 11:31:31 +00:00
|
|
|
|
|
|
|
SetActiveWindow(hWnd1);
|
2011-09-24 11:55:19 +00:00
|
|
|
FlushMessages();
|
2011-09-08 11:31:31 +00:00
|
|
|
EXPECT_NEXT(hWnd2,hWnd4);
|
|
|
|
EXPECT_NEXT(hWnd4,hWnd1);
|
|
|
|
EXPECT_NEXT(hWnd1,hWnd3);
|
|
|
|
EXPECT_ACTIVE(hWnd1);
|
2011-09-23 12:05:40 +00:00
|
|
|
COMPARE_CACHE(Activate4_chain);
|
2011-09-07 14:05:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
START_TEST(SetActiveWindow)
|
|
|
|
{
|
|
|
|
Test_SetActiveWindow();
|
|
|
|
}
|