computedPropertyToString.js 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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: "computed functions",
  9. body: function ()
  10. {
  11. var date = new Date(2011,10,30);
  12. var name0 = function() { var a = 1; var b = 2; var c = 3; return a+c+b};
  13. var name1 = function() { var a = 1; var b = "1"; var c = "b"; return a+b+c};
  14. var name2 = function() { var a = {}; var b = date; var c = {}; return a+b+c};
  15. var name3 = function() { return NaN;};
  16. var name4 = function() { return undefined;}
  17. var name5 = function() { return null;}
  18. var name6 = function() { return true;}
  19. var name7 = function() { return false;}
  20. var name8 = function() { return Symbol("FAZ");}
  21. var name9 = function() { return date;}
  22. var qux = class {
  23. [name0()]() {}
  24. [name1()]() {}
  25. [name2()]() {}
  26. [name3()]() {}
  27. [name4()]() {}
  28. [name5()]() {}
  29. [name6()]() {}
  30. [name7()]() {}
  31. [name8()]() {}
  32. [name9()]() {}
  33. }
  34. var quxObj = new qux();
  35. assert.areEqual("6() {}", quxObj[name0()].toString(), "name0() adds 1+2+3, expecting 6");
  36. assert.areEqual("11b() {}", quxObj[name1()].toString(), "name1() returns number 1 plus string 1 and string b should evaluate to 11b");
  37. assert.areEqual({}+date+{}+"() {}", quxObj[name2()].toString(), "name2() returns object + date + object should be toStrings of all three");
  38. assert.areEqual("NaN() {}", quxObj[name3()].toString(), "name3() returns NaN, which should be the name");
  39. assert.areEqual("undefined() {}", quxObj[name4()].toString(), "name4() returns undefined for the name");
  40. assert.areEqual("null() {}", quxObj[name5()].toString(), "name5() returns null as the name");
  41. assert.areEqual("true() {}", quxObj[name6()].toString(), "name6() returns true as the name");
  42. assert.areEqual("false() {}", quxObj[name7()].toString(), "name7() returns false as the name");
  43. assert.areEqual(date+"() {}", quxObj[name9()].toString(), "name8() returns a date as the name");
  44. }
  45. },
  46. {
  47. name: "computed Values",
  48. body: function ()
  49. {
  50. var date = new Date(2011,10,30);
  51. var a = 4;
  52. var b = 2;
  53. var c = "c"
  54. var qux = class {
  55. [1+4]() {}
  56. [date]() {}
  57. [a+b]() {}
  58. [a+c]() {}
  59. ["foo"]() {}
  60. ["fo\0o"+"bar"]() {}
  61. }
  62. var quxObj = new qux();
  63. assert.areEqual("5() {}", quxObj[5].toString(), "the result of 1+4 for the name");
  64. assert.areEqual(date+"() {}", quxObj[date].toString(), "date as the name");
  65. assert.areEqual("6() {}", quxObj[6].toString(), "the result of 4 + 2 for the name");
  66. assert.areEqual("4c() {}", quxObj["4c"].toString(), "the result of numeric value 4 plus string c");
  67. assert.areEqual("foo() {}", quxObj["foo"].toString(), "the result of the string foo");
  68. assert.areEqual("fo\0obar() {}", quxObj["fo\0obar"].toString(), "the result of the concatenation of two strings");
  69. }
  70. },
  71. ];
  72. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });