Add module loader "resolve" hook for local file system to test the loader in JSC...
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / pathname-resolve.js
1 //@ skip
2 // To execute this test, need to specify the JSC_exposeInternalModuleLoader environment variable and execute it on non Windows platform.
3 function shouldBe(actual, expected) {
4     if (actual !== expected)
5         throw new Error(`bad value: ${String(actual)}`);
6 }
7
8 function shouldResolve(name, referrer, expected)
9 {
10     var promise = Loader.resolve(name, referrer);
11     return promise.then(function (actual) {
12         shouldBe(actual, expected);
13     });
14 }
15
16 function shouldThrow(name, referrer, errorMessage)
17 {
18     var notThrown = false;
19     return Loader.resolve(name, referrer).then(function (error) {
20         notThrown = true;
21     }).catch(function (error) {
22         shouldBe(String(error), errorMessage);
23     }).then(function () {
24         if (notThrown)
25             throw new Error("not thrown");
26     });
27 }
28
29 var error = null;
30
31 // On windows platform, all "/" becomes "\".
32 Promise.all([
33     shouldResolve('tmp.js', '/home/WebKit/', '/home/WebKit/tmp.js'),
34     shouldResolve('tmp.js', '/home/', '/home/tmp.js'),
35     shouldResolve('/tmp.js', '/home/WebKit/', '/tmp.js'),
36     shouldResolve('///tmp.js', '/home/WebKit/', '/tmp.js'),
37     shouldResolve('.///tmp.js', '/home/WebKit/', '/home/WebKit/tmp.js'),
38     shouldResolve('./../tmp.js', '/home/WebKit/', '/home/tmp.js'),
39     shouldResolve('./../../tmp.js', '/home/WebKit/', '/tmp.js'),
40     shouldResolve('./../../../tmp.js', '/home/WebKit/', '/tmp.js'),
41     shouldResolve('./../../home/../tmp.js', '/home/WebKit/', '/tmp.js'),
42     shouldResolve('./../../../home/WebKit/../tmp.js', '/home/WebKit/', '/home/tmp.js'),
43     shouldResolve('../home/WebKit/tmp.js', '/home/WebKit/', '/home/home/WebKit/tmp.js'),
44     shouldResolve('../home/WebKit/../tmp.js', '/home/WebKit/', '/home/home/tmp.js'),
45     shouldResolve('./tmp.js', '/home/WebKit/hello.js', '/home/WebKit/tmp.js'),
46
47     shouldResolve('./tmp.js', 'C:/', 'C:/tmp.js'),
48     shouldResolve('./tmp.js', 'C:/home/', 'C:/home/tmp.js'),
49     shouldResolve('../tmp.js', 'C:/home/', 'C:/tmp.js'),
50     shouldResolve('../../tmp.js', 'C:/home/', 'C:/tmp.js'),
51     shouldResolve('./hello/tmp.js', 'C:/home/', 'C:/home/hello/tmp.js'),
52     shouldResolve('/tmp.js', 'C:/home/', 'C:/tmp.js'),
53
54     shouldThrow('/tmp.js', '', `Error: Could not resolve the referrer name ''.`),
55     shouldThrow('/tmp.js', 'hello', `Error: Could not resolve the referrer name 'hello'.`),
56     shouldThrow('tmp.js', 'hello', `Error: Could not resolve the referrer name 'hello'.`),
57 ]).catch(function (e) {
58     error = e;
59 });
60
61 // Force to run all pending tasks.
62 drainMicrotasks();
63 if (error)
64     throw error;