//@ skip // To execute this test, need to specify the JSC_exposeInternalModuleLoader environment variable and execute it on non Windows platform. function shouldBe(actual, expected) { if (actual !== expected) throw new Error(`bad value: ${String(actual)}`); } function shouldResolve(name, referrer, expected) { var promise = Loader.resolve(name, referrer); return promise.then(function (actual) { shouldBe(actual, expected); }); } function shouldThrow(name, referrer, errorMessage) { var notThrown = false; return Loader.resolve(name, referrer).then(function (error) { notThrown = true; }).catch(function (error) { shouldBe(String(error), errorMessage); }).then(function () { if (notThrown) throw new Error("not thrown"); }); } var error = null; // On windows platform, all "/" becomes "\". Promise.all([ shouldResolve('tmp.js', '/home/WebKit/', '/home/WebKit/tmp.js'), shouldResolve('tmp.js', '/home/', '/home/tmp.js'), shouldResolve('/tmp.js', '/home/WebKit/', '/tmp.js'), shouldResolve('///tmp.js', '/home/WebKit/', '/tmp.js'), shouldResolve('.///tmp.js', '/home/WebKit/', '/home/WebKit/tmp.js'), shouldResolve('./../tmp.js', '/home/WebKit/', '/home/tmp.js'), shouldResolve('./../../tmp.js', '/home/WebKit/', '/tmp.js'), shouldResolve('./../../../tmp.js', '/home/WebKit/', '/tmp.js'), shouldResolve('./../../home/../tmp.js', '/home/WebKit/', '/tmp.js'), shouldResolve('./../../../home/WebKit/../tmp.js', '/home/WebKit/', '/home/tmp.js'), shouldResolve('../home/WebKit/tmp.js', '/home/WebKit/', '/home/home/WebKit/tmp.js'), shouldResolve('../home/WebKit/../tmp.js', '/home/WebKit/', '/home/home/tmp.js'), shouldResolve('./tmp.js', '/home/WebKit/hello.js', '/home/WebKit/tmp.js'), shouldResolve('./tmp.js', 'C:/', 'C:/tmp.js'), shouldResolve('./tmp.js', 'C:/home/', 'C:/home/tmp.js'), shouldResolve('../tmp.js', 'C:/home/', 'C:/tmp.js'), shouldResolve('../../tmp.js', 'C:/home/', 'C:/tmp.js'), shouldResolve('./hello/tmp.js', 'C:/home/', 'C:/home/hello/tmp.js'), shouldResolve('/tmp.js', 'C:/home/', 'C:/tmp.js'), shouldThrow('/tmp.js', '', `Error: Could not resolve the referrer name ''.`), shouldThrow('/tmp.js', 'hello', `Error: Could not resolve the referrer name 'hello'.`), shouldThrow('tmp.js', 'hello', `Error: Could not resolve the referrer name 'hello'.`), ]).catch(function (e) { error = e; }); // Force to run all pending tasks. drainMicrotasks(); if (error) throw error;