'use strict'; describe('module loader', function() { var window; beforeEach(function() { window = {}; setupModuleLoader(window); }); it('should set up namespace', function() { expect(window.angular).toBeDefined(); expect(window.angular.module).toBeDefined(); }); it('should not override existing namespace', function() { var angular = window.angular; var module = angular.module; setupModuleLoader(window); expect(window.angular).toBe(angular); expect(window.angular.module).toBe(module); }); it('should record calls', function() { var otherModule = window.angular.module('other', []); otherModule.config('otherInit'); var myModule = window.angular.module('my', ['other'], 'config'); expect(myModule. decorator('dk', 'dv'). provider('sk', 'sv'). factory('fk', 'fv'). service('a', 'aa'). value('k', 'v'). filter('f', 'ff'). directive('d', 'dd'). component('c', 'cc'). controller('ctrl', 'ccc'). config('init2'). constant('abc', 123). run('runBlock')).toBe(myModule); expect(myModule.requires).toEqual(['other']); expect(myModule._invokeQueue).toEqual([ ['$provide', 'constant', jasmine.objectContaining(['abc', 123])], ['$provide', 'decorator', jasmine.objectContaining(['dk', 'dv'])], ['$provide', 'provider', jasmine.objectContaining(['sk', 'sv'])], ['$provide', 'factory', jasmine.objectContaining(['fk', 'fv'])], ['$provide', 'service', jasmine.objectContaining(['a', 'aa'])], ['$provide', 'value', jasmine.objectContaining(['k', 'v'])], ['$filterProvider', 'register', jasmine.objectContaining(['f', 'ff'])], ['$compileProvider', 'directive', jasmine.objectContaining(['d', 'dd'])], ['$compileProvider', 'component', jasmine.objectContaining(['c', 'cc'])], ['$controllerProvider', 'register', jasmine.objectContaining(['ctrl', 'ccc'])] ]); expect(myModule._configBlocks).toEqual([ ['$injector', 'invoke', jasmine.objectContaining(['config'])], ['$injector', 'invoke', jasmine.objectContaining(['init2'])] ]); expect(myModule._runBlocks).toEqual(['runBlock']); }); it('should allow module redefinition', function() { expect(window.angular.module('a', [])).not.toBe(window.angular.module('a', [])); }); it('should complain of no module', function() { expect(function() { window.angular.module('dontExist'); }).toThrowMinErr('$injector', 'nomod', 'Module \'dontExist\' is not available! You either misspelled the module name ' + 'or forgot to load it. If registering a module ensure that you specify the dependencies as the second ' + 'argument.'); }); it('should complain if a module is called "hasOwnProperty', function() { expect(function() { window.angular.module('hasOwnProperty', []); }).toThrowMinErr('ng','badname', 'hasOwnProperty is not a valid module name'); }); it('should expose `$$minErr` on the `angular` object', function() { expect(window.angular.$$minErr).toEqual(jasmine.any(Function)); }); });