Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Functions | Variables
Tests.cpp File Reference
#include "stdafx.h"
#include "resource.h"
#include "Cbrowse.h"
#include "CBrowseDlg.h"
#include "TestScriptHelper.h"

Go to the source code of this file.

Classes

struct  InterfaceInfo

Defines

#define BEGIN_TESTSET()   TestSet aTestSets[] = {
#define DECL_SET(name, descr)   { _T(#name), _T(descr), sizeof(a##name)/sizeof(a##name[0]), a##name, NULL },
#define DECL_SET_DYNAMIC(name, descr, pop)   { _T(#name), _T(descr), 0, NULL, pop },
#define END_TESTSET()

Functions

TestResult __cdecl tstDocument (BrowserInfo &cInfo)
TestResult __cdecl tstBody (BrowserInfo &cInfo)
TestResult __cdecl tstPutInnerHTML (BrowserInfo &cInfo)
TestResult __cdecl tstGetInnerHTML (BrowserInfo &cInfo)
TestResult __cdecl tstSetBgColor (BrowserInfo &cInfo)
TestResult __cdecl tstCollectionEnum (BrowserInfo &cInfo)
void tstDrillerLevel (BrowserInfo &cInfo, IHTMLElementCollection *pCollection, int nLevel)
TestResult __cdecl tstDriller (BrowserInfo &cInfo)
TestResult __cdecl tstTesters (BrowserInfo &cInfo)
TestResult __cdecl tstControlActive (BrowserInfo &cInfo)
TestResult __cdecl tstIWebBrowser (BrowserInfo &cInfo)
TestResult __cdecl tstIWebBrowser2 (BrowserInfo &cInfo)
TestResult __cdecl tstIWebBrowserApp (BrowserInfo &cInfo)
TestResult __cdecl tstNavigate2 (BrowserInfo &cInfo)
TestResult __cdecl tstScriptTest (BrowserInfo &cInfo)
void __cdecl ScriptSetPopulator (TestSet *pTestSet)

Variables

static InterfaceInfo aDocIIDs []
Test aScripts []
Test aBasic []
Test aBrowsing []
Test aDHTML []
Test aOther []

Class Documentation

struct InterfaceInfo

Definition at line 103 of file Tests.cpp.

Collaboration diagram for InterfaceInfo:
Class Members
nsID mIID
UInt32 mOffset
const IID * piid
const TCHAR * szName

Define Documentation

Definition at line 45 of file Tests.cpp.

#define DECL_SET (   name,
  descr 
)    { _T(#name), _T(descr), sizeof(a##name)/sizeof(a##name[0]), a##name, NULL },

Definition at line 47 of file Tests.cpp.

#define DECL_SET_DYNAMIC (   name,
  descr,
  pop 
)    { _T(#name), _T(descr), 0, NULL, pop },

Definition at line 49 of file Tests.cpp.

Value:
{ NULL, NULL, 0, NULL } }; \
    int nTestSets = sizeof(aTestSets) / sizeof(aTestSets[0]) - 1;

Definition at line 51 of file Tests.cpp.


Function Documentation

void __cdecl ScriptSetPopulator ( TestSet pTestSet)

Definition at line 528 of file Tests.cpp.

{
       // TODO read from registry
       CString szTestDir(_T("Scripts"));

       CStringList cStringList;
       CFileFind cFinder;
       CString szPattern;


       szPattern.Format(_T("%s\\*.vbs"), szTestDir);
       BOOL bWorking = cFinder.FindFile(szPattern);
       while (bWorking)
       {
              bWorking = cFinder.FindNextFile();
              cStringList.AddTail(cFinder.GetFileName());
       }
       
       szPattern.Format(_T("%s\\*.js"), szTestDir);
       bWorking = cFinder.FindFile(szPattern);
       while (bWorking)
       {
              bWorking = cFinder.FindNextFile();
              cStringList.AddTail(cFinder.GetFileName());
       }

       // Create a set of tests from the scripts found
       Test *pTests = (Test *) malloc(sizeof(Test) * cStringList.GetCount());
       for (int i = 0; i < cStringList.GetCount(); i++)
       {
              CString szScript = cStringList.GetAt(cStringList.FindIndex(i));
              _tcscpy(pTests[i].szName, szScript);
              _tcscpy(pTests[i].szDesc, _T("Run the specified script"));
              pTests[i].pfn = tstScriptTest;
       }

       pTestSet->nTests = cStringList.GetCount();
       pTestSet->aTests = pTests;
}

Here is the call graph for this function:

TestResult __cdecl tstBody ( BrowserInfo cInfo)

Definition at line 149 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }

    CIPtr(IHTMLElement) cpBody;
    cpDocElement->get_body(&cpBody);
    if (cpBody == NULL)
    {
        cInfo.OutputString(_T("Error: No Body"));
        return trFailed;
    }

       return trPassed;
}

Here is the call graph for this function:

Definition at line 243 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }
       
       CIPtr(IHTMLElementCollection) cpColl;
       HRESULT hr = cpDocElement->get_all( &cpColl );
       if (hr == S_OK)
       {
              CComPtr<IUnknown> cpUnkEnum;
              cpColl->get__newEnum(&cpUnkEnum);
              if (cpUnkEnum == NULL)
              {
                     cInfo.OutputString(_T("Error: No collection"));
                     return trFailed;
              }

              CIPtr(IEnumVARIANT) cpEnumVARIANT = cpUnkEnum;
              if (cpEnumVARIANT)
              {
                     cInfo.OutputString(_T("Collection has IEnumVARIANT"));
              }
              CIPtr(IEnumUnknown) cpEnumUnknown = cpUnkEnum;
              if (cpEnumUnknown)
              {
                     cInfo.OutputString(_T("Collection has IEnumUnknown"));
              }
       }
       else
       {
              cInfo.OutputString(_T("Error: No collection from document"));
              return trFailed;
       }

       return trPassed;
}

Here is the call graph for this function:

TestResult __cdecl tstControlActive ( BrowserInfo cInfo)

Definition at line 409 of file Tests.cpp.

{
       CBrowserCtlSiteInstance *pControlSite = cInfo.pControlSite;
       if (pControlSite == NULL)
       {
              cInfo.OutputString(_T("Error: No control site"));
              return trFailed;
       }

       if (!pControlSite->IsInPlaceActive())
       {
              cInfo.OutputString(_T("Error: Control is not in-place active"));
              return trFailed;
       }

       return trPassed;
}

Here is the call graph for this function:

TestResult __cdecl tstDocument ( BrowserInfo cInfo)

Definition at line 120 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }

       // Dump out all the interfaces supported by the document element
       for (int i = 0; i < sizeof(aDocIIDs) / sizeof(aDocIIDs[0]); i++)
       {
              IUnknown *pUnkI = NULL;
              if (SUCCEEDED(cpDocElement->QueryInterface(*(aDocIIDs[i].piid), (void **) &pUnkI)))
              {
                     cInfo.OutputString(_T("Info: Document supports interface %s"), aDocIIDs[i].szName);
                     pUnkI->Release();
              }
              else
              {
                     cInfo.OutputString(_T("Info: Document doesn't support interface %s"), aDocIIDs[i].szName);
              }
       }

       return trPassed;
}

Here is the call graph for this function:

TestResult __cdecl tstDriller ( BrowserInfo cInfo)

Definition at line 381 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }
       
       CIPtr(IHTMLElementCollection) cpColl;
       HRESULT hr = cpDocElement->get_all( &cpColl );
       if (hr == S_OK)
       {
              tstDrillerLevel(cInfo, cpColl, 0);
       }

       return trPassed;
}

Here is the call graph for this function:

void tstDrillerLevel ( BrowserInfo cInfo,
IHTMLElementCollection *  pCollection,
int  nLevel 
)

Definition at line 286 of file Tests.cpp.

{
       if (pCollection == NULL)
       {
              return;
       }

       LONG nElements = 0;;
       HRESULT hr = pCollection->get_length( &nElements );
       if (FAILED(hr))
       {
              cInfo.OutputString(_T("Error: Collection failed to return number of elements!"));
              return;
       }

       USES_CONVERSION;
       char szLevel[256];
       memset(szLevel, 0, sizeof(szLevel));
       memset(szLevel, ' ', nLevel);
       TCHAR *szIndent = A2T(szLevel);

       cInfo.OutputString(_T("%sParsing collection..."), szIndent);
       cInfo.OutputString(_T("%sCollection with %d elements"), szIndent, (int) nElements);

       for ( int i=0; i< nElements; 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 bstrTagName = NULL;
                     hr = cpElem->get_tagName(&bstrTagName);
                     CString szTagName = bstrTagName;
                     SysFreeString(bstrTagName);

                     BSTR bstrID = NULL;
                     hr = cpElem->get_id(&bstrID);
                     CString szID = bstrID;
                     SysFreeString(bstrID);

                     BSTR bstrClassName = NULL;
                     hr = cpElem->get_className(&bstrClassName);
                     CString szClassName = bstrClassName;
                     SysFreeString(bstrClassName);
                     
                     cInfo.OutputString(_T("%sElement at %d is %s"), szIndent, i, szTagName);
                     cInfo.OutputString(_T("%s  id=%s"), szIndent, szID);
                     cInfo.OutputString(_T("%s  classname=%s"), szIndent, szClassName);

                     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;
                     hr = cpElem->get_children(&cpDispColl);
                     if (hr == S_OK)
                     {
                            CIPtr(IHTMLElementCollection) cpColl = cpDispColl;
                            tstDrillerLevel(cInfo, cpColl, nLevel + 1);
                     }
              }
       }

       cInfo.OutputString(_T("%sEnd collection"), szIndent);
}

Here is the call graph for this function:

Here is the caller graph for this function:

TestResult __cdecl tstGetInnerHTML ( BrowserInfo cInfo)

Definition at line 198 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }
       
       CIPtr(IHTMLElement) cpBody;
       HRESULT hr = cpDocElement->get_body( &cpBody );
       if (hr == S_OK)
       {
        CComBSTR html;
        if (FAILED(cpBody->get_innerHTML(&html)))
        {
            cInfo.OutputString(_T("Error: get_innerHTML returned error"));
            return trFailed;
        }
       }

       return trPassed;
}

Here is the call graph for this function:

TestResult __cdecl tstIWebBrowser ( BrowserInfo cInfo)

Definition at line 428 of file Tests.cpp.

{
       if (cInfo.pIUnknown == NULL)
       {
              cInfo.OutputString(_T("Error: No control"));
              return trFailed;
       }

       CIPtr(IWebBrowser) cpIWebBrowser = cInfo.pIUnknown;
       if (cpIWebBrowser)
       {
              return trPassed;
       }

       cInfo.OutputString(_T("Error: No IWebBrowser"));
       return trFailed;
}

Here is the call graph for this function:

TestResult __cdecl tstIWebBrowser2 ( BrowserInfo cInfo)

Definition at line 447 of file Tests.cpp.

{
       if (cInfo.pIUnknown == NULL)
       {
              cInfo.OutputString(_T("Error: No control"));
              return trFailed;
       }
       CIPtr(IWebBrowser2) cpIWebBrowser = cInfo.pIUnknown;
       if (cpIWebBrowser)
       {
              return trPassed;
       }

       cInfo.OutputString(_T("Error: No IWebBrowser2"));
       return trFailed;
}

Here is the call graph for this function:

Definition at line 465 of file Tests.cpp.

{
       if (cInfo.pIUnknown == NULL)
       {
              cInfo.OutputString(_T("Error: No control"));
              return trFailed;
       }

       CIPtr(IWebBrowserApp) cpIWebBrowser = cInfo.pIUnknown;
       if (cpIWebBrowser)
       {
              return trPassed;
       }

       cInfo.OutputString(_T("Error: No IWebBrowserApp"));
       return trFailed;
}

Here is the call graph for this function:

TestResult __cdecl tstNavigate2 ( BrowserInfo cInfo)

Definition at line 484 of file Tests.cpp.

{
       return trFailed;
}
TestResult __cdecl tstPutInnerHTML ( BrowserInfo cInfo)

Definition at line 170 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }

    CIPtr(IHTMLElement) cpBody;
    cpDocElement->get_body(&cpBody);
    if (cpBody == NULL)
    {
        cInfo.OutputString(_T("Error: No Body"));
        return trFailed;
    }

    CComBSTR bstr("<p>Hello world!<p><a href=\"http://www.mozilla.org\">Click here to visit our sponsor</a>");
    if (FAILED(cpBody->put_innerHTML(bstr)))
    {
        cInfo.OutputString(_T("Error: put_innerHTML returned error"));
        return trFailed;
    }

       return trPassed;
}

Here is the call graph for this function:

TestResult __cdecl tstScriptTest ( BrowserInfo cInfo)

Definition at line 490 of file Tests.cpp.

{
       cInfo.nResult = trFailed;

       CTestScriptHelperInstance *pHelper = NULL;
       CTestScriptHelperInstance::CreateInstance(&pHelper);
       if (pHelper)
       {
              pHelper->m_pBrowserInfo = &cInfo;

              CActiveScriptSiteInstance *pSite = NULL;
              CActiveScriptSiteInstance::CreateInstance(&pSite);
              if (pSite)
              {
                     // TODO read from registry
                     CString szScript;
                     szScript.Format(_T("Scripts\\%s"), cInfo.pTest->szName);

                     pSite->AddRef();
                     pSite->AttachVBScript();
                     pSite->AddNamedObject(_T("BrowserInfo"), pHelper, TRUE);
                     pSite->ParseScriptFile(szScript);
                     pSite->PlayScript();
                     pSite->Detach();
                     pSite->Release();
              }
       }

       return cInfo.nResult;
}

Here is the caller graph for this function:

TestResult __cdecl tstSetBgColor ( BrowserInfo cInfo)

Definition at line 223 of file Tests.cpp.

{
       CIPtr(IHTMLDocument2) cpDocElement;
       cInfo.GetDocument(&cpDocElement);
       if (cpDocElement == NULL)
       {
              cInfo.OutputString(_T("Error: No document"));
              return trFailed;
       }

    CComVariant v("red");
    if (FAILED(cpDocElement->put_bgColor(v)))
    {
              cInfo.OutputString(_T("Error: put_bgColor returned an error"));
        return trFailed;
    }

       return trPassed;
}

Here is the call graph for this function:

TestResult __cdecl tstTesters ( BrowserInfo cInfo)

Definition at line 402 of file Tests.cpp.

{
       cInfo.OutputString("Test architecture is reasonably sane!");
       return trPassed;
}

Here is the call graph for this function:


Variable Documentation

Initial value:
{
       { _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 }
}

Definition at line 570 of file Tests.cpp.

Initial value:
{
       { _T("IWebBrowser2::Navigate2"), _T("Test if browser can navigate to the test URL"), NULL }
}

Definition at line 580 of file Tests.cpp.

Initial value:
{
       { _T("IWebBrowser::get_Document"), _T("Test if browser has a top level element"), tstDocument },
    { _T("IHTMLDocument::get_Body"), _T("Test if the body element can be retrieved"), tstBody},
    { _T("IHTMLElement::put_innerHTML"), _T("Test if the innerHTML attribute works"), tstPutInnerHTML },
    { _T("IHTMLElement::get_innerHTML"), _T("Dump the innerHTML for the BODY element"), tstGetInnerHTML },
    { _T("IHTMLElement::put_bgColor"), _T("Set the document background color to red"), tstSetBgColor },
       { _T("IHTMLElementCollection::get__newEnum"), _T("Test if element collections return enumerations"), tstCollectionEnum },
       { _T("Parse DOM"), _T("Parse the document DOM"), tstDriller }
}

Definition at line 586 of file Tests.cpp.

InterfaceInfo aDocIIDs[] [static]
Initial value:
 
{
       { &IID_IOleCommandTarget,          _T("IOleCommandTarget") },
       { &IID_IHTMLDocument,                     _T("IHTMLDocument") },
       { &IID_IHTMLDocument2,                    _T("IHTMLDocument2") },
       { &IID_IHTMLElementCollection,     _T("IHTMLElementCollection") },
       { &IID_IHTMLElement,               _T("IHTMLElement") }
}

Definition at line 110 of file Tests.cpp.

Initial value:
{
       { _T("Print Page"), _T("Print the test URL page"), NULL }
}

Definition at line 598 of file Tests.cpp.

Initial value:
{
       { _T("Script test"), _T("Test that the scripting engine is sane"), tstScriptTest }
}

Definition at line 522 of file Tests.cpp.