export_namespace_as.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. const tests = [
  7. {
  8. name: "Basic usage of export * as ns",
  9. body() {
  10. WScript.RegisterModuleSource("basicExport", 'export * as basic from "ModuleSimpleExport.js"');
  11. testRunner.LoadModule(
  12. `import {basic} from "basicExport";
  13. assert.areEqual(basic.ModuleSimpleExport_foo(), 'ModuleSimpleExport');`);
  14. }
  15. },
  16. {
  17. name: "Various valid exports via export * as ns",
  18. body() {
  19. WScript.RegisterModuleSource("variousExports", `
  20. export * as basic from "ModuleSimpleExport.js";
  21. export * as valid from "ValidExportStatements.js";
  22. export * as validReExports from "ValidReExportStatements.js";
  23. export * as complexReExports from "ModuleComplexReexports.js";
  24. `);
  25. testRunner.LoadModule(`
  26. function verifyPropertyDesc(obj, prop, desc, propName) {
  27. var actualDesc = Object.getOwnPropertyDescriptor(obj, prop);
  28. if (typeof propName === "undefined") { propName = prop; }
  29. assert.areEqual(desc.configurable, actualDesc.configurable, propName+"'s attribute: configurable");
  30. assert.areEqual(desc.enumerable, actualDesc.enumerable, propName+"'s attribute: enumerable");
  31. assert.areEqual(desc.writable, actualDesc.writable, propName+"'s attribute: writable");
  32. }
  33. import {basic, valid as foo, validReExports as foo1} from "variousExports";
  34. assert.areEqual(basic.ModuleSimpleExport_foo(), 'ModuleSimpleExport');
  35. assert.areEqual("Module", foo[Symbol.toStringTag], "@@toStringTag is the String value'Module'");
  36. verifyPropertyDesc(foo, Symbol.toStringTag, {configurable:false, enumerable: false, writable: false}, "Symbol.toStringTag");
  37. verifyPropertyDesc(foo, "default", {configurable:false, enumerable: true, writable: true});
  38. verifyPropertyDesc(foo, "var7", {configurable:false, enumerable: true, writable: true});
  39. verifyPropertyDesc(foo, "var6", {configurable:false, enumerable: true, writable: true});
  40. verifyPropertyDesc(foo, "var4", {configurable:false, enumerable: true, writable: true});
  41. verifyPropertyDesc(foo, "var3", {configurable:false, enumerable: true, writable: true});
  42. verifyPropertyDesc(foo, "var2", {configurable:false, enumerable: true, writable: true});
  43. verifyPropertyDesc(foo, "var1", {configurable:false, enumerable: true, writable: true});
  44. verifyPropertyDesc(foo, "foo4", {configurable:false, enumerable: true, writable: true});
  45. verifyPropertyDesc(foo, "bar2", {configurable:false, enumerable: true, writable: true});
  46. verifyPropertyDesc(foo, "foobar", {configurable:false, enumerable: true, writable: true});
  47. verifyPropertyDesc(foo, "foo3", {configurable:false, enumerable: true, writable: true});
  48. verifyPropertyDesc(foo, "baz2", {configurable:false, enumerable: true, writable: true});
  49. verifyPropertyDesc(foo, "foo2", {configurable:false, enumerable: true, writable: true});
  50. verifyPropertyDesc(foo, "baz", {configurable:false, enumerable: true, writable: true});
  51. verifyPropertyDesc(foo, "bar", {configurable:false, enumerable: true, writable: true});
  52. verifyPropertyDesc(foo, "foo", {configurable:false, enumerable: true, writable: true});
  53. verifyPropertyDesc(foo, "const6", {configurable:false, enumerable: true, writable: true});
  54. verifyPropertyDesc(foo, "const5", {configurable:false, enumerable: true, writable: true});
  55. verifyPropertyDesc(foo, "const4", {configurable:false, enumerable: true, writable: true});
  56. verifyPropertyDesc(foo, "const3", {configurable:false, enumerable: true, writable: true});
  57. verifyPropertyDesc(foo, "const2", {configurable:false, enumerable: true, writable: true});
  58. verifyPropertyDesc(foo, "let7", {configurable:false, enumerable: true, writable: true});
  59. verifyPropertyDesc(foo, "let6", {configurable:false, enumerable: true, writable: true});
  60. verifyPropertyDesc(foo, "let5", {configurable:false, enumerable: true, writable: true});
  61. verifyPropertyDesc(foo, "let4", {configurable:false, enumerable: true, writable: true});
  62. verifyPropertyDesc(foo, "let2", {configurable:false, enumerable: true, writable: true});
  63. verifyPropertyDesc(foo, "let1", {configurable:false, enumerable: true, writable: true});
  64. verifyPropertyDesc(foo, "cl2", {configurable:false, enumerable: true, writable: true});
  65. verifyPropertyDesc(foo, "cl1", {configurable:false, enumerable: true, writable: true});
  66. verifyPropertyDesc(foo, "gn2", {configurable:false, enumerable: true, writable: true});
  67. verifyPropertyDesc(foo, "gn1", {configurable:false, enumerable: true, writable: true});
  68. verifyPropertyDesc(foo, "fn2", {configurable:false, enumerable: true, writable: true});
  69. verifyPropertyDesc(foo, "fn1", {configurable:false, enumerable: true, writable: true});
  70. verifyPropertyDesc(foo1, "foo", {configurable:false, enumerable: true, writable: true});
  71. verifyPropertyDesc(foo1, "bar", {configurable:false, enumerable: true, writable: true});
  72. verifyPropertyDesc(foo1, "baz", {configurable:false, enumerable: true, writable: true});
  73. verifyPropertyDesc(foo1, "foo2", {configurable:false, enumerable: true, writable: true});
  74. verifyPropertyDesc(foo1, "bar2", {configurable:false, enumerable: true, writable: true});
  75. verifyPropertyDesc(foo1, "foo3", {configurable:false, enumerable: true, writable: true});
  76. import {complexReExports as foo2} from "variousExports";
  77. verifyPropertyDesc(foo2, "ModuleComplexReexports_foo", {configurable:false, enumerable: true, writable: true});
  78. verifyPropertyDesc(foo2, "bar2", {configurable:false, enumerable: true, writable: true});
  79. verifyPropertyDesc(foo2, "localfoo2", {configurable:false, enumerable: true, writable: true});
  80. verifyPropertyDesc(foo2, "bar", {configurable:false, enumerable: true, writable: true});
  81. verifyPropertyDesc(foo2, "localfoo", {configurable:false, enumerable: true, writable: true});
  82. verifyPropertyDesc(foo2, "baz", {configurable:false, enumerable: true, writable: true});
  83. verifyPropertyDesc(foo2, "foo", {configurable:false, enumerable: true, writable: true});
  84. `);
  85. }
  86. },
  87. {
  88. name : "Re-exported namespace",
  89. body() {
  90. WScript.RegisterModuleSource("one",`
  91. export function foo () { return "foo"; }
  92. export function bar () { return "bar"; }
  93. export const boo = 5;
  94. `);
  95. WScript.RegisterModuleSource("two", `
  96. export const boo = 6;
  97. export function foo() { return "far"; }
  98. `);
  99. WScript.RegisterModuleSource("three", `
  100. export * as ns from "two";
  101. export * as default from "one";
  102. `);
  103. WScript.RegisterModuleSource("four", `
  104. export * from "three";
  105. `);
  106. testRunner.LoadModule(`
  107. import main from "three";
  108. import {ns} from "three";
  109. import * as Boo from "four";
  110. assert.areEqual(main.foo(), "foo");
  111. assert.areEqual(main.bar(), "bar");
  112. assert.areEqual(main.boo, 5);
  113. assert.areEqual(ns.foo(), "far");
  114. assert.areEqual(ns.boo, 6);
  115. assert.areEqual(Boo.ns, ns);
  116. assert.isUndefined(Boo.default);
  117. `);
  118. }
  119. }
  120. ];
  121. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });