DefaultModuleLoaderTests.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 ShouldTriggerLoadedEvent()
  33. {
  34. var loader = new DefaultModuleLoader(ModuleTests.GetBasePath());
  35. bool triggered = false;
  36. loader.Loaded += (sender, source, module) =>
  37. {
  38. Assert.Equal(loader, sender);
  39. Assert.NotNull(source);
  40. Assert.NotNull(module);
  41. triggered = true;
  42. };
  43. var engine = new Engine(options => options.EnableModules(loader));
  44. engine.ImportModule("./modules/format-name.js");
  45. Assert.True(triggered);
  46. }
  47. [Fact]
  48. public void ShouldResolveBareSpecifiers()
  49. {
  50. var resolver = new DefaultModuleLoader("/");
  51. var resolved = resolver.Resolve(null, "my-module");
  52. Assert.Equal("my-module", resolved.Specifier);
  53. Assert.Equal("my-module", resolved.Key);
  54. Assert.Equal(null, resolved.Uri?.AbsoluteUri);
  55. Assert.Equal(SpecifierType.Bare, resolved.Type);
  56. }
  57. }