toString.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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, replaced Object.prototype.toString");
  49. var o = {};
  50. Object.prototype.toString = function () { return "replaced Object.prototype.toString"; }
  51. guarded_call(function () {
  52. echo(Array.prototype.toString.apply(o));
  53. });