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