| // Any copyright is dedicated to the Public Domain. |
| // http://creativecommons.org/licenses/publicdomain/ |
| |
| //----------------------------------------------------------------------------- |
| print("Test for correct short-circuiting implementation of Date.set methods"); |
| |
| /************** |
| * BEGIN TEST * |
| **************/ |
| var global = 0; |
| var date; |
| |
| /* Test that methods don't short circuit argument evaluation. */ |
| date = new Date(0).setSeconds(NaN, {valueOf:function(){global = 3}}); |
| assertEq(global, 3); |
| |
| date = new Date(0).setUTCSeconds(NaN, {valueOf:function(){global = 4}}); |
| assertEq(global, 4); |
| |
| date = new Date(0).setMinutes(NaN, {valueOf:function(){global = 5}}); |
| assertEq(global, 5); |
| |
| date = new Date(0).setUTCMinutes(NaN, {valueOf:function(){global = 6}}); |
| assertEq(global, 6); |
| |
| date = new Date(0).setHours(NaN, {valueOf:function(){global = 7}}); |
| assertEq(global, 7); |
| |
| date = new Date(0).setUTCHours(NaN, {valueOf:function(){global = 8}}); |
| assertEq(global, 8); |
| |
| date = new Date(0).setMonth(NaN, {valueOf:function(){global = 11}}); |
| assertEq(global, 11); |
| |
| date = new Date(0).setUTCMonth(NaN, {valueOf:function(){global = 12}}); |
| assertEq(global, 12); |
| |
| date = new Date(0).setFullYear(NaN, {valueOf:function(){global = 13}}); |
| assertEq(global, 13); |
| |
| date = new Date(0).setUTCFullYear(NaN, {valueOf:function(){global = 14}}); |
| assertEq(global, 14); |
| |
| |
| |
| /* Test that argument evaluation is not short circuited if Date == NaN */ |
| date = new Date(NaN).setMilliseconds({valueOf:function(){global = 15}}); |
| assertEq(global, 15); |
| |
| date = new Date(NaN).setUTCMilliseconds({valueOf:function(){global = 16}}); |
| assertEq(global, 16); |
| |
| date = new Date(NaN).setSeconds({valueOf:function(){global = 17}}); |
| assertEq(global, 17); |
| |
| date = new Date(NaN).setUTCSeconds({valueOf:function(){global = 18}}); |
| assertEq(global, 18); |
| |
| date = new Date(NaN).setMinutes({valueOf:function(){global = 19}}); |
| assertEq(global, 19); |
| |
| date = new Date(NaN).setUTCMinutes({valueOf:function(){global = 20}}); |
| assertEq(global, 20); |
| |
| date = new Date(NaN).setHours({valueOf:function(){global = 21}}); |
| assertEq(global, 21); |
| |
| date = new Date(NaN).setUTCHours({valueOf:function(){global = 22}}); |
| assertEq(global, 22); |
| |
| date = new Date(NaN).setDate({valueOf:function(){global = 23}}); |
| assertEq(global, 23); |
| |
| date = new Date(NaN).setUTCDate({valueOf:function(){global = 24}}); |
| assertEq(global, 24); |
| |
| date = new Date(NaN).setMonth({valueOf:function(){global = 25}}); |
| assertEq(global, 25); |
| |
| date = new Date(NaN).setUTCMonth({valueOf:function(){global = 26}}); |
| assertEq(global, 26); |
| |
| date = new Date(NaN).setFullYear({valueOf:function(){global = 27}}); |
| assertEq(global, 27); |
| |
| date = new Date(NaN).setUTCFullYear({valueOf:function(){global = 28}}); |
| assertEq(global, 28); |
| |
| |
| /* Test the combination of the above two. */ |
| date = new Date(NaN).setSeconds(NaN, {valueOf:function(){global = 31}}); |
| assertEq(global, 31); |
| |
| date = new Date(NaN).setUTCSeconds(NaN, {valueOf:function(){global = 32}}); |
| assertEq(global, 32); |
| |
| date = new Date(NaN).setMinutes(NaN, {valueOf:function(){global = 33}}); |
| assertEq(global, 33); |
| |
| date = new Date(NaN).setUTCMinutes(NaN, {valueOf:function(){global = 34}}); |
| assertEq(global, 34); |
| |
| date = new Date(NaN).setHours(NaN, {valueOf:function(){global = 35}}); |
| assertEq(global, 35); |
| |
| date = new Date(NaN).setUTCHours(NaN, {valueOf:function(){global = 36}}); |
| assertEq(global, 36); |
| |
| date = new Date(NaN).setMonth(NaN, {valueOf:function(){global = 39}}); |
| assertEq(global, 39); |
| |
| date = new Date(NaN).setUTCMonth(NaN, {valueOf:function(){global = 40}}); |
| assertEq(global, 40); |
| |
| date = new Date(NaN).setFullYear(NaN, {valueOf:function(){global = 41}}); |
| assertEq(global, 41); |
| |
| date = new Date(NaN).setUTCFullYear(NaN, {valueOf:function(){global = 42}}); |
| assertEq(global, 42); |
| |
| |
| /*Test two methods evaluation*/ |
| var secondGlobal = 0; |
| |
| date = new Date(NaN).setFullYear({valueOf:function(){global = 43}}, {valueOf:function(){secondGlobal = 1}}); |
| assertEq(global, 43); |
| assertEq(secondGlobal, 1); |
| |
| date = new Date(0).setFullYear(NaN, {valueOf:function(){global = 44}}, {valueOf:function(){secondGlobal = 2}}); |
| assertEq(global, 44); |
| assertEq(secondGlobal, 2); |
| |
| |
| /* Test year methods*/ |
| date = new Date(0).setYear({valueOf:function(){global = 45}}); |
| assertEq(global, 45); |
| |
| date = new Date(NaN).setYear({valueOf:function(){global = 46}}); |
| assertEq(global, 46); |
| |
| |
| /******************************************************************************/ |
| |
| if (typeof reportCompare === "function") |
| reportCompare(true, true); |
| |
| print("Tests complete"); |