| /* |
| * Any copyright is dedicated to the Public Domain. |
| * http://creativecommonn.org/licenses/publicdomain/ |
| */ |
| |
| var BUGNUMBER = 645464; |
| var summary = |
| "[[DefaultValue]] behavior wrong for Date with overridden valueOf/toString"; |
| |
| print(BUGNUMBER + ": " + summary); |
| |
| /************** |
| * BEGIN TEST * |
| **************/ |
| |
| function allTests() |
| { |
| var DS = new Date(2010, 1, 1).toString(); |
| |
| // equality |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(d == DS, true); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.valueOf = function() { assertEq(arguments.length, 0); return 17; }; |
| assertEq(d2 == DS, true); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.toString = function() { return 42; }; |
| assertEq(d3 == 42, true); |
| |
| function testEquality() |
| { |
| var d = new Date(2010, 1, 1); |
| assertEq(d == DS, true); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.valueOf = function() { assertEq(arguments.length, 0); return 17; }; |
| assertEq(d2 == DS, true); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.toString = function() { return 42; }; |
| assertEq(d3 == 42, true); |
| } |
| testEquality(); |
| |
| |
| // addition of Date to number |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(d + 5, DS + "5"); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.toString = function() { return 9; }; |
| assertEq(d2 + 3, 9 + 3); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.valueOf = function() { assertEq(arguments.length, 0); return 17; }; |
| assertEq(d3 + 5, DS + "5"); |
| |
| function testDateNumberAddition() |
| { |
| var d = new Date(2010, 1, 1); |
| assertEq(d + 5, DS + "5"); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.toString = function() { return 9; }; |
| assertEq(d2 + 3, 9 + 3); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.valueOf = function() { assertEq(arguments.length, 0); return 17; }; |
| assertEq(d3 + 5, DS + "5"); |
| } |
| testDateNumberAddition(); |
| |
| |
| // addition of Date to Date |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(d + d, DS + DS); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.toString = function() { return 5; }; |
| assertEq(d2 + d2, 10); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.valueOf = function() { assertEq(arguments.length, 0); return 8.5; }; |
| assertEq(d3 + d3, DS + DS); |
| |
| function testDateDateAddition() |
| { |
| var d = new Date(2010, 1, 1); |
| assertEq(d + d, DS + DS); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.toString = function() { return 5; }; |
| assertEq(d2 + d2, 10); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.valueOf = function() { assertEq(arguments.length, 0); return 8.5; }; |
| assertEq(d3 + d3, DS + DS); |
| } |
| testDateDateAddition(); |
| |
| |
| // Date as bracketed property name |
| |
| var obj = { 8: 42, 9: 73 }; |
| obj[DS] = 17; |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(obj[d], 17); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.valueOf = function() { assertEq(arguments.length, 0); return 8; } |
| assertEq(obj[d2], 17); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.toString = function() { return 9; }; |
| assertEq(obj[d3], 73); |
| |
| function testPropertyName() |
| { |
| var obj = { 8: 42, 9: 73 }; |
| obj[DS] = 17; |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(obj[d], 17); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.valueOf = function() { assertEq(arguments.length, 0); return 8; } |
| assertEq(obj[d2], 17); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.toString = function() { return 9; }; |
| assertEq(obj[d3], 73); |
| } |
| testPropertyName(); |
| |
| |
| // Date as property name with |in| operator |
| |
| var obj = {}; |
| obj[DS] = 5; |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(d in obj, true); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.toString = function() { return "baz"; }; |
| assertEq(d2 in { baz: 42 }, true); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.valueOf = function() { assertEq(arguments.length, 0); return "quux"; }; |
| assertEq(d3 in obj, true); |
| |
| function testInOperatorName() |
| { |
| var obj = {}; |
| obj[DS] = 5; |
| |
| var d = new Date(2010, 1, 1); |
| assertEq(d in obj, true); |
| |
| var d2 = new Date(2010, 1, 1); |
| d2.toString = function() { return "baz"; }; |
| assertEq(d2 in { baz: 42 }, true); |
| |
| var d3 = new Date(2010, 1, 1); |
| d3.valueOf = function() { assertEq(arguments.length, 0); return "quux"; }; |
| assertEq(d3 in obj, true); |
| } |
| testInOperatorName(); |
| } |
| |
| allTests(); |
| |
| if (typeof newGlobal === "function") |
| { |
| Date = newGlobal().Date; |
| allTests(); |
| } |
| |
| /******************************************************************************/ |
| |
| if (typeof reportCompare === "function") |
| reportCompare(true, true); |
| |
| print("All tests passed!"); |