зеркало из https://github.com/mozilla/pjs.git
497 строки
15 KiB
C++
497 строки
15 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* ***** 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):
|
|
* David Epstein <depstein@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 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 ***** */
|
|
|
|
// nsIChannelTests.h : implementation file for nsIChannel test cases
|
|
|
|
// nsIChannelTests.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "testembed.h"
|
|
#include "nsIChannelTests.h"
|
|
#include "BrowserImpl.h"
|
|
#include "BrowserFrm.h"
|
|
#include "UrlDialog.h"
|
|
#include "ProfileMgr.h"
|
|
#include "ProfilesDlg.h"
|
|
#include "QaUtils.h"
|
|
#include "Tests.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// nsIChannelTests
|
|
|
|
CnsIChannelTests::CnsIChannelTests(nsIWebBrowser *mWebBrowser,
|
|
CBrowserImpl *mpBrowserImpl)
|
|
{
|
|
qaWebBrowser = mWebBrowser;
|
|
qaBrowserImpl = mpBrowserImpl;
|
|
}
|
|
|
|
CnsIChannelTests::~CnsIChannelTests()
|
|
{
|
|
}
|
|
|
|
ChannelRow ChannelTable[] = {
|
|
{"http://www.netscape.com/", "text/plain"},
|
|
{"https://www.sun.com/", "text/html"},
|
|
{"ftp://ftp.mozilla.org/", "image/gif"},
|
|
{"gopher://gopher.tc.umn.edu/", "application/vnd.mozilla.xul+xml"},
|
|
{"http://www.mozilla.org/projects/embedding", "text/plain"},
|
|
{"file://C|/Program Files", "image/jpeg"},
|
|
{"about:mozilla", ""},
|
|
{"javascript:document.write('hi')", ""},
|
|
{"data:text/plain;charset=iso-8859-7,%be%fg%be", ""},
|
|
{"jar:resource:///chrome/toolkit.jar!/content/global/plugins.html", ""},
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// nsIChannelTests message handlers
|
|
|
|
nsIChannel * CnsIChannelTests::GetChannelObject(nsCAutoString theSpec)
|
|
{
|
|
theURI = GetURIObject(theSpec);
|
|
if (!theURI)
|
|
{
|
|
QAOutput("Didn't get URI object. Test failed.", 2);
|
|
return nsnull;
|
|
}
|
|
rv = NS_NewChannel(getter_AddRefs(theChannel), theURI, nsnull, nsnull);
|
|
RvTestResult(rv, "NS_NewChannel", 1);
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. GetChannelObject Test failed.", 2);
|
|
return nsnull;
|
|
}
|
|
return theChannel;
|
|
}
|
|
|
|
nsIURI * CnsIChannelTests::GetURIObject(nsCAutoString theSpec)
|
|
{
|
|
rv = NS_NewURI(getter_AddRefs(theURI), theSpec);
|
|
RvTestResult(rv, "NS_NewURI", 1);
|
|
if (!theURI)
|
|
{
|
|
QAOutput("Didn't get URI object. GetURIObject Test failed.", 2);
|
|
return nsnull;
|
|
}
|
|
// nsIURI *retVal = theURI;
|
|
// NS_ADDREF(retVal);
|
|
// return retVal;
|
|
return theURI;
|
|
}
|
|
|
|
void CnsIChannelTests::SetOriginalURITest(nsIChannel *theChannel, nsCAutoString theSpec,
|
|
PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. SetOriginalURITest failed.", 2);
|
|
return;
|
|
}
|
|
theURI = GetURIObject(theSpec);
|
|
rv = theChannel->SetOriginalURI(theURI);
|
|
RvTestResult(rv, "SetOriginalURITest", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "SetOriginalURITest", true);
|
|
if (!theURI)
|
|
QAOutput("Didn't get URI object. SetOriginalURITest failed.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetOriginalURITest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. GetOriginalURITest failed.", 2);
|
|
return;
|
|
}
|
|
rv = theChannel->GetOriginalURI(getter_AddRefs(theURI));
|
|
RvTestResult(rv, "GetOriginalURITest", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "GetOriginalURITest");
|
|
if (!theURI)
|
|
{
|
|
QAOutput("Didn't get URI object. GetOriginalURITest failed.", displayMode);
|
|
return;
|
|
}
|
|
GetTheURI(theURI);
|
|
}
|
|
|
|
void CnsIChannelTests::GetURITest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. GetURITest failed.", 2);
|
|
return;
|
|
}
|
|
rv = theChannel->GetURI(getter_AddRefs(theURI));
|
|
RvTestResult(rv, "GetURITest", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "GetURITest");
|
|
if (!theURI)
|
|
{
|
|
QAOutput("Didn't get URI object. GetURITest failed.", displayMode);
|
|
return;
|
|
}
|
|
GetTheURI(theURI);
|
|
}
|
|
|
|
void CnsIChannelTests::SetOwnerTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. SetOwnerTest failed.", 2);
|
|
return;
|
|
}
|
|
theSupports = do_QueryInterface(qaWebBrowser);
|
|
rv = theChannel->SetOwner(theChannel);
|
|
RvTestResult(rv, "SetOwner", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "SetOwner");
|
|
if (!theSupports)
|
|
QAOutput("Didn't get nsISupports object. SetOwnerTest failed.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetOwnerTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. GetOwnerTest failed.", 2);
|
|
return;
|
|
}
|
|
rv = theChannel->GetOwner(getter_AddRefs(theSupports));
|
|
RvTestResult(rv, "GetOwner", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "GetOwner");
|
|
if (!theSupports)
|
|
QAOutput("Didn't get nsISupports object. GetOwnerTest failed.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::SetNotificationsTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. SetNotificationsTest failed.", 2);
|
|
return;
|
|
}
|
|
if (!qaWebBrowser)
|
|
{
|
|
QAOutput("Didn't get nsIWebBrowser object. SetNotificationsTest failed.", displayMode);
|
|
return;
|
|
}
|
|
theIRequestor = do_QueryInterface(qaWebBrowser);
|
|
rv = theChannel->SetNotificationCallbacks(theIRequestor);
|
|
RvTestResult(rv, "SetNotificationCallbacks", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "SetNotificationCallbacks");
|
|
if (!theIRequestor)
|
|
QAOutput("Didn't get nsIInterfaceRequestor object. SetNotificationsTest failed.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetNotificationsTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get Channel object. GetNotificationsTest failed.", 2);
|
|
return;
|
|
}
|
|
rv = theChannel->GetNotificationCallbacks(getter_AddRefs(theIRequestor));
|
|
RvTestResult(rv, "GetNotificationCallbacks", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "GetNotificationCallbacks");
|
|
if(!theIRequestor)
|
|
QAOutput("Didn't get nsIInterfaceRequestor object. GetNotificationsTest failed.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetSecurityInfoTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. GetSecurityInfoTest failed.", displayMode);
|
|
return;
|
|
}
|
|
theSupports = do_QueryInterface(qaWebBrowser);
|
|
rv = theChannel->GetSecurityInfo(getter_AddRefs(theSupports));
|
|
RvTestResult(rv, "GetSecurityInfo", displayMode);
|
|
if (!theSupports)
|
|
QAOutput("Didn't get nsISupports object for GetSecurityInfoTest.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::SetContentTypeTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. SetContentTypeTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->SetContentType(NS_LITERAL_CSTRING("text/plain"));
|
|
RvTestResult(rv, "SetContentType", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetContentTypeTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
nsCAutoString contentType;
|
|
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. GetContentTypeTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->GetContentType(contentType);
|
|
RvTestResult(rv, "GetContentType", displayMode);
|
|
FormatAndPrintOutput("the content type = ", contentType, displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::SetContentCharsetTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
nsCAutoString charsetType;
|
|
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. SetContentCharsetTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->SetContentCharset(NS_LITERAL_CSTRING("ISO-8859-1"));
|
|
RvTestResult(rv, "SetContentCharset", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetContentCharsetTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
nsCAutoString charsetType;
|
|
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. GetContentCharsetTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->GetContentCharset(charsetType);
|
|
RvTestResult(rv, "GetContentCharset", displayMode);
|
|
FormatAndPrintOutput("the charset type = ", charsetType, displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::SetContentLengthTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
PRInt32 contentLength;
|
|
|
|
contentLength = 10000;
|
|
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. SetContentLengthTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->SetContentLength(contentLength);
|
|
RvTestResult(rv, "SetContentLength", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::GetContentLengthTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
PRInt32 contentLength;
|
|
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. GetContentLengthTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->GetContentLength(&contentLength);
|
|
RvTestResult(rv, "GetContentLength", displayMode);
|
|
FormatAndPrintOutput("the content length = ", contentLength, displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::OpenTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. OpenTest failed.", displayMode);
|
|
return;
|
|
}
|
|
rv = theChannel->Open(getter_AddRefs(theInputStream));
|
|
RvTestResult(rv, "OpenTest", displayMode);
|
|
if (!theInputStream)
|
|
QAOutput("Didn't get theInputStream object. OpenTest failed.", displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::AsyncOpenTest(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
nsCOMPtr<nsIStreamListener> listener(static_cast<nsIStreamListener*>(qaBrowserImpl));
|
|
nsCOMPtr<nsIWeakReference> thisListener(do_GetWeakReference(listener));
|
|
qaWebBrowser->AddWebBrowserListener(thisListener, NS_GET_IID(nsIStreamListener));
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. AsyncOpenTest failed.", displayMode);
|
|
return;
|
|
}
|
|
if (!listener) {
|
|
QAOutput("Didn't get the stream listener object. AsyncOpenTest failed.", displayMode);
|
|
return;
|
|
}
|
|
// this calls nsIStreamListener::OnDataAvailable()
|
|
theSupports = do_QueryInterface(theChannel);
|
|
if (!theSupports)
|
|
QAOutput("Didn't get the nsISupports object. AsyncOpen() failed.", displayMode);
|
|
|
|
SaveObject(theSupports);
|
|
|
|
rv = theChannel->AsyncOpen(listener, theSupports);
|
|
RvTestResult(rv, "AsyncOpen()", displayMode);
|
|
if (displayMode == 1)
|
|
RvTestResultDlg(rv, "AsyncOpen()");
|
|
}
|
|
|
|
void CnsIChannelTests::PostAsyncOpenTests(nsIChannel *theChannel, PRInt16 displayMode)
|
|
{
|
|
// These tests are run after the channel is opened (using AsyncOpen())
|
|
// To run them in TestEmbed, select Tests > asyncOpen menu and enter complete URL with protocol
|
|
GetOriginalURITest(theChannel, displayMode);
|
|
GetURITest(theChannel, displayMode);
|
|
SetOwnerTest(theChannel, displayMode);
|
|
GetOwnerTest(theChannel, displayMode);
|
|
SetNotificationsTest(theChannel, displayMode);
|
|
GetNotificationsTest(theChannel, displayMode);
|
|
GetSecurityInfoTest(theChannel, displayMode);
|
|
SetContentTypeTest(theChannel, displayMode);
|
|
GetContentTypeTest(theChannel, displayMode);
|
|
SetContentCharsetTest(theChannel, displayMode);
|
|
GetContentCharsetTest(theChannel, displayMode);
|
|
SetContentLengthTest(theChannel, displayMode);
|
|
GetContentLengthTest(theChannel, displayMode);
|
|
}
|
|
|
|
void CnsIChannelTests::OnStartTests(UINT nMenuID)
|
|
{
|
|
theSpec = "http://www.netscape.com";
|
|
theChannel = GetChannelObject(theSpec);
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. Test not run.", 1);
|
|
return;
|
|
}
|
|
switch(nMenuID)
|
|
{
|
|
case ID_INTERFACES_NSICHANNEL_RUNALLTESTS :
|
|
RunAllTests();
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_SETORIGINALURI :
|
|
SetOriginalURITest(theChannel, theSpec, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETORIGINALURI :
|
|
GetOriginalURITest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETURI :
|
|
GetURITest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_SETOWNER :
|
|
SetOwnerTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETOWNER :
|
|
GetOwnerTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_SETNOTIFICATIONS :
|
|
SetNotificationsTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETNOTIFICATIONS :
|
|
GetNotificationsTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETSECURITYINFO :
|
|
AsyncOpenTest(theChannel, 1);
|
|
GetSecurityInfoTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_SETCONTENTTYPE :
|
|
AsyncOpenTest(theChannel, 1);
|
|
SetContentTypeTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETCONTENTTYPE :
|
|
AsyncOpenTest(theChannel, 1);
|
|
GetContentTypeTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_SETCONTENTCHARSET :
|
|
AsyncOpenTest(theChannel, 1);
|
|
SetContentCharsetTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETCONTENTCHARSET :
|
|
AsyncOpenTest(theChannel, 1);
|
|
GetContentCharsetTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_SETCONTENTLENGTH :
|
|
AsyncOpenTest(theChannel, 1);
|
|
SetContentLengthTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_GETCONTENTLENGTH :
|
|
AsyncOpenTest(theChannel, 1);
|
|
GetContentLengthTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_OPEN :
|
|
OpenTest(theChannel, 2);
|
|
break ;
|
|
case ID_INTERFACES_NSICHANNEL_ASYNCOPEN :
|
|
AsyncOpenTest(theChannel, 2);
|
|
break ;
|
|
}
|
|
}
|
|
|
|
void CnsIChannelTests::RunAllTests()
|
|
{
|
|
int i;
|
|
|
|
for (i=0; i<10; i++)
|
|
{
|
|
theSpec = ChannelTable[i].theURL;
|
|
theChannel = GetChannelObject(theSpec);
|
|
if (!theChannel)
|
|
{
|
|
QAOutput("Didn't get nsIChannel object. RunAllTests not run.", 2);
|
|
return;
|
|
}
|
|
QAOutput("\nStart nsIChannel Tests: ");
|
|
SetOriginalURITest(theChannel, theSpec, 1);
|
|
GetOriginalURITest(theChannel, 1);
|
|
GetURITest(theChannel, 1);
|
|
SetOwnerTest(theChannel, 1);
|
|
GetOwnerTest(theChannel, 1);
|
|
SetNotificationsTest(theChannel, 1);
|
|
GetNotificationsTest(theChannel, 1);
|
|
AsyncOpenTest(theChannel, 1);
|
|
// PostAsyncOpenTests() called from nsIRequestObserver::OnStartRequest (in BrowserImpl.cpp)
|
|
QAOutput("\n");
|
|
}
|
|
} |