public void toLocaleString() { if (TestUtils.Engine != JSEngine.JScript) { System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); Assert.AreEqual("77", TestUtils.Evaluate("77 .toLocaleString()")); Assert.AreEqual("77.5", TestUtils.Evaluate("77.5.toLocaleString()")); // English. Assert.AreEqual("77.123", TestUtils.ChangeLocale("en-NZ", () => TestUtils.Evaluate("77.123.toLocaleString()"))); Assert.AreEqual("7.7e+101", TestUtils.ChangeLocale("en-NZ", () => TestUtils.Evaluate("77e100 .toLocaleString()"))); Assert.AreEqual("123456789", TestUtils.ChangeLocale("en-NZ", () => TestUtils.Evaluate("123456789 .toLocaleString()"))); Assert.AreEqual("-500", TestUtils.ChangeLocale("en-NZ", () => TestUtils.Evaluate("(-500).toLocaleString()"))); // Spanish. Assert.AreEqual("77,123", TestUtils.ChangeLocale("es-ES", () => TestUtils.Evaluate("77.123.toLocaleString()"))); Assert.AreEqual("7,7e+101", TestUtils.ChangeLocale("es-ES", () => TestUtils.Evaluate("77e100 .toLocaleString()"))); Assert.AreEqual("123456789", TestUtils.ChangeLocale("es-ES", () => TestUtils.Evaluate("123456789 .toLocaleString()"))); Assert.AreEqual("-500", TestUtils.ChangeLocale("es-ES", () => TestUtils.Evaluate("(-500).toLocaleString()"))); } Assert.AreEqual("Infinity", TestUtils.Evaluate("Infinity.toLocaleString()")); Assert.AreEqual("-Infinity", TestUtils.Evaluate("(-Infinity).toLocaleString()")); Assert.AreEqual("NaN", TestUtils.Evaluate("NaN.toLocaleString()")); // length Assert.AreEqual(0, TestUtils.Evaluate("NaN.toLocaleString.length")); }
public void stringify() { // Undefined and null. Assert.AreEqual("null", TestUtils.Evaluate("JSON.stringify(null)")); Assert.AreEqual(Undefined.Value, TestUtils.Evaluate("JSON.stringify(undefined)")); // Boolean. Assert.AreEqual("false", TestUtils.Evaluate("JSON.stringify(false)")); Assert.AreEqual("true", TestUtils.Evaluate("JSON.stringify(true)")); Assert.AreEqual("false", TestUtils.Evaluate("JSON.stringify(new Boolean(false))")); Assert.AreEqual("true", TestUtils.Evaluate("JSON.stringify(new Boolean(true))")); // Numbers. Assert.AreEqual("5", TestUtils.Evaluate("JSON.stringify(5)")); Assert.AreEqual("5e+100", TestUtils.Evaluate("JSON.stringify(5e100)")); Assert.AreEqual("5.1", TestUtils.Evaluate("JSON.stringify(5.1)")); Assert.AreEqual("5.1", TestUtils.ChangeLocale("es-ES", () => TestUtils.Evaluate("JSON.stringify(5.1)"))); Assert.AreEqual("null", TestUtils.Evaluate("JSON.stringify(-Infinity)")); Assert.AreEqual("null", TestUtils.Evaluate("JSON.stringify(Infinity)")); Assert.AreEqual("null", TestUtils.Evaluate("JSON.stringify(NaN)")); Assert.AreEqual("5", TestUtils.Evaluate("JSON.stringify(new Number(5))")); Assert.AreEqual("null", TestUtils.Evaluate("JSON.stringify(new Number(NaN))")); // Strings. Assert.AreEqual(@"""test""", TestUtils.Evaluate("JSON.stringify('test')")); Assert.AreEqual(@"""\b\f\n\r\t""", TestUtils.Evaluate(@"JSON.stringify('\b\f\n\r\t')")); Assert.AreEqual(@"""\u0000""", TestUtils.Evaluate("JSON.stringify(String.fromCharCode(0))")); Assert.AreEqual(@"""\u001f""", TestUtils.Evaluate("JSON.stringify(String.fromCharCode(0x1F))")); Assert.AreEqual(@"""test""", TestUtils.Evaluate("JSON.stringify(new String('test'))")); Assert.AreEqual(@"""te\""st""", TestUtils.Evaluate("JSON.stringify('te\"st')")); Assert.AreEqual(@"""te'st""", TestUtils.Evaluate("JSON.stringify('te\\'st')")); // Dates. Assert.AreEqual("null", TestUtils.Evaluate("JSON.stringify(Date.prototype)")); Assert.AreEqual(@"""1970-01-01T00:00:00.005Z""", TestUtils.Evaluate("JSON.stringify(new Date(5))")); // Arrays. Assert.AreEqual("[]", TestUtils.Evaluate("JSON.stringify([])")); Assert.AreEqual("[0,1,2]", TestUtils.Evaluate("JSON.stringify([0, 1, 2])")); Assert.AreEqual("[0,null,2]", TestUtils.Evaluate("JSON.stringify([0, , 2])")); Assert.AreEqual("[0,null,2]", TestUtils.Evaluate("JSON.stringify([0, undefined, 2])")); // Functions. Assert.AreEqual(Undefined.Value, TestUtils.Evaluate("JSON.stringify(function() {})")); Assert.AreEqual("[null]", TestUtils.Evaluate("JSON.stringify([function() {}])")); Assert.AreEqual("{}", TestUtils.Evaluate("JSON.stringify({f: function() {}})")); // Objects. Assert.AreEqual("{}", TestUtils.Evaluate("JSON.stringify({})")); Assert.AreEqual(@"{""a"":1,""b"":2}", TestUtils.Evaluate("JSON.stringify({a: 1, b: 2})")); // Cyclic reference Assert.AreEqual("TypeError", TestUtils.EvaluateExceptionType("a = []; a[0] = a; JSON.stringify(a)")); }
public void toString() { Assert.AreEqual("12345", TestUtils.Evaluate("12345 .toString()")); Assert.AreEqual("18014398509481990", TestUtils.Evaluate("18014398509481992 .toString()")); Assert.AreEqual("18014398509482010", TestUtils.Evaluate("18014398509482008 .toString()")); Assert.AreEqual("18014398509482012", TestUtils.Evaluate("18014398509482012 .toString()")); Assert.AreEqual("18014398509481988", TestUtils.Evaluate("18014398509481988 .toString()")); Assert.AreEqual("1234567890123456800", TestUtils.Evaluate("1234567890123456789 .toString()")); Assert.AreEqual("2234567890123456800", TestUtils.Evaluate("2234567890123456789 .toString()")); Assert.AreEqual("3234567890123457000", TestUtils.Evaluate("3234567890123456789 .toString()")); Assert.AreEqual("4234567890123457000", TestUtils.Evaluate("4234567890123456789 .toString()")); Assert.AreEqual("72057594037927940", TestUtils.Evaluate("72057594037927944 .toString()")); Assert.AreEqual("72057594037927950", TestUtils.Evaluate("72057594037927945 .toString()")); Assert.AreEqual("72057594037927950", TestUtils.Evaluate("72057594037927959 .toString()")); Assert.AreEqual("9.999999999999998", TestUtils.Evaluate("9.999999999999999.toString()")); Assert.AreEqual("10", TestUtils.Evaluate("9.9999999999999999.toString()")); Assert.AreEqual("100000000000000000000", TestUtils.Evaluate("99999999999999999999 .toString()")); Assert.AreEqual("999999999999990000000", TestUtils.Evaluate("999999999999990000000 .toString()")); Assert.AreEqual("1e+21", TestUtils.Evaluate("999999999999999999999 .toString()")); Assert.AreEqual("100000000000000000000", TestUtils.Evaluate("99999999999999999999 .toString()")); Assert.AreEqual("-77", TestUtils.Evaluate("(-77).toString()")); Assert.AreEqual("77.1274", TestUtils.Evaluate("77.1274.toString()")); Assert.AreEqual("77.001", TestUtils.Evaluate("77.001.toString()")); Assert.AreEqual("77.12345678901235", TestUtils.Evaluate("77.1234567890123456789.toString()")); Assert.AreEqual("7.123456789012345", TestUtils.Evaluate("7.1234567890123456789.toString()")); Assert.AreEqual("0.000005", TestUtils.Evaluate("5e-6.toString()")); Assert.AreEqual("0.000001", TestUtils.Evaluate("1e-6.toString()")); Assert.AreEqual("5e-7", TestUtils.Evaluate("5e-7.toString()")); Assert.AreEqual("1e-7", TestUtils.Evaluate("1e-7.toString()")); Assert.AreEqual("1000000000000000", TestUtils.Evaluate("1e15.toString()")); Assert.AreEqual("10000000000000000", TestUtils.Evaluate("1e16.toString()")); Assert.AreEqual("100000000000000000", TestUtils.Evaluate("1e17.toString()")); Assert.AreEqual("1000000000000000000", TestUtils.Evaluate("1e18.toString()")); Assert.AreEqual("10000000000000000000", TestUtils.Evaluate("1e19.toString()")); Assert.AreEqual("100000000000000000000", TestUtils.Evaluate("1e20.toString()")); Assert.AreEqual("1e+21", TestUtils.Evaluate("1e21.toString()")); Assert.AreEqual("1e+21", TestUtils.Evaluate("999999999999999999999 .toString()")); Assert.AreEqual("100111122133144160", TestUtils.Evaluate("100111122133144155 .toString()")); Assert.AreEqual("Infinity", TestUtils.Evaluate("Infinity.toString()")); Assert.AreEqual("-Infinity", TestUtils.Evaluate("(-Infinity).toString()")); Assert.AreEqual("NaN", TestUtils.Evaluate("NaN.toString()")); Assert.AreEqual("1.7976931348623157e+308", TestUtils.Evaluate("Number.MAX_VALUE.toString()")); Assert.AreEqual("5e-324", TestUtils.Evaluate("Number.MIN_VALUE.toString()")); // Radix which is not 10. Assert.AreEqual("115", TestUtils.Evaluate("77 .toString(8)")); Assert.AreEqual("1001", TestUtils.Evaluate("9 .toString(2)")); Assert.AreEqual("fe", TestUtils.Evaluate("254 .toString(16)")); Assert.AreEqual("-115.4621320712601014", TestUtils.Evaluate("(-77.598).toString(8)")); Assert.AreEqual("0.00142233513615237575", TestUtils.Evaluate("0.003.toString(8)")); Assert.AreEqual("27524716460150203300000000000000000", TestUtils.Evaluate("15e30.toString(8)")); Assert.AreEqual("0.252525252525252525", TestUtils.Evaluate("(1/3).toString(8)")); // Decimal point should be '.' regardless of locale. Assert.AreEqual("77.1274", TestUtils.ChangeLocale("es-ES", () => TestUtils.Evaluate("77.1274.toString()"))); // Radix out of range. Assert.AreEqual(TestUtils.Engine == JSEngine.JScript ? "TypeError" : "RangeError", TestUtils.EvaluateExceptionType("254 .toString(37)")); Assert.AreEqual(TestUtils.Engine == JSEngine.JScript ? "TypeError" : "RangeError", TestUtils.EvaluateExceptionType("254 .toString(1)")); // length Assert.AreEqual(1, TestUtils.Evaluate("NaN.toString.length")); }