blob: 7ed3bb1d0f3de53d07ae756d24789bea1ac45248 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// 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);
}
});