UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

173 lines (149 loc) 5.67 kB
<!DOCTYPE html> <html> <!-- Copyright 2008 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <!-- --> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.net.MultiIframeLoadMonitor</title> <script src="../base.js"></script> <script> goog.require('goog.dom'); goog.require('goog.events'); goog.require('goog.net.MultiIframeLoadMonitor'); goog.require('goog.testing.AsyncTestCase'); goog.require('goog.testing.jsunit'); </script> </head> <body> <div id="frame_parent"></div> <script> var TEST_FRAME_SRCS = ['iframeloadmonitor_test_frame.html', 'iframeloadmonitor_test_frame2.html', 'iframeloadmonitor_test_frame3.html']; // Create a new test case. var iframeLoaderTestCase = new goog.testing.AsyncTestCase(document.title); iframeLoaderTestCase.stepTimeout = 4 * 1000; // How many multpile frames finished loading iframeLoaderTestCase.multipleComplete_ = 0; iframeLoaderTestCase.numMonitors = 0; iframeLoaderTestCase.disposeCalled = 0; /** Sets up the test environment, adds tests and sets up the worker pools. */ iframeLoaderTestCase.setUpPage = function() { this.log('Setting tests up'); iframeLoaderTestCase.waitForAsync('loading iframes'); var dom = goog.dom.getDomHelper(); // Load multiple with callback var frame1 = dom.createDom('iframe'); var frame2 = dom.createDom('iframe'); var multiMonitor = new goog.net.MultiIframeLoadMonitor( [frame1, frame2], goog.bind(this.multipleCallback, this)); this.log('Loading frames at: ' + TEST_FRAME_SRCS[0] + ' and ' + TEST_FRAME_SRCS[1]); // Make sure they don't look loaded yet. assertEquals(0, this.multipleComplete_); var frameParent = dom.getElement('frame_parent'); dom.appendChild(frameParent, frame1); frame1.src = TEST_FRAME_SRCS[0]; dom.appendChild(frameParent, frame2); frame2.src = TEST_FRAME_SRCS[1]; // Load multiple with callback and content check var frame3 = dom.createDom('iframe'); var frame4 = dom.createDom('iframe'); var multiMonitor = new goog.net.MultiIframeLoadMonitor( [frame3, frame4], goog.bind(this.multipleContentCallback, this), true); this.log('Loading frames with content check at: ' + TEST_FRAME_SRCS[1] + ' and ' + TEST_FRAME_SRCS[2]); dom.appendChild(frameParent, frame3); frame3.src = TEST_FRAME_SRCS[1]; dom.appendChild(frameParent, frame4); frame4.src = TEST_FRAME_SRCS[2]; this.add(new goog.testing.TestCase.Test( 'test results', this.testResults, this)); this.add(new goog.testing.TestCase.Test( 'stopMonitoring', this.testStop, this)); }; /** Callback for the multiple frame load test case */ iframeLoaderTestCase.multipleCallback = function() { this.log('multiple frames finished loading'); this.multipleComplete_++; this.multipleCompleteNoContent_ = true; this.callbacksComplete(); }; /** Callback for the multiple frame with content load test case */ iframeLoaderTestCase.multipleContentCallback = function() { this.log('multiple frames with content finished loading'); this.multipleComplete_++; this.multipleCompleteContent_ = true; this.callbacksComplete(); }; /** Checks if all the load callbacks are done*/ iframeLoaderTestCase.callbacksComplete = function() { if (this.multipleComplete_ == 2) { iframeLoaderTestCase.continueTesting(); } } /** Tests the results. */ iframeLoaderTestCase.testResults = function() { this.log('getting test results'); assertTrue(this.multipleCompleteNoContent_); assertTrue(this.multipleCompleteContent_); }; iframeLoaderTestCase.fakeLoadMonitor = function() { // Replaces IframeLoadMonitor with a fake version that just tracks // instantiations/disposals this.loadMonitorConstructor = goog.net.IframeLoadMonitor; var that = this; goog.net.IframeLoadMonitor = function() { that.numMonitors++; return { isLoaded: function() { return false; }, dispose: function() { that.disposeCalled++; }, attachEvent: function() {} }; } goog.net.IframeLoadMonitor.LOAD_EVENT = 'ifload'; }; iframeLoaderTestCase.unfakeLoadMonitor = function() { goog.net.IframeLoadMonitor = this.loadMonitorConstructor; }; iframeLoaderTestCase.testStop = function() { // create two unloaded frames, make sure that load monitors are loaded // behind the scenes, then make sure they are disposed properly. this.fakeLoadMonitor(); var dom = goog.dom.getDomHelper(); var frames = [dom.createDom('iframe'), dom.createDom('iframe')]; var multiMonitor = new goog.net.MultiIframeLoadMonitor( frames, function() { fail("should not invoke callback for unloaded rames"); }); assertEquals(frames.length, this.numMonitors); assertEquals(0, this.disposeCalled); multiMonitor.stopMonitoring(); assertEquals(frames.length, this.disposeCalled); this.unfakeLoadMonitor(); }; /** Used by the JsUnit test runner. */ function testResults() { iframeLoaderTestCase.testResults(); } /** Used by the JsUnit test runner. */ function testDispose() { iframeLoaderTestCase.testDispose(); } /** Used by the JsUnit test runner. */ function setUpPage() { iframeLoaderTestCase.runTests(); } /** Standalone Closure Test Runner. */ if (typeof G_testRunner != 'undefined') { G_testRunner.initialize(iframeLoaderTestCase); } </script> </body> </html>