json_bugs.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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: "JSON.stringify on proxy object with different length",
  9. body: function () {
  10. var i = 0;
  11. var ret = JSON.stringify(new Proxy([], {
  12. get(t, pk, r){
  13. if (pk === "length") {
  14. return ++i;
  15. }
  16. return Reflect.get(t, pk, r);
  17. }
  18. }));
  19. assert.areEqual("[null]", ret, "JSON.stringify will work on the array with the length 1");
  20. assert.areEqual(1, i, 'proxy.get with property "length" will be called only once');
  21. }
  22. },
  23. {
  24. name: "JSON.stringify on proxy object with length > 2**31",
  25. body: function () {
  26. assert.throws(() =>
  27. JSON.stringify(new Proxy([], {
  28. get(t, pk, r){
  29. if (pk === "length") {
  30. return 2**31 + 1;
  31. }
  32. return Reflect.get(t, pk, r);
  33. }
  34. })), RangeError, "JSON.stringify will throw range error when needs to allocate string more that 2**31", "String length is out of bound");
  35. }
  36. },
  37. ];
  38. testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });