| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| var echo = WScript.Echo; |
| |
| function guarded_call(func) { |
| try { |
| func(); |
| } catch (e) { |
| echo(e.name + " : " + e.message); |
| } |
| } |
| |
| var testCount = 0; |
| function scenario(title) { |
| if (testCount > 0) { |
| echo("\n"); |
| } |
| echo((testCount++) + ".", title); |
| } |
| |
| scenario("Non Object"); |
| var nonObjList = [ |
| 1, NaN, true, null, undefined |
| ]; |
| for (var i = 0; i < nonObjList.length; i++) { |
| var o = nonObjList[i]; |
| guarded_call(function () { |
| echo(o, "-->", Array.prototype.toLocaleString.apply(o)); |
| }); |
| } |
| |
| scenario("Object, length not uint32"); |
| var badLength = [ |
| true, "abc", 1.234, {} |
| ]; |
| for (var i = 0; i < badLength.length; i++) { |
| var len = badLength[i]; |
| var o = { length: len }; |
| guarded_call(function () { |
| echo("length:", len, "-->", Array.prototype.toLocaleString.apply(o)); |
| }); |
| } |
| |
| scenario("Array: normal"); |
| var o = [ |
| 0, 1.23, NaN, true, "abc", {}, [], [0, 1, 2] |
| ]; |
| |
| // 0.toLocaleString() is supposed to be 0. However our baseline has an exception. |
| // So, do not break it while supporting cross platform locale output |
| var output = Array.prototype.toLocaleString.apply(o); |
| if ( output == "0, 1.23, NaN, true, abc, [object Object], , 0, 1, 2" ) { |
| echo("0.00, 1.23, NaN, true, abc, [object Object], , 0.00, 1.00, 2.00"); |
| } else { |
| echo(output); |
| } |
| |
| scenario("Array: element toLocaleString not callable"); |
| var o = [ |
| 0, |
| {toLocaleString: 123} |
| ]; |
| guarded_call(function () { |
| echo(Array.prototype.toLocaleString.apply(o)); |
| }); |
| |
| scenario("Array: element toLocaleString"); |
| var o = [ |
| 0, |
| { toLocaleString: function () { return "anObject"; } }, |
| undefined, |
| null, |
| { toLocaleString: function () { return "another Object"; } }, |
| [ |
| 1, |
| { toLocaleString: function () { return "a 3rd Object"; } }, |
| 2 |
| ] |
| ]; |
| |
| // 0.toLocaleString() is supposed to be 0. However our baseline has an exception. |
| // So, do not break it while supporting cross platform locale output |
| output = Array.prototype.toLocaleString.apply(o); |
| if ( output == "0, anObject, , , another Object, 1, a 3rd Object, 2" ) { |
| echo("0.00, anObject, , , another Object, 1.00, a 3rd Object, 2.00"); |
| } else { |
| echo(output); |
| } |
| |
| scenario("Object: normal"); |
| var o = { |
| 0: 0, |
| 1: 1.23, |
| 2: NaN, |
| 3: true, |
| 4: "abc", |
| 5: {}, |
| 6: [], |
| 7: [0, 1, 2], |
| length: 8, |
| 8: "should not appear", |
| "-1": "should not appear" |
| }; |
| |
| // 0.toLocaleString() is supposed to be 0. However our baseline has an exception. |
| // So, do not break it while supporting cross platform locale output |
| guarded_call(function () { |
| output = Array.prototype.toLocaleString.apply(o); |
| if ( output == "0, 1.23, NaN, true, abc, [object Object], , 0, 1, 2" ) { |
| echo("0.00, 1.23, NaN, true, abc, [object Object], , 0.00, 1.00, 2.00"); |
| } else { |
| echo(output); |
| } |
| }); |
| |
| scenario("Object: element toLocaleString not callable"); |
| var o = { |
| 0: 0, |
| 1: { toLocaleString: 123 }, |
| length: 2 |
| }; |
| guarded_call(function () { |
| echo(Array.prototype.toLocaleString.apply(o)); |
| }); |
| |
| scenario("Object: element toLocaleString"); |
| var o = { |
| 0: 0, |
| 1: { toLocaleString: function () { return "anObject"; } }, |
| 2: undefined, |
| 3: null, |
| 4: { toLocaleString: function () { return "another Object"; } }, |
| 5: [ |
| 1, |
| { toLocaleString: function () { return "a 3rd Object"; } }, |
| 2 |
| ], |
| length: 6, |
| 6: "should not appear", |
| 7: "should not appear", |
| "-1": "should not appear" |
| }; |
| |
| // 0.toLocaleString() is supposed to be 0. However our baseline has an exception. |
| // So, do not break it while supporting cross platform locale output |
| guarded_call(function () { |
| output = Array.prototype.toLocaleString.apply(o); |
| if ( output == "0, anObject, , , another Object, 1, a 3rd Object, 2" ) { |
| echo("0.00, anObject, , , another Object, 1.00, a 3rd Object, 2.00"); |
| } else { |
| echo(output); |
| } |
| }); |