Ignore:
Timestamp:
07/05/11 13:04:29 (13 years ago)
Author:
sherbold
Message:

+ added test verdict pass/fail, including error message and the number of the message in the session at which the verdict was set
+ added result file; location is a parameter when calling the application
+ added test arbiter: if the target of a message cannot be determined correctly, the session fails

Location:
trunk/MFCtooling/replay
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/MFCtooling/replay/LogParser.cpp

    r104 r105  
    66#include "WindowFinder.h" 
    77 
    8 LogParser::LogParser(_TCHAR* runCommand, unsigned int startupTime, bool useDefaultDelay) : runCommand(runCommand), startupTime(startupTime), useDefaultDelay(useDefaultDelay) 
     8LogParser::LogParser(_TCHAR* runCommand, unsigned int startupTime, TestResults * results, bool useDefaultDelay) : runCommand(runCommand), startupTime(startupTime), results(results), useDefaultDelay(useDefaultDelay) 
    99{ 
    1010         
     
    2828        std::wstring localName(pwchLocalName); 
    2929        if( localName.compare(L"session")==0 ) { 
    30                 std::wstring sessionId = GetAttributeValue(pAttributes, L"id", L""); 
     30                sessionId = GetAttributeValue(pAttributes, L"id", L""); 
    3131                std::wcout << L"================================================" << std::endl; 
    3232                std::wcout << L"starting session " << sessionId << std::endl; 
     33                result.sessionPass = true; 
     34                result.errorMessage = L""; 
     35                result.msgNumber = 0; 
     36                currentMessage = 0; 
    3337                std::wcout << L"executing " << runCommand << std::endl; 
    3438                PROCESS_INFORMATION pi; 
     
    9094        if( localName.compare(L"session")==0 ) { 
    9195                std::wcout << L"session completed" << std::endl; 
     96                results->addResult(sessionId, result); 
    9297                BOOL retVal = TerminateProcess(hProcess, 0); 
    9398                if( retVal!=0 ) { 
     
    97102        }  
    98103        else if( localName.compare(L"msg")==0 ) { 
     104                currentMessage++; 
    99105                WindowFinder finder; 
    100106                HWND hwnd = finder.find(currentWindow); 
     107                // check if window was found, if not test has failed 
     108                if( result.sessionPass ) { 
     109                        result.sessionPass = false; 
     110                        result.errorMessage = finder.getErrorMessage(); 
     111                        result.msgNumber = currentMessage; 
     112                } 
     113 
    101114                sendMessage(hwnd); 
    102115                deleteWindowData(currentWindow); 
  • trunk/MFCtooling/replay/LogParser.h

    r104 r105  
    55 
    66#include "WindowData.h" 
     7#include "TestResults.h" 
    78 
    89class LogParser : public SAXContentHandlerImpl 
     
    2627        HANDLE hProcess; 
    2728 
     29        std::wstring sessionId; 
     30        RESULT result; 
     31        unsigned int currentMessage; 
     32 
     33        TestResults * results; 
     34 
    2835public: 
    29         LogParser(_TCHAR * runCommand, unsigned int startupChar, bool useDefaultDelay = false); 
     36        LogParser(_TCHAR * runCommand, unsigned int startupChar, TestResults * results, bool useDefaultDelay = false); 
    3037        ~LogParser(void); 
    3138 
  • trunk/MFCtooling/replay/WindowFinder.cpp

    r32 r105  
    2727        evalPopup = false; 
    2828        parentHandles = NULL; 
     29        success = true; 
    2930} 
    3031 
     
    6566                if( maxScore==0 ) { 
    6667                        std::wcerr << L"Warning: Score is zero." << std::endl; 
     68                        errorMessage = L"score zero"; 
     69                        success = false; 
    6770                } 
    6871                result = find(winData->child); 
     
    7073                if( parentHandles->size()==0 ) { 
    7174                        std::wcerr << L"Error: handle not found." << std::endl; 
     75                        errorMessage = L"handle not found"; 
    7276                        result = NULL; 
     77                        success = false; 
    7378                } 
    7479                else { 
    7580                        if( parentHandles->size()!=1 ) { 
    7681                                std::wcerr << L"Warning: more than one fitting window found." << std::endl; 
     82                                errorMessage = L"multiple matches"; 
     83                                success = false; 
    7784                        } 
    7885                        if( maxScore==0 ) { 
    7986                                std::wcerr << L"Warning: Score is zero." << std::endl; 
     87                                errorMessage = L"score zero"; 
     88                                success = false; 
    8089                        } 
    8190                        result = (*parentHandles)[0]; 
     
    125134        return evalPopup; 
    126135} 
     136 
     137bool WindowFinder::successfull() { 
     138        return success; 
     139} 
     140 
     141std::wstring WindowFinder::getErrorMessage() { 
     142        return errorMessage; 
     143} 
  • trunk/MFCtooling/replay/WindowFinder.h

    r32 r105  
    2020        bool evalPopup; 
    2121 
     22        bool success; 
     23 
     24        std::wstring errorMessage; 
     25 
    2226public: 
    2327        WindowFinder(void); 
     
    3034        bool isCurrentPopup(); 
    3135 
     36        bool successfull(); 
     37 
     38        std::wstring getErrorMessage(); 
     39 
    3240}; 
  • trunk/MFCtooling/replay/replay.cpp

    r104 r105  
    1212        if (argc<3)  
    1313        { 
    14                 std::wcout << "Usage: " << argv[0] << "<replayfile> <applicationundertest>" << std::endl; 
     14                std::wcout << "Usage: " << argv[0] << "<replayfile> <applicationundertest> [<resultfile>]" << std::endl; 
    1515                return 0; 
    1616        } 
    17  
    18         // execute application to be replayed 
    19         /*if (argc>2) { 
    20                 std::wcout << "executing " << argv[2] << std::endl; 
    21                 PROCESS_INFORMATION pi; 
    22                 STARTUPINFO si; 
    23                 ZeroMemory(&pi, sizeof(pi)); 
    24                 ZeroMemory(&si, sizeof(si)); 
    25                 CreateProcess(NULL, argv[2], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 
    26                 Sleep(10000); 
    27         }*/ 
    28  
    2917 
    3018        // initialize COM library for the current thread 
     
    4129 
    4230        if( !FAILED(hr) ) { 
     31                TestResults results(argv[1]); 
    4332                std::wcout << L"replaying sessions in " << argv[1] << std::endl; 
    44                 LogParser * parser = new LogParser(argv[2], 5000, true); 
     33                LogParser * parser = new LogParser(argv[2], 5000, &results, true); 
    4534                pXMLReader->putContentHandler(parser); 
    4635                hr = pXMLReader->parseURL(argv[1]); 
     
    4837                std::wcout << L"================================================" << std::endl; 
    4938                std::wcout << L"replay completed" << std::endl; 
     39                if( argc>=4 ) { 
     40                        results.write(argv[3]); 
     41                        std::wcout << L"results written to " << argv[3] << std::endl; 
     42                } 
    5043        } 
    5144 
  • trunk/MFCtooling/replay/replay.vcproj

    r32 r105  
    22<VisualStudioProject 
    33        ProjectType="Visual C++" 
    4         Version="9.00" 
     4        Version="9,00" 
    55        Name="replay" 
    66        ProjectGUID="{6CDC762E-2D22-4B0F-B6CD-7F8AB432ED42}" 
     
    202202                        </File> 
    203203                        <File 
     204                                RelativePath=".\TestResults.cpp" 
     205                                > 
     206                        </File> 
     207                        <File 
    204208                                RelativePath=".\WindowData.cpp" 
    205209                                > 
     
    232236                        </File> 
    233237                        <File 
     238                                RelativePath=".\TestResults.h" 
     239                                > 
     240                        </File> 
     241                        <File 
    234242                                RelativePath=".\WindowData.h" 
    235243                                > 
Note: See TracChangeset for help on using the changeset viewer.