mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[rosautotest]
-Implement closing any dialog that shows and stays visible for some time. This way rosautotest can now continue if a test application crashes or asserts. svn path=/trunk/; revision=50381
This commit is contained in:
parent
4fa818b9d8
commit
ff9649d7d7
5 changed files with 117 additions and 0 deletions
97
rostests/rosautotest/CDialogSurpass.cpp
Normal file
97
rostests/rosautotest/CDialogSurpass.cpp
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Automatic Testing Utility
|
||||
* LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation
|
||||
* PURPOSE: Class for managing all the configuration parameters
|
||||
* COPYRIGHT: Copyright 2011
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
BOOL CALLBACK PrintWindow(HWND hwnd, LPARAM lParam)
|
||||
{
|
||||
CHAR WindowTitle[100];
|
||||
int lenght;
|
||||
|
||||
lenght = GetWindowTextA(hwnd, WindowTitle, 100);
|
||||
if(lenght == 0)
|
||||
return TRUE;
|
||||
|
||||
StringOut( string(WindowTitle) + "\n" );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void CALLBACK WinEventProc(HWINEVENTHOOK hWinEventHook,
|
||||
DWORD event,
|
||||
HWND hwnd,
|
||||
LONG idObject,
|
||||
LONG idChild,
|
||||
DWORD dwEventThread,
|
||||
DWORD dwmsEventTime)
|
||||
{
|
||||
/* make sure we got the correct event */
|
||||
if(event == EVENT_SYSTEM_DIALOGSTART)
|
||||
{
|
||||
/* wait for some time to make sure that the dialog is hung */
|
||||
Sleep(30 * 1000);
|
||||
|
||||
/* Check if it is still open */
|
||||
if(IsWindow(hwnd))
|
||||
{
|
||||
/* Print an error message */
|
||||
StringOut("Closing following dialog box:\n");
|
||||
PrintWindow(hwnd, NULL);
|
||||
EnumChildWindows(hwnd, PrintWindow, NULL);
|
||||
|
||||
/* Close the dialog */
|
||||
SendMessage(hwnd, WM_CLOSE, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DWORD WINAPI DialogSurpassThread(LPVOID lpThreadParameter)
|
||||
{
|
||||
MSG dummy;
|
||||
|
||||
/* Install event notifications */
|
||||
SetWinEventHook(EVENT_SYSTEM_DIALOGSTART,
|
||||
EVENT_SYSTEM_DIALOGSTART,
|
||||
NULL,
|
||||
WinEventProc,
|
||||
0,
|
||||
0,
|
||||
WINEVENT_OUTOFCONTEXT);
|
||||
|
||||
while(GetMessage(&dummy, 0,0,0))
|
||||
{
|
||||
/* There is no need to dispatch messages here */
|
||||
/* Actually this block will never be executed */
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
CDialogSurpass::CDialogSurpass()
|
||||
{
|
||||
/* Creat the trhead that will receive notifications */
|
||||
hThread = CreateThread(NULL,
|
||||
0,
|
||||
DialogSurpassThread,
|
||||
NULL,
|
||||
0,
|
||||
&ThreadID);
|
||||
}
|
||||
|
||||
CDialogSurpass::~CDialogSurpass()
|
||||
{
|
||||
/* Notify the thread to close */
|
||||
PostThreadMessage(ThreadID, WM_QUIT, 0, 0);
|
||||
|
||||
/* Wait for it close */
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
|
||||
/* Now close its handle*/
|
||||
CloseHandle(hThread);
|
||||
}
|
17
rostests/rosautotest/CDialogSurpass.h
Normal file
17
rostests/rosautotest/CDialogSurpass.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Automatic Testing Utility
|
||||
* LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation
|
||||
* PURPOSE: Class for managing all the configuration parameters
|
||||
* COPYRIGHT: Copyright 2011
|
||||
*/
|
||||
|
||||
class CDialogSurpass
|
||||
{
|
||||
private:
|
||||
|
||||
DWORD ThreadID;
|
||||
HANDLE hThread;
|
||||
public:
|
||||
CDialogSurpass();
|
||||
~CDialogSurpass();
|
||||
};
|
|
@ -48,6 +48,7 @@ wmain(int argc, wchar_t* argv[])
|
|||
{
|
||||
CWineTest WineTest;
|
||||
int ReturnValue = 1;
|
||||
CDialogSurpass s;
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
@ -20,6 +20,7 @@ using namespace std;
|
|||
/* Class includes */
|
||||
#include "auto_array_ptr.h"
|
||||
#include "CConfiguration.h"
|
||||
#include "CDialogSurpass.h"
|
||||
#include "CFatalException.h"
|
||||
#include "CInvalidParameterException.h"
|
||||
#include "CProcess.h"
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
<library>user32</library>
|
||||
<library>wininet</library>
|
||||
<file>CConfiguration.cpp</file>
|
||||
<file>CDialogSurpass.cpp</file>
|
||||
<file>CFatalException.cpp</file>
|
||||
<file>CInvalidParameterException.cpp</file>
|
||||
<file>CJournaledTestList.cpp</file>
|
||||
|
|
Loading…
Reference in a new issue