diff --git a/rostests/rosautotest/CConfiguration.cpp b/rostests/rosautotest/CConfiguration.cpp index 2eb3799a8d3..96d3e851265 100644 --- a/rostests/rosautotest/CConfiguration.cpp +++ b/rostests/rosautotest/CConfiguration.cpp @@ -17,17 +17,22 @@ typedef void (WINAPI *GETSYSINFO)(LPSYSTEM_INFO); */ CConfiguration::CConfiguration() : m_CrashRecovery(false), + m_IsInteractive(false), m_PrintToConsole(true), m_Shutdown(false), m_Submit(false) { WCHAR WindowsDirectory[MAX_PATH]; + WCHAR Interactive[32]; /* Check if we are running under ReactOS from the SystemRoot directory */ if(!GetWindowsDirectoryW(WindowsDirectory, MAX_PATH)) FATAL("GetWindowsDirectoryW failed"); m_IsReactOS = !_wcsnicmp(&WindowsDirectory[3], L"reactos", 7); + + if(GetEnvironmentVariableW(L"WINETEST_INTERACTIVE", Interactive, _countof(Interactive))) + m_IsInteractive = _wtoi(Interactive); } /** diff --git a/rostests/rosautotest/CConfiguration.h b/rostests/rosautotest/CConfiguration.h index a5f5ea29620..be94bc73413 100644 --- a/rostests/rosautotest/CConfiguration.h +++ b/rostests/rosautotest/CConfiguration.h @@ -9,6 +9,7 @@ class CConfiguration { private: bool m_CrashRecovery; + bool m_IsInteractive; bool m_IsReactOS; bool m_PrintToConsole; bool m_Shutdown; @@ -30,6 +31,7 @@ public: bool DoPrint() const { return m_PrintToConsole; } bool DoShutdown() const { return m_Shutdown; } bool DoSubmit() const { return m_Submit; } + bool IsInteractive() const { return m_IsInteractive; } bool IsReactOS() const { return m_IsReactOS; } const string& GetComment() const { return m_Comment; } const wstring& GetModule() const { return m_Module; } diff --git a/rostests/rosautotest/CWineTest.cpp b/rostests/rosautotest/CWineTest.cpp index fd949db68bf..0432ae23de1 100644 --- a/rostests/rosautotest/CWineTest.cpp +++ b/rostests/rosautotest/CWineTest.cpp @@ -248,9 +248,14 @@ CWineTest::GetNextTestInfo() } catch(CTestException& e) { - delete[] m_ListBuffer; + stringstream ss; + + ss << "An exception occurred trying to list tests for: " << UnicodeToAscii(m_CurrentFile) << endl; + StringOut(ss.str()); StringOut(e.GetMessage()); + StringOut("\n"); m_CurrentFile.clear(); + delete[] m_ListBuffer; } } @@ -327,6 +332,7 @@ CWineTest::Run() auto_ptr TestList; auto_ptr WebService; CTestInfo* TestInfo; + DWORD ErrorMode; /* The virtual test list is of course faster, so it should be preferred over the journaled one. @@ -349,6 +355,10 @@ CWineTest::Run() if(Configuration.DoSubmit()) WebService.reset(new CWebService()); + /* Disable error dialogs if we're running in non-interactive mode */ + if(!Configuration.IsInteractive()) + ErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX); + /* Get information for each test to run */ while((TestInfo = TestList->GetNextTestInfo()) != 0) { @@ -361,4 +371,8 @@ CWineTest::Run() StringOut("\n\n"); } + + /* Restore the original error mode */ + if(!Configuration.IsInteractive()) + SetErrorMode(ErrorMode); }