mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-11 02:10:17 +01:00
611 lines
15 KiB
C++
611 lines
15 KiB
C++
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||
|
/* ***** BEGIN LICENSE BLOCK *****
|
||
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||
|
*
|
||
|
* The contents of this file are subject to the Mozilla Public License Version
|
||
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
* http://www.mozilla.org/MPL/
|
||
|
*
|
||
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||
|
* for the specific language governing rights and limitations under the
|
||
|
* License.
|
||
|
*
|
||
|
* The Original Code is mozilla.org code.
|
||
|
*
|
||
|
* The Initial Developer of the Original Code is
|
||
|
* Netscape Communications Corporation.
|
||
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
||
|
* the Initial Developer. All Rights Reserved.
|
||
|
*
|
||
|
* Contributor(s):
|
||
|
*
|
||
|
* Alternatively, the contents of this file may be used under the terms of
|
||
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||
|
* of those above. If you wish to allow use of your version of this file only
|
||
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||
|
* use your version of this file under the terms of the MPL, indicate your
|
||
|
* decision by deleting the provisions above and replace them with the notice
|
||
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||
|
* the provisions above, a recipient may use your version of this file under
|
||
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
||
|
*
|
||
|
* ***** END LICENSE BLOCK ***** */
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
|
||
|
#include "resource.h"
|
||
|
#include "Cbrowse.h"
|
||
|
#include "CBrowseDlg.h"
|
||
|
#include "TestScriptHelper.h"
|
||
|
|
||
|
#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() \
|
||
|
{ NULL, NULL, 0, NULL } }; \
|
||
|
int nTestSets = sizeof(aTestSets) / sizeof(aTestSets[0]) - 1;
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
void BrowserInfo::OutputString(const TCHAR *szMessage, ...)
|
||
|
{
|
||
|
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);
|
||
|
|
||
|
pBrowseDlg->OutputString(szOutput);
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT BrowserInfo::GetWebBrowser(IWebBrowserApp **pWebBrowser)
|
||
|
{
|
||
|
if (pIUnknown == NULL)
|
||
|
{
|
||
|
return E_FAIL;
|
||
|
}
|
||
|
return pIUnknown->QueryInterface(IID_IWebBrowserApp, (void **) pWebBrowser);
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT BrowserInfo::GetDocument(IHTMLDocument2 **pDocument)
|
||
|
{
|
||
|
CIPtr(IWebBrowserApp) cpWebBrowser;
|
||
|
if (FAILED(GetWebBrowser(&cpWebBrowser)))
|
||
|
{
|
||
|
return E_FAIL;
|
||
|
}
|
||
|
|
||
|
CIPtr(IDispatch) cpDispDocument;
|
||
|
cpWebBrowser->get_Document(&cpDispDocument);
|
||
|
if (cpDispDocument == NULL)
|
||
|
{
|
||
|
return E_FAIL;
|
||
|
}
|
||
|
|
||
|
return cpDispDocument->QueryInterface(IID_IHTMLDocument2, (void **) pDocument);
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
struct InterfaceInfo
|
||
|
{
|
||
|
const IID *piid;
|
||
|
const TCHAR *szName;
|
||
|
};
|
||
|
|
||
|
|
||
|
static InterfaceInfo aDocIIDs[] =
|
||
|
{
|
||
|
{ &IID_IOleCommandTarget, _T("IOleCommandTarget") },
|
||
|
{ &IID_IHTMLDocument, _T("IHTMLDocument") },
|
||
|
{ &IID_IHTMLDocument2, _T("IHTMLDocument2") },
|
||
|
{ &IID_IHTMLElementCollection, _T("IHTMLElementCollection") },
|
||
|
{ &IID_IHTMLElement, _T("IHTMLElement") }
|
||
|
};
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstDocument(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstBody(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
TestResult __cdecl tstPutInnerHTML(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
TestResult __cdecl tstGetInnerHTML(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
TestResult __cdecl tstSetBgColor(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
TestResult __cdecl tstCollectionEnum(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
void tstDrillerLevel(BrowserInfo &cInfo, IHTMLElementCollection *pCollection, int nLevel)
|
||
|
{
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstDriller(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstTesters(BrowserInfo &cInfo)
|
||
|
{
|
||
|
cInfo.OutputString("Test architecture is reasonably sane!");
|
||
|
return trPassed;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstControlActive(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstIWebBrowser(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstIWebBrowser2(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstIWebBrowserApp(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstNavigate2(BrowserInfo &cInfo)
|
||
|
{
|
||
|
return trFailed;
|
||
|
}
|
||
|
|
||
|
|
||
|
TestResult __cdecl tstScriptTest(BrowserInfo &cInfo)
|
||
|
{
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
|
||
|
Test aScripts[] =
|
||
|
{
|
||
|
{ _T("Script test"), _T("Test that the scripting engine is sane"), tstScriptTest }
|
||
|
};
|
||
|
|
||
|
|
||
|
void __cdecl ScriptSetPopulator(TestSet *pTestSet)
|
||
|
{
|
||
|
// 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;
|
||
|
}
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
Test aBasic[] =
|
||
|
{
|
||
|
{ _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 aBrowsing[] =
|
||
|
{
|
||
|
{ _T("IWebBrowser2::Navigate2"), _T("Test if browser can navigate to the test URL"), NULL }
|
||
|
};
|
||
|
|
||
|
|
||
|
Test aDHTML[] =
|
||
|
{
|
||
|
{ _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 }
|
||
|
};
|
||
|
|
||
|
|
||
|
Test aOther[] =
|
||
|
{
|
||
|
{ _T("Print Page"), _T("Print the test URL page"), NULL }
|
||
|
};
|
||
|
|
||
|
BEGIN_TESTSET()
|
||
|
DECL_SET(Basic, "Basic sanity tests")
|
||
|
DECL_SET(Browsing, "Browsing and navigation tests")
|
||
|
DECL_SET(DHTML, "Test the DOM")
|
||
|
DECL_SET(Other, "Other tests")
|
||
|
DECL_SET_DYNAMIC(Scripts, "Script tests", ScriptSetPopulator)
|
||
|
END_TESTSET()
|
||
|
|