ModuleTests.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Jint.Runtime;
  2. using Jint.Runtime.Modules;
  3. using System;
  4. using Xunit;
  5. using Xunit.Sdk;
  6. namespace Jint.Tests.Test262.Language;
  7. public class ModuleTests : Test262Test
  8. {
  9. [Theory(DisplayName = "language\\module-code")]
  10. [MemberData(nameof(SourceFiles), "language\\module-code", false)]
  11. [MemberData(nameof(SourceFiles), "language\\module-code", true, Skip = "Skipped")]
  12. protected void ModuleCode(SourceFile sourceFile)
  13. {
  14. RunModuleTest(sourceFile);
  15. }
  16. [Theory(DisplayName = "language\\export")]
  17. [MemberData(nameof(SourceFiles), "language\\export", false)]
  18. [MemberData(nameof(SourceFiles), "language\\export", true, Skip = "Skipped")]
  19. protected void Export(SourceFile sourceFile)
  20. {
  21. RunModuleTest(sourceFile);
  22. }
  23. [Theory(DisplayName = "language\\import")]
  24. [MemberData(nameof(SourceFiles), "language\\import", false)]
  25. [MemberData(nameof(SourceFiles), "language\\import", true, Skip = "Skipped")]
  26. protected void Import(SourceFile sourceFile)
  27. {
  28. RunModuleTest(sourceFile);
  29. }
  30. private static void RunModuleTest(SourceFile sourceFile)
  31. {
  32. if (sourceFile.Skip)
  33. {
  34. return;
  35. }
  36. var code = sourceFile.Code;
  37. var options = new Options();
  38. options.Host.Factory = _ => new ModuleTestHost();
  39. options.Modules.Enabled = true;
  40. options.WithModuleLoader(new DefaultModuleLoader(null));
  41. var engine = new Engine(options);
  42. var negative = code.IndexOf("negative:", StringComparison.OrdinalIgnoreCase) != -1;
  43. string lastError = null;
  44. try
  45. {
  46. engine.LoadModule(sourceFile.FullPath);
  47. }
  48. catch (JavaScriptException ex)
  49. {
  50. lastError = ex.ToString();
  51. }
  52. catch (Exception ex)
  53. {
  54. lastError = ex.ToString();
  55. }
  56. if (!negative && !string.IsNullOrWhiteSpace(lastError))
  57. {
  58. throw new XunitException(lastError);
  59. }
  60. }
  61. }