| //------------------------------------------------------------------------------------------------------- | |
| // Copyright (C) Microsoft. All rights reserved. | |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | |
| //------------------------------------------------------------------------------------------------------- | |
| // NOTE: because vdates are timezone specific, this test will might only work in PST | |
| // not sure about DST. If you see a failure, that would be my first suspicion | |
| var date = new Date(0); | |
| var vdate = date.getVarDate(); | |
| // Test string concat both ways: | |
| writeLine("Attempt string concat (string + vdate) and echo."); | |
| var appendMe = "test concat: " + vdate; | |
| writeLine(appendMe); | |
| writeLine("Attempt string concat (vdate + string) and echo."); | |
| var appendMe = vdate + ": test concat2"; | |
| writeLine(appendMe); | |
| // Test typeof | |
| writeLine(typeof(date)); | |
| writeLine(typeof(vdate)); | |
| writeLine(typeof(new Object(vdate))); | |
| writeLine(typeof(Object(vdate))); | |
| // Test .toString (should fail) | |
| try { | |
| var myVar = vdate.toString(); | |
| writeLine("FAIL: we should have errored on .toString();"); | |
| } catch (e) | |
| { | |
| writeLine("SUCCESS: vdate.toString() failed with error #" + e.number); | |
| } | |
| // Test assigning to a member | |
| try { | |
| vdate.aMember = 3; | |
| writeLine("FAIL: we should have errored on vdate.aMember = 3;"); | |
| } catch (e) | |
| { | |
| writeLine("SUCCESS: vdate.aMember = 3 failed with error #" + e.number); | |
| } | |
| // Test assigning to a member with [] | |
| try { | |
| vdate["aMember"] = 3; | |
| writeLine("FAIL: we should have errored on vdate[\"aMember\"] = 3;"); | |
| } catch (e) | |
| { | |
| writeLine("SUCCESS: vdate[\"aMember\"] = 3 failed with error #" + e.number); | |
| } | |
| // Test accessing a member | |
| try { | |
| var shouldNotWork = vdate.aMember; | |
| } catch (e) | |
| { | |
| writeLine("SUCCESS: var shouldNotWork = date.aMember failed with error #" + e.number); | |
| } | |
| // Try some more unusual or invalid uses of VarDate | |
| writeLine(""); | |
| writeLine("Unusual cases:"); | |
| vdate = new Date(1234567890123).getVarDate(); | |
| safeCall(function() { writeLine(vdate ? true : false); }); | |
| safeCall(function() { writeLine([1, 2].indexOf(2, vdate)); }); // valid only in version 3 | |
| safeCall(function() { writeLine(parseInt("1", vdate)); }); | |
| // normalize Old GetNumberFormatEx exception | |
| safeCall(function() { | |
| var result = [1, vdate, 2].toLocaleString(); | |
| if (result == "1, [object Object], 2") { | |
| result = "1.00, [object Object], 2.00"; | |
| } | |
| writeLine(result); | |
| }); | |
| // Try some random dates to make sure we match the old engine | |
| writeLine(""); | |
| writeLine("Pseudorandom cases:"); | |
| for (var i = 0; i < 1000; i++) | |
| { | |
| var testDate = new Date(i*10373); | |
| var testVDate = testDate.getVarDate(); | |
| writeLine("VT_DATE: '" + testVDate + "'"); | |
| } | |
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| // Helpers | |
| function writeLine(str) | |
| { | |
| if (typeof str === "string") { | |
| str = str.replace(/\(PDT\)/g, "(Pacific Daylight Time)") | |
| .replace(/\(PST\)/g, "(Pacific Standard Time)"); | |
| } | |
| WScript.Echo("" + str); | |
| } | |
| function safeCall(func) | |
| { | |
| try | |
| { | |
| return func(); | |
| } | |
| catch (ex) | |
| { | |
| writeLine(ex.name + " (" + ex.number + "): " + ex.message); | |
| } | |
| } |