resourceloader: Implement modern module loading (1/2)
[lhc/web/wiklou.git] / tests / qunit / suites / resources / mediawiki / mediawiki.test.js
index fe5530b..ce4ea8b 100644 (file)
                );
        } );
 
+       QUnit.test( 'mw.loader.require', 6, function ( assert ) {
+               var module1, module2, module3, module4;
+
+               mw.loader.register( [
+                       [ 'test.module.require1', '0' ],
+                       [ 'test.module.require2', '0' ],
+                       [ 'test.module.require3', '0' ],
+                       [ 'test.module.require4', '0', [ 'test.module.require3' ] ]
+               ] );
+               mw.loader.implement( 'test.module.require1', function () {} );
+               mw.loader.implement( 'test.module.require2', function ( $, jQuery, require, module ) {
+                       module.exports = 1;
+               } );
+               mw.loader.implement( 'test.module.require3', function ( $, jQuery, require, module ) {
+                       module.exports = function () {
+                               return 'hello world';
+                       };
+               } );
+               mw.loader.implement( 'test.module.require4', function ( $, jQuery, require, module ) {
+                       var other = require( 'test.module.require3' );
+                       module.exports = {
+                               pizza: function () {
+                                       return other();
+                               }
+                       };
+               } );
+               module1 = mw.loader.require( 'test.module.require1' );
+               module2 = mw.loader.require( 'test.module.require2' );
+               module3 = mw.loader.require( 'test.module.require3' );
+               module4 = mw.loader.require( 'test.module.require4' );
+
+               assert.strictEqual( typeof module1, 'object', 'export of module with no export' );
+               assert.strictEqual( module2, 1, 'export a number' );
+               assert.strictEqual( module3(), 'hello world', 'export a function' );
+               assert.strictEqual( typeof module4.pizza, 'function', 'export an object' );
+               assert.strictEqual( module4.pizza(), 'hello world', 'module can require other modules' );
+
+               assert.throws( function () {
+                       mw.loader.require( '_badmodule' );
+               }, /is not loaded/, 'Requesting non-existent modules throws error.' );
+       } );
+
 }( mediaWiki, jQuery ) );