114 lines
3.6 KiB
JavaScript
114 lines
3.6 KiB
JavaScript
// Copyright 2006 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.
|
|
|
|
|
|
/**
|
|
* @fileoverview Unit tests for Closure's base.js's goog.module support.
|
|
*/
|
|
|
|
goog.module('goog.baseModuleTest');
|
|
goog.module.declareTestMethods();
|
|
goog.setTestOnly('goog.baseModuleTest');
|
|
|
|
|
|
// Used to test dynamic loading works, see testRequire*
|
|
var Timer = goog.require('goog.Timer');
|
|
var Replacer = goog.require('goog.testing.PropertyReplacer');
|
|
var jsunit = goog.require('goog.testing.jsunit');
|
|
|
|
var testModule = goog.require('goog.test_module');
|
|
|
|
var stubs = new Replacer();
|
|
|
|
function assertProvideFails(namespace) {
|
|
assertThrows('goog.provide(' + namespace + ') should have failed',
|
|
goog.partial(goog.provide, namespace));
|
|
}
|
|
|
|
function assertModuleFails(namespace) {
|
|
assertThrows('goog.module(' + namespace + ') should have failed',
|
|
goog.partial(goog.module, namespace));
|
|
}
|
|
|
|
exports = {
|
|
teardown: function() {
|
|
stubs.reset();
|
|
},
|
|
|
|
testModuleDecl: function() {
|
|
// assert that goog.module doesn't modify the global namespace
|
|
assertUndefined('module failed to protect global namespace: ' +
|
|
'goog.baseModuleTest', goog.baseModuleTest);
|
|
},
|
|
|
|
testModuleScoping: function() {
|
|
// assert test functions are exported to the global namespace
|
|
assertNotUndefined('module failed: testModule', testModule);
|
|
assertTrue('module failed: testModule',
|
|
goog.isFunction(goog.global.testModuleScoping));
|
|
},
|
|
|
|
testProvideStrictness1: function() {
|
|
assertModuleFails('goog.xy'); // not in goog.loadModule
|
|
|
|
assertProvideFails('goog.baseModuleTest'); // this file.
|
|
},
|
|
|
|
testProvideStrictness2: function() {
|
|
// goog.module "provides" a namespace
|
|
assertTrue(goog.isProvided_('goog.baseModuleTest'));
|
|
},
|
|
|
|
testExportSymbol: function() {
|
|
// Assert that export symbol works from within a goog.module.
|
|
var date = new Date();
|
|
|
|
assertTrue(typeof nodots == 'undefined');
|
|
goog.exportSymbol('nodots', date);
|
|
assertEquals(date, nodots); // globals are accessible from within a module.
|
|
nodots = undefined;
|
|
},
|
|
|
|
//=== tests for Require logic ===
|
|
|
|
testLegacyRequire: function() {
|
|
// goog.Timer is a legacy module loaded above
|
|
assertNotUndefined('goog.Timer should be available', goog.Timer);
|
|
|
|
// Verify that a legacy module can be aliases with goog.require
|
|
assertTrue('Timer should be the goog.Timer namespace object',
|
|
goog.Timer === Timer);
|
|
|
|
// and its dependencies
|
|
assertNotUndefined(
|
|
'goog.events.EventTarget should be available',
|
|
/** @suppress {missingRequire} */ goog.events.EventTarget);
|
|
},
|
|
|
|
testRequireModule: function() {
|
|
assertEquals('module failed to export legacy namespace: ' +
|
|
'goog.test_module', testModule, goog.test_module);
|
|
assertUndefined('module failed to protect global namespace: ' +
|
|
'goog.test_module_dep', goog.test_module_dep);
|
|
|
|
// The test module is available under its alias
|
|
assertNotUndefined('testModule is loaded', testModule);
|
|
assertTrue('module failed: testModule', goog.isFunction(testModule));
|
|
}
|
|
};
|
|
|
|
exports.testThisInModule = (function() {
|
|
assertEquals(this, goog.global);
|
|
}).bind(this);
|