aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/module/moduleloader_test.html
diff options
context:
space:
mode:
Diffstat (limited to 'contexts/data/lib/closure-library/closure/goog/module/moduleloader_test.html')
-rw-r--r--contexts/data/lib/closure-library/closure/goog/module/moduleloader_test.html436
1 files changed, 0 insertions, 436 deletions
diff --git a/contexts/data/lib/closure-library/closure/goog/module/moduleloader_test.html b/contexts/data/lib/closure-library/closure/goog/module/moduleloader_test.html
deleted file mode 100644
index 470fa24..0000000
--- a/contexts/data/lib/closure-library/closure/goog/module/moduleloader_test.html
+++ /dev/null
@@ -1,436 +0,0 @@
-<html>
-<!--
-Copyright 2009 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.
--->
-
-<!--
- A regression test for goog.module.ModuleLoader.
-
- Unlike the unit tests for goog.module.ModuleManager, this uses
- asynchronous test cases and real XHRs.
-
- Author: nicksantos@google.com (Nick Santos)
--->
-<head>
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<title>JsUnit tests for goog.module.ModuleLoader</title>
-<script src='../base.js'></script>
-<script>
-
-goog.require('goog.array');
-goog.require('goog.dom');
-goog.require('goog.functions');
-goog.require('goog.module.ModuleLoader');
-goog.require('goog.module.ModuleManager');
-goog.require('goog.module.ModuleManager.CallbackType');
-goog.require('goog.object');
-goog.require('goog.testing.AsyncTestCase');
-goog.require('goog.testing.PropertyReplacer');
-goog.require('goog.testing.events.EventObserver');
-goog.require('goog.testing.jsunit');
-goog.require('goog.testing.recordFunction');
-goog.require('goog.userAgent.product');
-
-</script>
-</head>
-<body>
-
-<b>Note:</b>: If you are running this test off local disk on Chrome, it
-will fail unless you start Chrome with
-<code>--allow-file-access-from-files</code>.
-
-<script>
-
-var modA1Loaded = false;
-var modA2Loaded = false;
-var modB1Loaded = false;
-
-var moduleLoader = null;
-var moduleManager = null;
-var stubs = new goog.testing.PropertyReplacer();
-
-var testCase = goog.testing.AsyncTestCase.createAndInstall(document.title);
-testCase.stepTimeout = 5 * 1000; // 5 seconds
-
-var EventType = goog.module.ModuleLoader.EventType;
-var observer;
-
-testCase.setUp = function() {
- modA1Loaded = false;
- modA2Loaded = false;
- modB1Loaded = false;
-
- goog.provide = goog.nullFunction;
- moduleManager = goog.module.ModuleManager.getInstance();
- stubs.replace(moduleManager, 'getBackOff_', goog.functions.constant(0));
-
- moduleLoader = new goog.module.ModuleLoader();
- observer = new goog.testing.events.EventObserver();
-
- goog.events.listen(
- moduleLoader, goog.object.getValues(EventType), observer);
-
- moduleManager.setLoader(moduleLoader);
- moduleManager.setAllModuleInfo({
- 'modA': [],
- 'modB': ['modA']
- });
- moduleManager.setModuleUris({
- 'modA': ['testdata/modA_1.js', 'testdata/modA_2.js'],
- 'modB': ['testdata/modB_1.js']
- });
-
- assertNotLoaded('modA');
- assertNotLoaded('modB');
- assertFalse(modA1Loaded);
-};
-
-testCase.tearDown = function() {
- stubs.reset();
-
- // Ensure that the module manager was created.
- assertNotNull(goog.module.ModuleManager.getInstance());
- moduleManager = goog.module.ModuleManager.instance_ = null;
-
- // tear down the module loaded flag.
- modA1Loaded = false;
-
- // Remove all the fake scripts.
- var scripts = goog.array.clone(
- document.getElementsByTagName('SCRIPT'));
- for (var i = 0; i < scripts.length; i++) {
- if (scripts[i].src.indexOf('testdata') != -1) {
- goog.dom.removeNode(scripts[i]);
- }
- }
-};
-
-function testLoadModuleA() {
- testCase.waitForAsync('wait for module A load');
- moduleManager.execOnLoad('modA', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertNotLoaded('modB');
- assertTrue(modA1Loaded);
-
- assertEquals('EVALUATE_CODE',
- 0, observer.getEvents(EventType.EVALUATE_CODE).length);
- assertEquals('REQUEST_SUCCESS',
- 1, observer.getEvents(EventType.REQUEST_SUCCESS).length);
- assertArrayEquals(
- ['modA'], observer.getEvents(EventType.REQUEST_SUCCESS)[0].moduleIds);
- assertEquals('REQUEST_ERROR',
- 0, observer.getEvents(EventType.REQUEST_ERROR).length);
- });
-}
-
-function testLoadModuleB() {
- testCase.waitForAsync('wait for module B load');
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertLoaded('modB');
- assertTrue(modA1Loaded);
- });
-}
-
-function testLoadDebugModuleA() {
- testCase.waitForAsync('wait for module A load');
- moduleLoader.setDebugMode(true);
- moduleManager.execOnLoad('modA', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertNotLoaded('modB');
- assertTrue(modA1Loaded);
- });
-}
-
-function testLoadDebugModuleB() {
- testCase.waitForAsync('wait for module B load');
- moduleLoader.setDebugMode(true);
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertLoaded('modB');
- assertTrue(modA1Loaded);
- });
-}
-
-function testLoadDebugModuleAThenB() {
- // Swap the script tags of module A, to introduce a race condition.
- // See the comments on this in ModuleLoader's debug loader.
- moduleManager.setModuleUris({
- 'modA': ['testdata/modA_2.js', 'testdata/modA_1.js'],
- 'modB': ['testdata/modB_1.js']
- });
- testCase.waitForAsync('wait for module B load');
- moduleLoader.setDebugMode(true);
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertLoaded('modB');
-
- var scripts = goog.array.clone(
- document.getElementsByTagName('SCRIPT'));
- var seenLastScriptOfModuleA = false;
- for (var i = 0; i < scripts.length; i++) {
- var uri = scripts[i].src;
- if (uri.indexOf('modA_1.js') >= 0) {
- seenLastScriptOfModuleA = true;
- } else if (uri.indexOf('modB') >= 0) {
- assertTrue(seenLastScriptOfModuleA);
- }
- }
- });
-}
-
-function testSourceInjection() {
- testCase.waitForAsync('wait for module B load');
- moduleLoader.setSourceUrlInjection(true);
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
-
- assertTrue(!!throwErrorInModuleB);
- var ex = null;
- try {
- throwErrorInModuleB();
- } catch (e) {
- ex = e;
- }
-
- assertNotNull(ex);
-
- // Chrome is currently the only browser that uses sourceURL
- // when serializing stack traces.
- if (goog.userAgent.product.CHROME) {
- assertContains('modB_1.js', ex.stack.toString());
- }
- });
-}
-
-function testModuleLoaderRecursesTooDeep(opt_numModules) {
- // There was a bug in the module loader where it would retry recursively
- // whenever there was a synchronous failure in the module load. When you
- // asked for modB, it would try to load its dependency modA. When modA
- // failed, it would move onto modB, and then start over, repeating until it
- // ran out of stack.
- var numModules = opt_numModules || 1;
- var uris = {};
- var deps = {};
- var mods = [];
- for (var num = 0; num < numModules; num++) {
- var modName = 'mod' + num;
- mods.unshift(modName);
- uris[modName] = [];
- deps[modName] = num ? ['mod' + (num - 1)] : [];
- for (var i = 0; i < 5; i++) {
- uris[modName].push(
- 'http://www.google.com/crossdomain' + num + 'x' + i + '.js');
- }
- }
-
- moduleManager.setAllModuleInfo(deps);
- moduleManager.setModuleUris(uris);
-
- // Make all XHRs throw an error, so that we test the error-handling
- // functionality.
- var oldXmlHttp = goog.net.XmlHttp;
- stubs.set(goog.net, 'XmlHttp', function() {
- return {
- open: goog.functions.error('mock error'),
- abort: goog.nullFunction
- };
- });
- goog.object.extend(goog.net.XmlHttp, oldXmlHttp);
-
- var errorCount = 0;
- var errorIds = [];
- var errorHandler = function(ignored, modId) {
- errorCount++;
- errorIds.push(modId);
- };
- moduleManager.registerCallback(
- goog.module.ModuleManager.CallbackType.ERROR,
- errorHandler);
-
- moduleManager.execOnLoad(mods[0], function() {
- fail('modB should not load successfully');
- });
-
- assertEquals(mods.length, errorCount);
-
- goog.array.sort(mods);
- goog.array.sort(errorIds);
- assertArrayEquals(mods, errorIds);
-
- assertArrayEquals([], moduleManager.requestedModuleIdsQueue_);
- assertArrayEquals([], moduleManager.userInitiatedLoadingModuleIds_);
-}
-
-function testModuleLoaderRecursesTooDeep2modules() {
- testModuleLoaderRecursesTooDeep(2);
-}
-
-function testModuleLoaderRecursesTooDeep3modules() {
- testModuleLoaderRecursesTooDeep(3);
-}
-
-function testModuleLoaderRecursesTooDeep4modules() {
- testModuleLoaderRecursesTooDeep(3);
-}
-
-function testErrback() {
- // Don't run this test on IE, because the way the test runner catches
- // errors on IE plays badly with the simulated errors in the test.
- if (goog.userAgent.IE) return;
-
- // Modules will throw an exception if this boolean is set to true.
- modA1Loaded = true;
-
- var errorHandler = function() {
- testCase.continueTesting();
- assertNotLoaded('modA');
- };
- moduleManager.registerCallback(
- goog.module.ModuleManager.CallbackType.ERROR,
- errorHandler);
-
- moduleManager.execOnLoad('modA', function() {
- fail('modA should not load successfully');
- });
-
- testCase.waitForAsync('wait for the error callback');
-}
-
-function testPrefetchThenLoadModuleA() {
- moduleManager.prefetchModule('modA');
- stubs.set(goog.net.BulkLoader.prototype, 'load', function() {
- fail('modA should not be reloaded')
- });
-
- testCase.waitForAsync('wait for module A load');
- moduleManager.execOnLoad('modA', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertEquals('REQUEST_SUCCESS',
- 1, observer.getEvents(EventType.REQUEST_SUCCESS).length);
- assertArrayEquals(
- ['modA'], observer.getEvents(EventType.REQUEST_SUCCESS)[0].moduleIds);
- assertEquals('REQUEST_ERROR',
- 0, observer.getEvents(EventType.REQUEST_ERROR).length);
- });
-}
-
-function testPrefetchThenLoadModuleB() {
- moduleManager.prefetchModule('modB');
- stubs.set(goog.net.BulkLoader.prototype, 'load', function() {
- fail('modA and modB should not be reloaded')
- });
-
- testCase.waitForAsync('wait for module B load');
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertLoaded('modB');
- assertEquals('REQUEST_SUCCESS',
- 2, observer.getEvents(EventType.REQUEST_SUCCESS).length);
- assertArrayEquals(
- ['modA'], observer.getEvents(EventType.REQUEST_SUCCESS)[0].moduleIds);
- assertArrayEquals(
- ['modB'], observer.getEvents(EventType.REQUEST_SUCCESS)[1].moduleIds);
- assertEquals('REQUEST_ERROR',
- 0, observer.getEvents(EventType.REQUEST_ERROR).length);
- });
-}
-
-function testPrefetchModuleAThenLoadModuleB() {
- moduleManager.prefetchModule('modA');
-
- testCase.waitForAsync('wait for module A load');
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertLoaded('modB');
- assertEquals('REQUEST_SUCCESS',
- 2, observer.getEvents(EventType.REQUEST_SUCCESS).length);
- assertArrayEquals(
- ['modA'], observer.getEvents(EventType.REQUEST_SUCCESS)[0].moduleIds);
- assertArrayEquals(
- ['modB'], observer.getEvents(EventType.REQUEST_SUCCESS)[1].moduleIds);
- assertEquals('REQUEST_ERROR',
- 0, observer.getEvents(EventType.REQUEST_ERROR).length);
- });
-}
-
-function testLoadModuleBThenPrefetchModuleA() {
- testCase.waitForAsync('wait for module A load');
- moduleManager.execOnLoad('modB', function() {
- testCase.continueTesting();
- assertLoaded('modA');
- assertLoaded('modB');
- assertEquals('REQUEST_SUCCESS',
- 2, observer.getEvents(EventType.REQUEST_SUCCESS).length);
- assertArrayEquals(
- ['modA'], observer.getEvents(EventType.REQUEST_SUCCESS)[0].moduleIds);
- assertArrayEquals(
- ['modB'], observer.getEvents(EventType.REQUEST_SUCCESS)[1].moduleIds);
- assertEquals('REQUEST_ERROR',
- 0, observer.getEvents(EventType.REQUEST_ERROR).length);
- assertThrows('Module load already requested: modB',
- function() {
- moduleManager.prefetchModule('modA')
- });
- });
-}
-
-function testPrefetchModuleWithBatchModeEnabled() {
- moduleManager.setBatchModeEnabled(true);
- assertThrows('Modules prefetching is not supported in batch mode',
- function() {
- moduleManager.prefetchModule('modA');
- });
-}
-
-function testLoadErrorCallbackExecutedWhenPrefetchFails() {
- // Make all XHRs throw an error, so that we test the error-handling
- // functionality.
- var oldXmlHttp = goog.net.XmlHttp;
- stubs.set(goog.net, 'XmlHttp', function() {
- return {
- open: goog.functions.error('mock error'),
- abort: goog.nullFunction
- };
- });
- goog.object.extend(goog.net.XmlHttp, oldXmlHttp);
-
- var errorCount = 0;
- var errorHandler = function() {
- errorCount++;
- };
- moduleManager.registerCallback(
- goog.module.ModuleManager.CallbackType.ERROR,
- errorHandler);
-
- moduleLoader.prefetchModule('modA', moduleManager.moduleInfoMap_['modA']);
- moduleLoader.loadModules(['modA'], moduleManager.moduleInfoMap_,
- function() {
- fail('modA should not load successfully')
- }, errorHandler);
-
- assertEquals(1, errorCount);
-}
-
-function assertLoaded(id) {
- assertTrue(moduleManager.getModuleInfo(id).isLoaded());
-}
-
-function assertNotLoaded(id) {
- assertFalse(moduleManager.getModuleInfo(id).isLoaded());
-}
-
-</script>
-</body>
-</html>