145 lines
4.1 KiB
JavaScript
145 lines
4.1 KiB
JavaScript
// Copyright 2007 The Closure Library Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS-IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
goog.provide('goog.net.iframeXhrTest');
|
|
goog.setTestOnly('goog.net.iframeXhrTest');
|
|
|
|
goog.require('goog.Timer');
|
|
goog.require('goog.debug.Console');
|
|
goog.require('goog.debug.LogManager');
|
|
goog.require('goog.debug.Logger');
|
|
goog.require('goog.events');
|
|
goog.require('goog.net.IframeIo');
|
|
goog.require('goog.net.XhrIo');
|
|
goog.require('goog.testing.AsyncTestCase');
|
|
goog.require('goog.testing.jsunit');
|
|
goog.require('goog.userAgent');
|
|
|
|
var c = new goog.debug.Console;
|
|
c.setCapturing(true);
|
|
goog.debug.LogManager.getRoot().setLevel(goog.debug.Logger.Level.ALL);
|
|
|
|
// Can't use exportSymbol if we want JsUnit support
|
|
top.GG_iframeFn = goog.net.IframeIo.handleIncrementalData;
|
|
|
|
// Make the dispose time short enough that it will cause the bug to appear
|
|
goog.net.IframeIo.IFRAME_DISPOSE_DELAY_MS = 0;
|
|
|
|
|
|
var fileName = 'iframe_xhr_test_response.html';
|
|
var iframeio;
|
|
|
|
// Create an async test case
|
|
var testCase = new goog.testing.AsyncTestCase(document.title);
|
|
testCase.stepTimeout = 4 * 1000;
|
|
testCase.resultCount = 0;
|
|
testCase.xhrCount = 0;
|
|
testCase.error = null;
|
|
|
|
|
|
/**
|
|
* Set up the iframe io and request the test response page.
|
|
* @this {goog.testing.AsyncTestCase}
|
|
*/
|
|
testCase.setUpPage = function() {
|
|
testCase.waitForAsync('setUpPage');
|
|
iframeio = new goog.net.IframeIo();
|
|
goog.events.listen(
|
|
iframeio, 'incrementaldata', this.onIframeData, false, this);
|
|
goog.events.listen(
|
|
iframeio, 'ready', this.onIframeReady, false, this);
|
|
iframeio.send(fileName);
|
|
};
|
|
|
|
|
|
/** Disposes the iframe object. */
|
|
testCase.tearDownPage = function() {
|
|
iframeio.dispose();
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the packets received from the Iframe incremental results.
|
|
* @this {goog.testing.AsyncTestCase}
|
|
*/
|
|
testCase.onIframeData = function(e) {
|
|
this.log('Data received : ' + e.data);
|
|
this.resultCount++;
|
|
goog.net.XhrIo.send(fileName, goog.bind(this.onXhrData, this));
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the iframe becoming ready.
|
|
* @this {goog.testing.AsyncTestCase}
|
|
*/
|
|
testCase.onIframeReady = function(e) {
|
|
this.log('Iframe ready');
|
|
var me = this;
|
|
goog.net.XhrIo.send(fileName, goog.bind(this.onXhrData, this));
|
|
};
|
|
|
|
|
|
/**
|
|
* Handles the response from an Xhr request.
|
|
* @this {goog.testing.AsyncTestCase}
|
|
*/
|
|
testCase.onXhrData = function(e) {
|
|
this.xhrCount++;
|
|
// We access status directly so that XhrLite doesn't mask the error that
|
|
// would be thrown in FF if this worked correctly.
|
|
try {
|
|
this.log('Xhr Received: ' + e.target.xhr_.status);
|
|
} catch (e) {
|
|
this.log('ERROR: ' + e.message);
|
|
this.error = e;
|
|
}
|
|
if (this.xhrCount == 4 && this.resultCount == 3) {
|
|
// Wait for the async iframe disposal to fire.
|
|
this.log('Test set up finished, waiting 500ms for iframe disposal');
|
|
goog.Timer.callOnce(goog.bind(this.continueTesting, this), 0);
|
|
}
|
|
};
|
|
|
|
|
|
/** The main test function that validates the results were as expected. */
|
|
testCase.addNewTest('testResults', function() {
|
|
assertEquals('There should be 3 data packets', 3, this.resultCount);
|
|
// 3 results + 1 ready
|
|
assertEquals('There should be 4 XHR results', 4, this.xhrCount);
|
|
if (this.error) {
|
|
throw this.error;
|
|
}
|
|
|
|
assertEquals('There should be no iframes left', 0,
|
|
document.getElementsByTagName('iframe').length);
|
|
});
|
|
|
|
|
|
/** This test only runs on GECKO browsers. */
|
|
if (goog.userAgent.GECKO) {
|
|
/** Used by the JsUnit test runner. */
|
|
var testXhrMonitorWorksForIframeIoRequests = function() {
|
|
testCase.reset();
|
|
testCase.cycleTests();
|
|
};
|
|
}
|
|
|
|
// Standalone Closure Test Runner.
|
|
if (goog.userAgent.GECKO) {
|
|
G_testRunner.initialize(testCase);
|
|
} else {
|
|
G_testRunner.setStrict(false);
|
|
}
|