// 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");