DefaultModuleResolverTests.cs 1.9 KB

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