From 91a502b4d936f2c5c5994aa4b8865c19985f89cb Mon Sep 17 00:00:00 2001 From: "locka%iol.ie" Date: Sun, 21 Mar 1999 19:51:19 +0000 Subject: [PATCH] Added ability for tests to output messages git-svn-id: svn://10.0.0.236/trunk@24623 18797224-902f-48f8-a5cc-f745e15eee43 --- .../ActiveX/tests/cbrowse/CBrowseDlg.cpp | 174 ++++++++++++++---- .../embed/ActiveX/tests/cbrowse/CBrowseDlg.h | 8 + .../embed/ActiveX/tests/cbrowse/PickerDlg.cpp | 6 + .../embed/ActiveX/tests/cbrowse/PickerDlg.h | 1 + .../embed/ActiveX/tests/cbrowse/Tests.cpp | 106 ++++++++++- .../embed/ActiveX/tests/cbrowse/Tests.h | 5 + .../embed/ActiveX/tests/cbrowse/cbrowse.dsp | 20 +- .../embed/ActiveX/tests/cbrowse/cbrowse.rc | 24 +-- 8 files changed, 276 insertions(+), 68 deletions(-) diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.cpp b/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.cpp index b94cc4d8c61..80fd3cd04fb 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.cpp +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.cpp @@ -35,6 +35,8 @@ TCHAR *aURLs[] = _T("http://www.microsoft.com") }; +CBrowseDlg *CBrowseDlg::m_pBrowseDlg = NULL; + ///////////////////////////////////////////////////////////////////////////// // CBrowseDlg dialog @@ -51,7 +53,7 @@ CBrowseDlg::CBrowseDlg(CWnd* pParent /*=NULL*/) // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); - + m_pBrowseDlg = this; m_pControlSite = NULL; m_clsid = CLSID_NULL; } @@ -77,6 +79,7 @@ BEGIN_MESSAGE_MAP(CBrowseDlg, CDialog) ON_BN_CLICKED(IDC_BACKWARD, OnBackward) ON_BN_CLICKED(IDC_FORWARD, OnForward) ON_NOTIFY(TVN_SELCHANGED, IDC_TESTLIST, OnSelchangedTestlist) + ON_NOTIFY(NM_DBLCLK, IDC_TESTLIST, OnDblclkTestlist) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -251,47 +254,142 @@ void CBrowseDlg::OnForward() } } +void CBrowseDlg::RunTestSet(TestSet *pTestSet) +{ + ASSERT(pTestSet); + if (pTestSet == NULL) + { + return; + } + + for (int j = 0; j < pTestSet->nTests; j++) + { + Test *pTest = &pTestSet->aTests[j]; + RunTest(pTest); + } +} + + +TestResult CBrowseDlg::RunTest(Test *pTest) +{ + ASSERT(pTest); + TestResult nResult = trFailed; + + CString szMsg; + szMsg.Format(_T("Running test \"%s\""), pTest->szName); + m_lbMessages.AddString(szMsg); + + if (pTest && pTest->pfn) + { + BrowserInfo cInfo; + + cInfo.clsid = m_clsid; + cInfo.pControlSite = m_pControlSite; + cInfo.pIUnknown = NULL; + cInfo.pfnOutputString = CBrowseDlg::OutputString; + if (cInfo.pControlSite) + { + cInfo.pControlSite->GetControlUnknown(&cInfo.pIUnknown); + } + nResult = pTest->pfn(&cInfo); + pTest->nLastResult = nResult; + if (cInfo.pIUnknown) + { + cInfo.pIUnknown->Release(); + } + } + + switch (nResult) + { + case trFailed: + m_lbMessages.AddString(_T("Test failed")); + break; + case trPassed: + m_lbMessages.AddString(_T("Test passed")); + break; + case trPartial: + m_lbMessages.AddString(_T("Test partial")); + break; + default: + break; + } + + return nResult; +} + +void __cdecl CBrowseDlg::OutputString(const TCHAR *szMessage, ...) +{ + if (m_pBrowseDlg == NULL) + { + return; + } + + TCHAR szBuffer[256]; + + va_list cArgs; + va_start(cArgs, szMessage); + _vstprintf(szBuffer, szMessage, cArgs); + va_end(cArgs); + + CString szOutput; + szOutput.Format(_T(" Test: %s"), szBuffer); + + m_pBrowseDlg->m_lbMessages.AddString(szOutput); +} + +void CBrowseDlg::UpdateTest(HTREEITEM hItem, TestResult nResult) +{ + if (nResult == trPassed) + { + m_tcTests.SetItemImage(hItem, IL_TESTPASSED, IL_TESTPASSED); + } + else if (nResult == trFailed) + { + m_tcTests.SetItemImage(hItem, IL_TESTFAILED, IL_TESTFAILED); + } + else if (nResult == trPartial) + { + // TODO + } +} + +void CBrowseDlg::UpdateTestSet(HTREEITEM hItem) +{ + // Examine the results + HTREEITEM hTest = m_tcTests.GetNextItem(hItem, TVGN_CHILD); + while (hTest) + { + Test *pTest = (Test *) m_tcTests.GetItemData(hTest); + UpdateTest(hTest, pTest->nLastResult); + hTest = m_tcTests.GetNextItem(hTest, TVGN_NEXT); + } +} + void CBrowseDlg::OnRuntest() { HTREEITEM hItem = m_tcTests.GetNextItem(NULL, TVGN_FIRSTVISIBLE); while (hItem) { - UINT nState; - - nState = m_tcTests.GetItemState(hItem, TVIS_SELECTED); - if (!m_tcTests.ItemHasChildren(hItem) && nState & TVIS_SELECTED) + UINT nState = m_tcTests.GetItemState(hItem, TVIS_SELECTED); + if (!(nState & TVIS_SELECTED)) { - Test *pTest = (Test *) m_tcTests.GetItemData(hItem); - TestResult nResult = trFailed; - if (pTest && pTest->pfn) - { - BrowserInfo cInfo; + hItem = m_tcTests.GetNextItem(hItem, TVGN_NEXTVISIBLE); + continue; + } - cInfo.clsid = m_clsid; - cInfo.pControlSite = m_pControlSite; - cInfo.pIUnknown = NULL; - if (cInfo.pControlSite) - { - cInfo.pControlSite->GetControlUnknown(&cInfo.pIUnknown); - } - nResult = pTest->pfn(&cInfo); - if (cInfo.pIUnknown) - { - cInfo.pIUnknown->Release(); - } - } - if (nResult == trPassed) - { - m_tcTests.SetItemImage(hItem, IL_TESTPASSED, IL_TESTPASSED); - } - else if (nResult == trFailed) - { - m_tcTests.SetItemImage(hItem, IL_TESTFAILED, IL_TESTFAILED); - } - else if (nResult == trPartial) - { - // TODO - } + if (m_tcTests.ItemHasChildren(hItem)) + { + // Run complete set of tests + TestSet *pTestSet = (TestSet *) m_tcTests.GetItemData(hItem); + RunTestSet(pTestSet); + UpdateTestSet(hItem); + } + else + { + // Find the test + Test *pTest = (Test *) m_tcTests.GetItemData(hItem); + TestResult nResult = RunTest(pTest); + UpdateTest(hItem, nResult); } hItem = m_tcTests.GetNextItem(hItem, TVGN_NEXTVISIBLE); @@ -335,3 +433,9 @@ void CBrowseDlg::OnSelchangedTestlist(NMHDR* pNMHDR, LRESULT* pResult) *pResult = 0; } + +void CBrowseDlg::OnDblclkTestlist(NMHDR* pNMHDR, LRESULT* pResult) +{ + OnRuntest(); + *pResult = 0; +} diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.h b/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.h index bac9249f242..d2e59a6da8d 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.h +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/CBrowseDlg.h @@ -20,7 +20,14 @@ public: CBrowseDlg(CWnd* pParent = NULL); // standard constructor + static CBrowseDlg *m_pBrowseDlg; + static void __cdecl CBrowseDlg::OutputString(const TCHAR *szMessage, ...); + HRESULT GetWebBrowser(IWebBrowser **pWebBrowser); + void RunTestSet(TestSet *pTestSet); + TestResult RunTest(Test *pTest); + void UpdateTest(HTREEITEM hItem, TestResult nResult); + void UpdateTestSet(HTREEITEM hItem); // Dialog Data //{{AFX_DATA(CBrowseDlg) @@ -53,6 +60,7 @@ protected: afx_msg void OnBackward(); afx_msg void OnForward(); afx_msg void OnSelchangedTestlist(NMHDR* pNMHDR, LRESULT* pResult); + afx_msg void OnDblclkTestlist(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.cpp b/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.cpp index bae0678196b..e729cc72589 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.cpp +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.cpp @@ -56,6 +56,7 @@ void CPickerDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CPickerDlg, CDialog) //{{AFX_MSG_MAP(CPickerDlg) ON_BN_CLICKED(IDOK, OnOk) + ON_LBN_DBLCLK(IDC_LISTBROWSER, OnDblclkListbrowser) //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -90,3 +91,8 @@ void CPickerDlg::OnOk() EndDialog(IDOK); } + +void CPickerDlg::OnDblclkListbrowser() +{ + OnOk(); +} diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.h b/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.h index c660316b5a7..567c058b0e6 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.h +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/PickerDlg.h @@ -38,6 +38,7 @@ protected: //{{AFX_MSG(CPickerDlg) afx_msg void OnOk(); virtual BOOL OnInitDialog(); + afx_msg void OnDblclkListbrowser(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.cpp b/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.cpp index e450bc08b52..1fbdeeec771 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.cpp +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.cpp @@ -30,9 +30,97 @@ TestResult __cdecl tstDocument(BrowserInfo *pInfo) return trPassed; } + +void tstDrillerLevel(BrowserInfo *pInfo, IHTMLElementCollection *pCollection, int nLevel) +{ + if (pCollection == NULL) + { + return; + } + + LONG celem = 0;; + HRESULT hr = pCollection->get_length( &celem ); + for ( int i=0; i< celem; i++ ) + { + VARIANT varIndex; + varIndex.vt = VT_UINT; + varIndex.lVal = i; + VARIANT var2; + VariantInit( &var2 ); + CIPtr(IDispatch) cpDisp; + + hr = pCollection->item( varIndex, var2, &cpDisp ); + if ( hr != S_OK ) + { + continue; + } + + CIPtr(IHTMLElement) cpElem; + + hr = cpDisp->QueryInterface( IID_IHTMLElement, (void **)&cpElem ); + if ( hr == S_OK ) + { + + BSTR bstr; + hr = cpElem->get_tagName(&bstr); + + USES_CONVERSION; + char szLevel[256]; + memset(szLevel, 0, sizeof(szLevel)); + memset(szLevel, ' ', nLevel); + + CString strTag = bstr; + pInfo->pfnOutputString(_T("Parsing element: %s%s"), A2T(szLevel), strTag); + + CIPtr(IHTMLImgElement) cpImgElem; + hr = cpDisp->QueryInterface( IID_IHTMLImgElement, (void **)&cpImgElem ); + if ( hr == S_OK ) + { + cpImgElem->get_href(&bstr); + } + else + { + CIPtr(IHTMLAnchorElement) cpAnchElem; + hr = cpDisp->QueryInterface( IID_IHTMLAnchorElement, (void **)&cpAnchElem ); + if ( hr == S_OK ) + { + cpAnchElem->get_href(&bstr); + } + } + + CIPtr(IDispatch) cpDispColl; + cpElem->get_all(&cpDispColl); + if (hr == S_OK) + { + CIPtr(IHTMLElementCollection) cpColl = cpDispColl; + tstDrillerLevel(pInfo, cpColl, nLevel + 1); + } + } + } +} + +TestResult __cdecl tstDriller(BrowserInfo *pInfo) +{ + CIPtr(IHTMLDocument2) cpDocElement; + pInfo->GetDocument(&cpDocElement); + if (cpDocElement == NULL) + { + return trFailed; + } + + CIPtr(IHTMLElementCollection) cpColl; + HRESULT hr = cpDocElement->get_all( &cpColl ); + if (hr == S_OK) + { + tstDrillerLevel(pInfo, cpColl, 0); + } + + return trPassed; +} + TestResult __cdecl tstTesters(BrowserInfo *pInfo) { - AfxMessageBox("Test architecture is reasonably sane!"); + pInfo->pfnOutputString("Test architecture is reasonably sane!"); return trPassed; } @@ -62,6 +150,7 @@ TestResult __cdecl tstIWebBrowser(BrowserInfo *pInfo) return trFailed; } + TestResult __cdecl tstIWebBrowser2(BrowserInfo *pInfo) { if (pInfo->pIUnknown == NULL) @@ -99,23 +188,24 @@ TestResult __cdecl tstIWebBrowserApp(BrowserInfo *pInfo) Test aBasic[] = { - { _T("Test Tester"), _T("Ensure that the testing architecture is working"), tstTesters }, - { _T("Control basics"), _T("Ensure that the browser control is active"), tstControlActive }, - { _T("IWebBrowser"), _T("Test if control has an IWebBrowser interface"), tstIWebBrowser }, - { _T("IWebBrowser2"), _T("Test if control has an IWebBrowser2 interface"), tstIWebBrowser2 }, - { _T("IWebBrowserApp"), _T("Test if control has an IWebBrowserApp interface"), tstIWebBrowserApp } + { _T("Test Tester"), _T("Ensure that the testing architecture is working"), tstTesters, trNotRun }, + { _T("Control basics"), _T("Ensure that the browser control is active"), tstControlActive, trNotRun }, + { _T("IWebBrowser"), _T("Test if control has an IWebBrowser interface"), tstIWebBrowser, trNotRun }, + { _T("IWebBrowser2"), _T("Test if control has an IWebBrowser2 interface"), tstIWebBrowser2, trNotRun }, + { _T("IWebBrowserApp"), _T("Test if control has an IWebBrowserApp interface"), tstIWebBrowserApp, trNotRun } }; Test aDHTML[] = { - { _T("get_Document"), _T("Test if browser has a top level element"), tstDocument } + { _T("get_Document"), _T("Test if browser has a top level element"), tstDocument }, + { _T("parse DOM"), _T("Parse the document DOM"), tstDriller } }; TestSet aTestSets[] = { { _T("Basic"), _T("Basic sanity tests"), 5, aBasic }, { _T("Browsing"), _T("Browsing and navigation tests"), 0, NULL }, - { _T("DHTML"), _T("Test the DOM"), 1, aDHTML } + { _T("DHTML"), _T("Test the DOM"), 2, aDHTML } }; int nTestSets = sizeof(aTestSets) / sizeof(aTestSets[0]); \ No newline at end of file diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.h b/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.h index bd097f3af88..213adc5ff8d 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.h +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/Tests.h @@ -23,17 +23,21 @@ enum TestResult { + trNotRun, trFailed, trPassed, trPartial }; +typedef void (__cdecl *OutputStringProc)(const TCHAR *szMessage, ...); + class BrowserInfo { public: CControlSiteInstance *pControlSite; IUnknown *pIUnknown; CLSID clsid; + OutputStringProc pfnOutputString; HRESULT GetWebBrowser(IWebBrowserApp **pWebBrowser) { @@ -71,6 +75,7 @@ struct Test TCHAR *szName; TCHAR *szDesc; TestProc pfn; + TestResult nLastResult; }; struct TestSet diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.dsp b/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.dsp index b224044ce75..54051c2c6fa 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.dsp +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.dsp @@ -1,5 +1,5 @@ # Microsoft Developer Studio Project File - Name="cbrowse" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Application" 0x0101 @@ -22,6 +22,7 @@ CFG=cbrowse - Win32 Debug !MESSAGE # Begin Project +# PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe @@ -42,8 +43,8 @@ RSC=rc.exe # PROP Target_Dir "" # ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" # ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL" BSC32=bscmake.exe @@ -66,9 +67,9 @@ LINK32=link.exe # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" # ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL" BSC32=bscmake.exe @@ -94,13 +95,6 @@ SOURCE=.\cbrowse.cpp # Begin Source File SOURCE=.\cbrowse.rc - -!IF "$(CFG)" == "cbrowse - Win32 Release" - -!ELSEIF "$(CFG)" == "cbrowse - Win32 Debug" - -!ENDIF - # End Source File # Begin Source File diff --git a/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.rc b/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.rc index 817681d8f9f..56f7d6b953f 100644 --- a/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.rc +++ b/mozilla/webshell/embed/ActiveX/tests/cbrowse/cbrowse.rc @@ -45,6 +45,15 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDR_MAINFRAME ICON DISCARDABLE "res\\cbrowse.ico" + #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // @@ -82,15 +91,6 @@ END #endif // APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDR_MAINFRAME ICON DISCARDABLE "res\\cbrowse.ico" - ///////////////////////////////////////////////////////////////////////////// // // Dialog @@ -107,12 +107,12 @@ BEGIN CONTROL "",IDC_BROWSER_MARKER,"Static",SS_BLACKFRAME,7,24,310, 205 PUSHBUTTON "Run",IDC_RUNTEST,325,296,50,14,WS_DISABLED - LISTBOX IDC_LISTMESSAGES,7,247,310,63,LBS_SORT | - LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + LISTBOX IDC_LISTMESSAGES,7,247,310,63,LBS_NOINTEGRALHEIGHT | + WS_VSCROLL | WS_TABSTOP LTEXT "Messages:",IDC_STATIC,7,233,110,11 CONTROL "Tree1",IDC_TESTLIST,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | - WS_BORDER | WS_TABSTOP,330,16,134,222 + TVS_TRACKSELECT | WS_BORDER | WS_TABSTOP,330,16,134,222 GROUPBOX "Tests",IDC_STATIC,324,7,146,237 COMBOBOX IDC_URL,45,7,180,52,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP