-
-
Notifications
You must be signed in to change notification settings - Fork 567
/
Copy pathDefaultModuleLoaderTests.cs
64 lines (51 loc) · 2.56 KB
/
DefaultModuleLoaderTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using Jint.Runtime.Modules;
namespace Jint.Tests.Runtime.Modules;
public class DefaultModuleLoaderTests
{
[Theory]
[InlineData("./other.js", "file:///project/folder/other.js")]
[InlineData("../model/other.js", "file:///project/model/other.js")]
[InlineData("/project/model/other.js", "file:///project/model/other.js")]
[InlineData("file:///project/model/other.js", "file:///project/model/other.js")]
public void ShouldResolveRelativePaths(string specifier, string expectedUri)
{
var resolver = new DefaultModuleLoader("file:///project");
var resolved = resolver.Resolve("file:///project/folder/script.js", new ModuleRequest(specifier, []));
Assert.Equal(specifier, resolved.ModuleRequest.Specifier);
Assert.Equal(expectedUri, resolved.Key);
Assert.Equal(expectedUri, resolved.Uri?.AbsoluteUri);
Assert.Equal(SpecifierType.RelativeOrAbsolute, resolved.Type);
}
[Fact]
public void ShouldResolveRelativeToReferencingModuleSpecifier()
{
var resolver = new DefaultModuleLoader("file:///project");
var resolved = resolver.Resolve("referencing-module", new ModuleRequest("./local-module-file.js", []));
Assert.Equal("./local-module-file.js", resolved.ModuleRequest.Specifier);
Assert.Equal("file:///project/referencing-module/local-module-file.js", resolved.Key);
Assert.Equal("file:///project/referencing-module/local-module-file.js", resolved.Uri?.AbsoluteUri);
Assert.Equal(SpecifierType.RelativeOrAbsolute, resolved.Type);
}
[Theory]
[InlineData("./../../other.js")]
[InlineData("../../model/other.js")]
[InlineData("/model/other.js")]
[InlineData("file:///etc/secret.js")]
public void ShouldRejectPathsOutsideOfBasePath(string specifier)
{
var resolver = new DefaultModuleLoader("file:///project");
var exc = Assert.Throws<ModuleResolutionException>(() => resolver.Resolve("file:///project/folder/script.js", new ModuleRequest(specifier, [])));
Assert.StartsWith(exc.ResolverAlgorithmError, "Unauthorized Module Path");
Assert.StartsWith(exc.Specifier, specifier);
}
[Fact]
public void ShouldResolveBareSpecifiers()
{
var resolver = new DefaultModuleLoader("/");
var resolved = resolver.Resolve(null, new ModuleRequest("my-module", []));
Assert.Equal("my-module", resolved.ModuleRequest.Specifier);
Assert.Equal("my-module", resolved.Key);
Assert.Equal(null, resolved.Uri?.AbsoluteUri);
Assert.Equal(SpecifierType.Bare, resolved.Type);
}
}