toString.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. var echo = WScript.Echo;
  6. function guarded_call(func) {
  7. try {
  8. func();
  9. } catch (e) {
  10. echo(e.name + " : " + e.message);
  11. }
  12. }
  13. var testCount = 0;
  14. function scenario(title) {
  15. if (testCount > 0) {
  16. echo("\n");
  17. }
  18. echo((testCount++) + ".", title);
  19. }
  20. scenario("Array: default");
  21. var arr = [1, 2, , 3];
  22. echo(arr);
  23. scenario("Array: Replaced Array.prototype.join");
  24. Array.prototype.join = function () { return "replaced Array.prototype.join" };
  25. echo(arr);
  26. scenario("Array: Replaced non-callable Array.prototype.join");
  27. Array.prototype.join = 1234; // non-callable
  28. echo(arr);
  29. scenario("Object: no join");
  30. var o = {};
  31. guarded_call(function () {
  32. echo(Array.prototype.toString.apply(o));
  33. });
  34. scenario("Object: has join");
  35. var o = {
  36. join: function () { return "o join"; }
  37. };
  38. guarded_call(function () {
  39. echo(Array.prototype.toString.apply(o));
  40. });
  41. scenario("Object: non-callable join");
  42. var o = {
  43. join: 1234
  44. };
  45. guarded_call(function () {
  46. echo(Array.prototype.toString.apply(o));
  47. });
  48. scenario("Object: no join with toStringTag");
  49. var o = {
  50. [Symbol.toStringTag]: "Replaced @@toStringTag"
  51. };
  52. guarded_call(function () {
  53. echo(Array.prototype.toString.apply(o));
  54. });
  55. scenario("Object: no join with getter toStringTag");
  56. var o = {
  57. get [Symbol.toStringTag]() {return "Replaced @@toStringTag with a getter";}
  58. };
  59. guarded_call(function () {
  60. echo(Array.prototype.toString.apply(o));
  61. });
  62. scenario("Object: no join, replaced Object.prototype.toString");
  63. var o = {};
  64. Object.prototype.toString = function () { return "replaced Object.prototype.toString"; }
  65. guarded_call(function () {
  66. echo(Array.prototype.toString.apply(o));
  67. });