blob: 38300b57ce5f38e182c73de2551f6022ba8c2bc0 [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.
//-------------------------------------------------------------------------------------------------------
// 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);
}
}