diff --git a/src/runtime/TraceurLoader.js b/src/runtime/TraceurLoader.js index bd718d131..14aaec215 100644 --- a/src/runtime/TraceurLoader.js +++ b/src/runtime/TraceurLoader.js @@ -141,14 +141,24 @@ export class TraceurLoader extends Loader { } fetch(load) { - return new Promise((resolve, reject) => { - if (!load) - reject(new TypeError('fetch requires argument object')); - else if (!load.address || typeof load.address !== 'string') - reject(new TypeError('fetch({address}) missing required string.')); + if (!load) + return Promise.reject(new TypeError('fetch requires argument object')); + + if (!load.address || typeof load.address !== 'string') + return Promise.reject(new TypeError( + 'fetch({address}) missing required string.')); + + return (new Promise((resolve, reject) => { + this.fileLoader_.load(load.address, resolve, reject); + })) + .catch((e) => { + if (load.address.slice(-3) !== '.js') + return new Promise((resolve, reject) => { + this.fileLoader_.load(load.address + '.js', resolve, reject); + }) else - this.fileLoader_.load(load.address, resolve, reject); - }); + return Promise.reject(e); + }) } // Synchronous diff --git a/test/unit/runtime/Loader.js b/test/unit/runtime/Loader.js index cdd05c1b4..a8c276305 100644 --- a/test/unit/runtime/Loader.js +++ b/test/unit/runtime/Loader.js @@ -145,6 +145,34 @@ suite('Loader.js', function() { }).catch(done); }); + test('LoaderModuleWithSubdirNoPostfix', function(done) { + var code = + 'import * as d from "./test/unit/runtime/subdir/test_d";\n' + + '\n' + + 'export var arr = [d.name, d.e.name];\n'; + + var result = getTestLoader().module(code, {}).then( + function(module) { + assert.equal('D', module.arr[0]); + assert.equal('E', module.arr[1]); + done(); + }).catch(done); + }); + + test('LoaderModuleFailToFindFile', function(done) { + var code = + 'import * as d from "./test/unit/runtime/subdir/test_is_not_here";\n' + + '\n' + + 'export var arr = [d.name, d.e.name];\n'; + var result = getTestLoader().module(code, {}).then( + function(value) { + fail('Should not have succeeded'); + done(); + }, function(ex) { + done(); + }).catch(done); + }); + test('LoaderModuleFail', function(done) { var code = 'DeliboratelyUndefined; \n'; var result = getTestLoader().module(code, {}).then(