DefaultModuleResolverTests.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Jint.Runtime.Modules;
  2. namespace Jint.Tests.Runtime.Modules;
  3. public class DefaultModuleLoaderTests
  4. {
  5. [Theory]
  6. [InlineData("./other.js", @"file:///project/folder/other.js")]
  7. [InlineData("../model/other.js", @"file:///project/model/other.js")]
  8. [InlineData("/project/model/other.js", @"file:///project/model/other.js")]
  9. [InlineData("file:///project/model/other.js", @"file:///project/model/other.js")]
  10. public void ShouldResolveRelativePaths(string specifier, string expectedUri)
  11. {
  12. var resolver = new DefaultModuleLoader("file:///project");
  13. var resolved = resolver.Resolve("file:///project/folder/script.js", specifier);
  14. Assert.Equal(specifier, resolved.Specifier);
  15. Assert.Equal(expectedUri, resolved.Key);
  16. Assert.Equal(expectedUri, resolved.Uri?.AbsoluteUri);
  17. Assert.Equal(SpecifierType.RelativeOrAbsolute, resolved.Type);
  18. }
  19. [Theory]
  20. [InlineData("./../../other.js")]
  21. [InlineData("../../model/other.js")]
  22. [InlineData("/model/other.js")]
  23. [InlineData("file:///etc/secret.js")]
  24. public void ShouldRejectPathsOutsideOfBasePath(string specifier)
  25. {
  26. var resolver = new DefaultModuleLoader("file:///project");
  27. var exc = Assert.Throws<ModuleResolutionException>(() => resolver.Resolve("file:///project/folder/script.js", specifier));
  28. Assert.StartsWith(exc.ResolverAlgorithmError, "Unauthorized Module Path");
  29. Assert.StartsWith(exc.Specifier, specifier);
  30. }
  31. [Fact]
  32. public void ShouldResolveBareSpecifiers()
  33. {
  34. var resolver = new DefaultModuleLoader("/");
  35. var resolved = resolver.Resolve(null, "my-module");
  36. Assert.Equal("my-module", resolved.Specifier);
  37. Assert.Equal("my-module", resolved.Key);
  38. Assert.Equal(null, resolved.Uri?.AbsoluteUri);
  39. Assert.Equal(SpecifierType.Bare, resolved.Type);
  40. }
  41. }