pjs/embedding/qa/testembed/nsIWebNav.cpp

437 строки
12 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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):
* David Epstein <depstein@netscape.com>
* Ashish Bhatt <ashishbhatt@netscape.com>
*
*
* 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 NPL, 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 NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
// File Overview....
//
// Test cases for the nsiWebNavigation Interface
#include "stdafx.h"
#include "testembed.h"
#include "qautils.h"
#include "nsiwebnav.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNsIWebNav
CNsIWebNav::CNsIWebNav(nsIWebNavigation *mWebNav)
{
qaWebNav = mWebNav ;
}
CNsIWebNav::~CNsIWebNav()
{
}
/////////////////////////////////////////////////////////////////////////////
// CNsIWebNav message handlers
// ***********************************************************************
// nsIWebNavigation iface
// ***********************************************************************
// Url table for web navigation
NavElement UrlTable[] = {
{"http://www.intel.com/", nsIWebNavigation::LOAD_FLAGS_NONE},
{"http://www.yahoo.com/", nsIWebNavigation::LOAD_FLAGS_MASK},
{"http://www.oracle.com/", nsIWebNavigation::LOAD_FLAGS_IS_LINK},
{"http://www.sun.com/", nsIWebNavigation::LOAD_FLAGS_IS_REFRESH},
{"ftp://ftp.netscape.com", nsIWebNavigation::LOAD_FLAGS_BYPASS_HISTORY},
{"ftp://ftp.mozilla.org/", nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY},
{"https://www.motorola.com/", nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE},
{"https://www.amazon.com", nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY},
{"about:plugins", nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE},
{"javascript: document.write('Test!')", nsIWebNavigation::LOAD_FLAGS_NONE},
{"file://C|/Program Files", nsIWebNavigation::LOAD_FLAGS_NONE}
};
void CNsIWebNav::OnStartTests(UINT nMenuID)
{
switch(nMenuID)
{
case ID_INTERFACES_NSIWEBNAV_RUNALLTESTS :
RunAllTests();
break ;
case ID_INTERFACES_NSIWEBNAV_GETCANGOBACK :
CanGoBackTest();
break ;
case ID_INTERFACES_NSIWEBNAV_GETCANGOFORWARD :
CanGoForwardTest();
break ;
case ID_INTERFACES_NSIWEBNAV_GOBACK :
GoBackTest();
break ;
case ID_INTERFACES_NSIWEBNAV_GOFORWARD :
GoForwardTest();
break ;
case ID_INTERFACES_NSIWEBNAV_GOTOINDEX :
GoToIndexTest();
break ;
case ID_INTERFACES_NSIWEBNAV_LOADURI :
LoadUriTest(UrlTable[0].theUri, UrlTable[0].theFlag);
break ;
case ID_INTERFACES_NSIWEBNAV_RELOAD :
ReloadTest(nsIWebNavigation::LOAD_FLAGS_NONE);
break ;
case ID_INTERFACES_NSIWEBNAV_STOP :
StopUriTest("file://C|/Program Files",
nsIWebNavigation::STOP_CONTENT);
break ;
case ID_INTERFACES_NSIWEBNAV_GETDOCUMENT :
GetDocumentTest();
break ;
case ID_INTERFACES_NSIWEBNAV_GETCURRENTURI :
GetCurrentURITest();
break ;
case ID_INTERFACES_NSIWEBNAV_GETSESSIONHISTORY :
GetSHTest();
break ;
case ID_INTERFACES_NSIWEBNAV_SETSESSIONHISTORY :
break ;
}
}
void CNsIWebNav::RunAllTests()
{
int i=0;
if (qaWebNav)
QAOutput("We have the web nav object.", 2);
else {
QAOutput("We don't have the web nav object. No tests performed.", 2);
return;
}
// load a couple of URLs to get things going
LoadUriTest("http://www.cisco.com", nsIWebNavigation::LOAD_FLAGS_NONE);
LoadUriTest("www.google.com", nsIWebNavigation::LOAD_FLAGS_NONE);
// canGoBack attribute test
CanGoBackTest();
// GoBack test
GoBackTest();
// canGoForward attribute test
CanGoForwardTest();
// GoForward test
GoForwardTest();
// GotoIndex test
GoToIndexTest();
// LoadURI() & reload tests
QAOutput("Run a few LoadURI() tests.", 2);
LoadUriandReload(11);
// Stop() tests
StopUriTest("http://www.microsoft.com", nsIWebNavigation::STOP_ALL);
StopUriTest("https://www.microsoft.com/", nsIWebNavigation::STOP_NETWORK);
StopUriTest("ftp://ftp.microsoft.com/", nsIWebNavigation::STOP_CONTENT);
// document test
GetDocumentTest();
// uri test
GetCurrentURITest();
// session history test
GetSHTest();
}
void CNsIWebNav::LoadUriandReload(int URItotal)
{
int i=0, j=0;
// LoadURI() & reload tests
QAOutput("Run a few LoadURI() and Reload() tests.", 2);
for (j=0; j < 9; j++)
{
for (i=0; i < URItotal; i++)
{
LoadUriTest(UrlTable[i].theUri, UrlTable[j].theFlag);
switch (i)
{
case 0:
ReloadTest(nsIWebNavigation::LOAD_FLAGS_NONE);
break;
case 1:
ReloadTest(nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE);
break;
case 2:
ReloadTest(nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY);
break;
// simulate shift-reload
case 3:
ReloadTest(nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE |
nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY);
break;
case 4:
ReloadTest(nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE);
break;
case 5:
ReloadTest(nsIWebNavigation::LOAD_FLAGS_NONE);
break;
}
}
}
}
// ***********************************************************************
// Individual nsIWebNavigation tests
void CNsIWebNav::CanGoBackTest()
{
PRBool canGoBack = PR_FALSE;
rv = qaWebNav->GetCanGoBack(&canGoBack);
RvTestResult(rv, "GetCanGoBack() attribute test", 2);
FormatAndPrintOutput("canGoBack value = ", canGoBack, 2);
}
void CNsIWebNav::GoBackTest()
{
rv = qaWebNav->GoBack();
RvTestResult(rv, "GoBack() test", 2);
}
void CNsIWebNav::CanGoForwardTest()
{
PRBool canGoForward = PR_FALSE;
rv = qaWebNav->GetCanGoForward(&canGoForward);
RvTestResult(rv, "GetCanGoForward() attribute test", 2);
FormatAndPrintOutput("canGoForward value = ", canGoForward, 2);
}
void CNsIWebNav::GoForwardTest()
{
rv = qaWebNav->GoForward();
RvTestResult(rv, "GoForward() test", 2);
}
void CNsIWebNav::GoToIndexTest()
{
PRInt32 theIndex = 0;
rv = qaWebNav->GotoIndex(theIndex);
RvTestResult(rv, "GotoIndex() test", 2);
}
void CNsIWebNav::LoadUriTest(char *theUrl, PRUint32 theFlag)
{
char theTotalString[500];
char theFlagName[200];
switch(theFlag)
{
case nsIWebNavigation::LOAD_FLAGS_NONE:
strcpy(theFlagName, "LOAD_FLAGS_NONE");
break;
case nsIWebNavigation::LOAD_FLAGS_MASK:
strcpy(theFlagName, "LOAD_FLAGS_MASK");
break;
case nsIWebNavigation::LOAD_FLAGS_IS_REFRESH:
strcpy(theFlagName, "LOAD_FLAGS_IS_REFRESH");
break;
case nsIWebNavigation::LOAD_FLAGS_IS_LINK:
strcpy(theFlagName, "LOAD_FLAGS_IS_LINK");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_HISTORY:
strcpy(theFlagName, "LOAD_FLAGS_BYPASS_HISTORY");
break;
case nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY:
strcpy(theFlagName, "LOAD_FLAGS_REPLACE_HISTORY");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE:
strcpy(theFlagName, "LOAD_FLAGS_BYPASS_CACHE");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY:
strcpy(theFlagName, "LOAD_FLAGS_BYPASS_PROXY");
break;
case nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE:
strcpy(theFlagName, "LOAD_FLAGS_CHARSET_CHANGE");
break;
}
rv = qaWebNav->LoadURI(NS_ConvertASCIItoUCS2(theUrl).get(),
theFlag,
nsnull,
nsnull,
nsnull);
sprintf(theTotalString, "%s%s%s%s%s", "LoadURI(): ", theUrl, " w/ ", theFlagName, " test");
RvTestResult(rv, theTotalString, 2);
}
void CNsIWebNav::ReloadTest(PRUint32 theFlag)
{
char theTotalString[500];
char theFlagName[200];
switch(theFlag)
{
case nsIWebNavigation::LOAD_FLAGS_NONE:
strcpy(theFlagName, "LOAD_FLAGS_NONE");
break;
case nsIWebNavigation::LOAD_FLAGS_MASK:
strcpy(theFlagName, "LOAD_FLAGS_MASK");
break;
case nsIWebNavigation::LOAD_FLAGS_IS_REFRESH:
strcpy(theFlagName, "LOAD_FLAGS_IS_REFRESH");
break;
case nsIWebNavigation::LOAD_FLAGS_IS_LINK:
strcpy(theFlagName, "LOAD_FLAGS_IS_LINK");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_HISTORY:
strcpy(theFlagName, "LOAD_FLAGS_BYPASS_HISTORY");
break;
case nsIWebNavigation::LOAD_FLAGS_REPLACE_HISTORY:
strcpy(theFlagName, "LOAD_FLAGS_REPLACE_HISTORY");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE:
strcpy(theFlagName, "LOAD_FLAGS_BYPASS_CACHE");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY:
strcpy(theFlagName, "LOAD_FLAGS_BYPASS_PROXY");
break;
case nsIWebNavigation::LOAD_FLAGS_CHARSET_CHANGE:
strcpy(theFlagName, "LOAD_FLAGS_CHARSET_CHANGE");
break;
case nsIWebNavigation::LOAD_FLAGS_BYPASS_CACHE | nsIWebNavigation::LOAD_FLAGS_BYPASS_PROXY:
strcpy(theFlagName, "cache & proxy");
break;
}
rv = qaWebNav->Reload(theFlag);
sprintf(theTotalString, "%s%s%s%s", "Reload(): ", " w/ ", theFlagName, " test");
RvTestResult(rv, theTotalString, 1);
}
void CNsIWebNav::StopUriTest(char *theUrl, PRUint32 theFlag)
{
char theTotalString[200];
char flagString[100];
if (theFlag == nsIWebNavigation::STOP_ALL)
strcpy(flagString, "STOP_ALL");
else if (theFlag == nsIWebNavigation::STOP_NETWORK)
strcpy(flagString, "STOP_NETWORK");
else
strcpy(flagString, "STOP_CONTENT");
qaWebNav->LoadURI(NS_ConvertASCIItoUCS2(theUrl).get(),
nsIWebNavigation::LOAD_FLAGS_NONE,
nsnull,
nsnull,
nsnull);
rv = qaWebNav->Stop(theFlag);
sprintf(theTotalString, "%s%s%s%s", "Stop(): ", theUrl, " test: ", flagString);
RvTestResult(rv, theTotalString, 2);
}
void CNsIWebNav::GetDocumentTest()
{
nsCOMPtr<nsIDOMDocument> theDocument;
nsCOMPtr<nsIDOMDocumentType> theDocType;
rv = qaWebNav->GetDocument(getter_AddRefs(theDocument));
if (!theDocument) {
QAOutput("We didn't get the document. Test failed.", 2);
return;
}
else
RvTestResult(rv, "GetDocument() test", 2);
rv = theDocument->GetDoctype(getter_AddRefs(theDocType));
RvTestResult(rv, "nsIDOMDocument::GetDoctype() for nsIWebNav test", 2);
}
void CNsIWebNav::GetCurrentURITest()
{
nsCOMPtr<nsIURI> theUri;
rv = qaWebNav->GetCurrentURI(getter_AddRefs(theUri));
if (!theUri) {
QAOutput("We didn't get the URI. Test failed.", 2);
return;
}
else
RvTestResult(rv, "GetCurrentURI() test", 2);
nsCAutoString uriString;
rv = theUri->GetSpec(uriString);
RvTestResult(rv, "nsIURI::GetSpec() for nsIWebNav test", 1);
FormatAndPrintOutput("the nsIWebNav uri = ", uriString, 2);
}
void CNsIWebNav::GetSHTest()
{
PRInt32 numOfElements;
nsCOMPtr<nsISHistory> theSessionHistory;
rv = qaWebNav->GetSessionHistory(getter_AddRefs(theSessionHistory));
if (!theSessionHistory) {
QAOutput("We didn't get the session history. Test failed.", 2);
return;
}
else
RvTestResult(rv, "GetSessionHistory() test", 2);
rv = theSessionHistory->GetCount(&numOfElements);
RvTestResult(rv, "nsISHistory::GetCount() for nsIWebNav test", 1);
FormatAndPrintOutput("the sHist entry count = ", numOfElements, 2);
}