ImportMeta.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
  6. var tests = [
  7. {
  8. name: "Shape of import.meta object",
  9. body: function() {
  10. WScript.RegisterModuleSource('t1.js', `
  11. assert.areEqual('object', typeof import.meta, 'typeof import.meta === "object"');
  12. import.meta.prop = 'prop';
  13. assert.areEqual('prop', import.meta.prop, 'import.meta is mutable');
  14. `);
  15. WScript.LoadScriptFile('t1.js', 'module');
  16. }
  17. },
  18. {
  19. name: "Each module has a unique import.meta object",
  20. body: function() {
  21. WScript.RegisterModuleSource('t2.js', `
  22. export function getImportMeta() {
  23. return import.meta;
  24. }
  25. `);
  26. WScript.RegisterModuleSource('t3.js', `
  27. export let getImportMetaArrow = () => import.meta;
  28. `);
  29. WScript.RegisterModuleSource('t4.js', `
  30. export let importmeta = import.meta;
  31. `);
  32. WScript.RegisterModuleSource('t5.js', `
  33. function foo() {
  34. return import.meta;
  35. }
  36. assert.areEqual(import.meta, foo(), "Each module has a unique import.meta object");
  37. import { getImportMeta } from 't2.js';
  38. let t2_import_meta = getImportMeta();
  39. import { getImportMetaArrow } from 't3.js';
  40. let t3_import_meta = getImportMetaArrow();
  41. import { importmeta as t4_import_meta } from 't4.js';
  42. assert.areEqual('object', typeof t2_import_meta, 'typeof t2_import_meta === "object"');
  43. assert.isTrue(t2_import_meta !== import.meta, "t2_import_meta !== import.meta");
  44. assert.areEqual('object', typeof t3_import_meta, 'typeof t3_import_meta === "object"');
  45. assert.isTrue(t3_import_meta !== import.meta, "t3_import_meta !== import.meta");
  46. assert.areEqual('object', typeof t4_import_meta, 'typeof t4_import_meta === "object"');
  47. assert.isTrue(t4_import_meta !== import.meta, "t4_import_meta !== import.meta");
  48. `);
  49. WScript.LoadScriptFile('t5.js', 'module');
  50. }
  51. },
  52. {
  53. name: "The only metaproperty on import is meta",
  54. body: function() {
  55. WScript.RegisterModuleSource('t6.js', `
  56. function foo() {
  57. return import.notmeta;
  58. }
  59. `);
  60. assert.throws(()=>WScript.LoadScriptFile('t6.js', 'module'));
  61. }
  62. },
  63. {
  64. name: "Non-module goal symbol throws early syntax error",
  65. body: function() {
  66. assert.throws(()=>WScript.LoadScript('import.meta', 'samethread'));
  67. assert.throws(()=>WScript.LoadScript('function foo() { return import.meta; }', 'samethread'));
  68. }
  69. },
  70. {
  71. name: "import.meta is not an L value",
  72. body: function() {
  73. WScript.RegisterModuleSource('t7.js', `
  74. import.meta = {};
  75. `);
  76. WScript.RegisterModuleSource('t8.js', `
  77. import.meta++;
  78. `);
  79. assert.throws(()=>WScript.LoadScriptFile('t7.js', 'module'));
  80. assert.throws(()=>WScript.LoadScriptFile('t8.js', 'module'));
  81. }
  82. },
  83. {
  84. name: "import.meta is not valid inside eval",
  85. body: function() {
  86. WScript.RegisterModuleSource('t9.js', `
  87. assert.throws(()=>eval('import.meta'));
  88. `);
  89. WScript.LoadScriptFile('t9.js', 'module');
  90. }
  91. },
  92. {
  93. name: "import.meta is not valid when located in parsed Function body or param list",
  94. body: function() {
  95. WScript.RegisterModuleSource('t10.js', `
  96. assert.throws(()=>Function('import.meta'));
  97. `);
  98. WScript.LoadScriptFile('t10.js', 'module');
  99. WScript.RegisterModuleSource('t11.js', `
  100. assert.throws(()=>Function('a = import.meta', ''));
  101. `);
  102. WScript.LoadScriptFile('t11.js', 'module');
  103. }
  104. },
  105. ];
  106. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });