blob: 9c9702d0ed3081e93b9675565172b687a8974181 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="../../forms/resources/picker-common.js"></script>
<script src="resources/calendar-picker-common.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<input type=date id=date value="2011-05-01">
<script>
description('Test if step limits available dates in calendar picker.');
openPicker(document.getElementById('date'), test1);
var pw = null;
function test1() {
pw = popupWindow;
testDay();
testWeek();
testMonth();
finishJSTest();
}
function testDay() {
debug('Test Day constructor');
shouldBe('new pw.Day(2000, 1, 2).year', '2000');
shouldBe('new pw.Day(2000, 1, 2).month', '1');
shouldBe('new pw.Day(2000, 1, 2).date', '2');
shouldBe('new pw.Day(2000, -1, 2).year', '1999');
shouldBe('new pw.Day(2000, -1, 2).month', '11');
shouldBe('new pw.Day(2000, -1, 2).date', '2');
shouldBe('new pw.Day(2000, 1, -2).year', '2000');
shouldBe('new pw.Day(2000, 1, -2).month', '0');
shouldBe('new pw.Day(2000, 1, -2).date', '29');
shouldBe('new pw.Day(-2000, 1, 2).year', '-2000');
shouldBe('new pw.Day(-2000, 1, 2).month', '1');
shouldBe('new pw.Day(-2000, 1, 2).date', '2');
shouldBe('new pw.Day(2000, 1, 33).year', '2000');
shouldBe('new pw.Day(2000, 1, 33).month', '2');
shouldBe('new pw.Day(2000, 1, 33).date', '4');
shouldBe('new pw.Day(200000, 1, 2).year', '200000');
shouldBe('new pw.Day(200000, 1, 2).month', '1');
shouldBe('new pw.Day(200000, 1, 2).date', '2');
debug('Test Day.equals');
shouldBeTrue('new pw.Day(2000, 1, 2).equals(new pw.Day(2000, 1, 2))');
shouldBeTrue('new pw.Day(2000, 1, 2).equals(new pw.Day(2000, 2, -27))');
shouldBeTrue('new pw.Day(2000, 1, 2).equals(new pw.Day(2001, 1, -364))');
shouldBeFalse('new pw.Day(2000, 1, 2).equals(new pw.Day(2000, 1, 3))');
shouldBeFalse('new pw.Day(2000, 1, 2).equals(new pw.Day(2000, 2, 2))');
shouldBeFalse('new pw.Day(2000, 1, 2).equals(new pw.Day(2001, 1, 2))');
shouldBeFalse('new pw.Day(2000, 1, 2).equals(new pw.Day(2001, 2, 3))');
debug('Test Day.previous');
shouldBeEqualToString('new pw.Day(2000, 2, 1).previous().toString()', '2000-02-29');
shouldBeEqualToString('new pw.Day(2000, 2, 1).previous(1).toString()', '2000-02-29');
shouldBeEqualToString('new pw.Day(2000, 2, 1).previous(2).toString()', '2000-02-28');
shouldBeEqualToString('new pw.Day(2000, 2, 1).previous(3).toString()', '2000-02-27');
shouldBeEqualToString('new pw.Day(2000, 2, 1).previous(30).toString()', '2000-01-31');
debug('Test Day.next');
shouldBeEqualToString('new pw.Day(2000, 2, 1).next().toString()', '2000-03-02');
shouldBeEqualToString('new pw.Day(2000, 2, 1).next(1).toString()', '2000-03-02');
shouldBeEqualToString('new pw.Day(2000, 2, 1).next(2).toString()', '2000-03-03');
shouldBeEqualToString('new pw.Day(2000, 2, 1).next(3).toString()', '2000-03-04');
shouldBeEqualToString('new pw.Day(2000, 2, 1).next(30).toString()', '2000-03-31');
debug('Test Day.firstDay');
shouldBeEqualToString('new pw.Day(2000, 2, 1).firstDay().toString()', '2000-03-01');
debug('Test Day.middleDay');
shouldBeEqualToString('new pw.Day(2000, 2, 1).middleDay().toString()', '2000-03-01');
debug('Test Day.lastDay');
shouldBeEqualToString('new pw.Day(2000, 2, 1).lastDay().toString()', '2000-03-01');
debug('Test Day.valueOf');
shouldBe('new pw.Day(1970, 0, 1).valueOf()', '0');
shouldBe('new pw.Day(1970, 0, 2).valueOf()', '86400000');
shouldBe('new pw.Day(2000, 2, 1).valueOf()', '951868800000');
shouldBe('new pw.Day(1, 2, 1).valueOf()', '-62130499200000');
shouldBe('new pw.Day(20000, 2, 1).valueOf()', '568977004800000');
debug('Test Day.toString');
shouldBeEqualToString('new pw.Day(2000, 2, 1).toString()', '2000-03-01');
shouldBeEqualToString('new pw.Day(1, 2, 1).toString()', '0001-03-01');
shouldBeEqualToString('new pw.Day(20000, 2, 1).toString()', '20000-03-01');
debug('Test Day.parse');
shouldBeEqualToString('pw.Day.parse("2000-02-02").toString()', '2000-02-02');
shouldBeEqualToString('pw.Day.parse("1999-02-02").toString()', '1999-02-02');
shouldBeEqualToString('pw.Day.parse("2000-01-02").toString()', '2000-01-02');
shouldBeEqualToString('pw.Day.parse("2000-02-01").toString()', '2000-02-01');
shouldBeEqualToString('pw.Day.parse("0001-01-01").toString()', '0001-01-01');
// Incorrect number of leading zeros
shouldBeEqualToString('pw.Day.parse("02000-02-02").toString()', '2000-02-02');
shouldBeEqualToString('pw.Day.parse("2000-002-02").toString()', '2000-02-02');
shouldBeEqualToString('pw.Day.parse("2000-02-002").toString()', '2000-02-02');
shouldBeEqualToString('pw.Day.parse("2000-2-02").toString()', '2000-02-02');
shouldBeEqualToString('pw.Day.parse("2000-02-2").toString()', '2000-02-02');
shouldBeEqualToString('pw.Day.parse("1-02-02").toString()', '0001-02-02');
// Invalid
shouldBeNull('pw.Day.parse("2000-02")');
shouldBeNull('pw.Day.parse("2000-W02")');
shouldBeNull('pw.Day.parse("x")');
shouldBeNull('pw.Day.parse("")');
}
function testWeek() {
debug('Test Week constructor');
shouldBe('new pw.Week(2000, 1).year', '2000');
shouldBe('new pw.Week(2000, 1).week', '1');
shouldBe('new pw.Week(2000, -1).year', '1999');
shouldBe('new pw.Week(2000, -1).week', '51');
shouldBe('new pw.Week(-2000, 1).year', '-2000');
shouldBe('new pw.Week(-2000, 1).week', '1');
shouldBe('new pw.Week(2000, 55).year', '2001');
shouldBe('new pw.Week(2000, 55).week', '3');
shouldBe('new pw.Week(200000, 1).year', '200000');
shouldBe('new pw.Week(200000, 1).week', '1');
debug('Test Week.equals');
shouldBeTrue('new pw.Week(2000, 1).equals(new pw.Week(2000, 1))');
shouldBeTrue('new pw.Week(2000, 1).equals(new pw.Week(2001, -51))');
shouldBeTrue('new pw.Week(2000, 1).equals(new pw.Week(1999, 53))');
shouldBeFalse('new pw.Week(2000, 1).equals(new pw.Week(2000, 2))');
shouldBeFalse('new pw.Week(2000, 1).equals(new pw.Week(2001, 1))');
shouldBeFalse('new pw.Week(2000, 1).equals(new pw.Week(2001, 2))');
debug('Test Week.previous');
shouldBeEqualToString('new pw.Week(2000, 2).previous().toString()', '2000-W01');
shouldBeEqualToString('new pw.Week(2000, 2).previous(1).toString()', '2000-W01');
shouldBeEqualToString('new pw.Week(2000, 2).previous(2).toString()', '1999-W52');
shouldBeEqualToString('new pw.Week(2000, 2).previous(3).toString()', '1999-W51');
shouldBeEqualToString('new pw.Week(2000, 2).previous(100).toString()', '1998-W07');
debug('Test Week.next');
shouldBeEqualToString('new pw.Week(2000, 2).next().toString()', '2000-W03');
shouldBeEqualToString('new pw.Week(2000, 2).next(1).toString()', '2000-W03');
shouldBeEqualToString('new pw.Week(2000, 2).next(2).toString()', '2000-W04');
shouldBeEqualToString('new pw.Week(2000, 2).next(3).toString()', '2000-W05');
shouldBeEqualToString('new pw.Week(2000, 2).next(100).toString()', '2001-W50');
debug('Test Week.firstDay');
shouldBeEqualToString('new pw.Week(2000, 2).firstDay().toString()', '2000-01-10');
shouldBeEqualToString('new pw.Week(2000, 50).firstDay().toString()', '2000-12-11');
shouldBeEqualToString('new pw.Week(1, 1).firstDay().toString()', '0001-01-01');
shouldBeEqualToString('new pw.Week(1, 50).firstDay().toString()', '0001-12-10');
shouldBeEqualToString('new pw.Week(20000, 1).firstDay().toString()', '20000-01-03');
shouldBeEqualToString('new pw.Week(20000, 50).firstDay().toString()', '20000-12-11');
debug('Test Week.middleDay');
shouldBeEqualToString('new pw.Week(2000, 2).middleDay().toString()', '2000-01-13');
shouldBeEqualToString('new pw.Week(2000, 50).middleDay().toString()', '2000-12-14');
shouldBeEqualToString('new pw.Week(1, 1).middleDay().toString()', '0001-01-04');
shouldBeEqualToString('new pw.Week(1, 50).middleDay().toString()', '0001-12-13');
shouldBeEqualToString('new pw.Week(20000, 1).middleDay().toString()', '20000-01-06');
shouldBeEqualToString('new pw.Week(20000, 50).middleDay().toString()', '20000-12-14');
debug('Test Week.lastDay');
shouldBeEqualToString('new pw.Week(2000, 2).lastDay().toString()', '2000-01-16');
shouldBeEqualToString('new pw.Week(2000, 50).lastDay().toString()', '2000-12-17');
shouldBeEqualToString('new pw.Week(1, 1).lastDay().toString()', '0001-01-07');
shouldBeEqualToString('new pw.Week(1, 50).lastDay().toString()', '0001-12-16');
shouldBeEqualToString('new pw.Week(20000, 1).lastDay().toString()', '20000-01-09');
shouldBeEqualToString('new pw.Week(20000, 50).lastDay().toString()', '20000-12-17');
debug('Test Week.valueOf');
shouldBe('new pw.Week(1970, 1).valueOf()', '-259200000');
shouldBe('new pw.Week(1970, 2).valueOf()', '345600000');
shouldBe('new pw.Week(2000, 1).valueOf()', '946857600000');
shouldBe('new pw.Week(1, 1).valueOf()', '-62135596800000');
shouldBe('new pw.Week(20000, 2).valueOf()', '568972598400000');
debug('Test Week.toString');
shouldBeEqualToString('new pw.Week(2000, 2).toString()', '2000-W02');
shouldBeEqualToString('new pw.Week(1, 50).toString()', '0001-W50');
shouldBeEqualToString('new pw.Week(20000, 2).toString()', '20000-W02');
debug('Test Week.parse');
shouldBeEqualToString('pw.Week.parse("2000-W02").toString()', '2000-W02');
shouldBeEqualToString('pw.Week.parse("1999-W10").toString()', '1999-W10');
shouldBeEqualToString('pw.Week.parse("0001-W23").toString()', '0001-W23');
shouldBeEqualToString('pw.Week.parse("12345-W32").toString()', '12345-W32');
// Incorrect number of leading zeros
shouldBeEqualToString('pw.Week.parse("02000-W02").toString()', '2000-W02');
shouldBeEqualToString('pw.Week.parse("2000-W002").toString()', '2000-W02');
shouldBeEqualToString('pw.Week.parse("2000-W2").toString()', '2000-W02');
shouldBeEqualToString('pw.Week.parse("1-W02").toString()', '0001-W02');
// Invalid
shouldBeNull('pw.Week.parse("2000-02-03")');
shouldBeNull('pw.Week.parse("2000-02")');
shouldBeNull('pw.Week.parse("x")');
shouldBeNull('pw.Week.parse("")');
}
function testMonth() {
debug('Test Month constructor');
shouldBe('new pw.Month(2000, 1).year', '2000');
shouldBe('new pw.Month(2000, 1).month', '1');
shouldBe('new pw.Month(2000, -1).year', '1999');
shouldBe('new pw.Month(2000, -1).month', '11');
shouldBe('new pw.Month(-2000, 1).year', '-2000');
shouldBe('new pw.Month(-2000, 1).month', '1');
shouldBe('new pw.Month(2000, 13).year', '2001');
shouldBe('new pw.Month(2000, 13).month', '1');
shouldBe('new pw.Month(200000, 1).year', '200000');
shouldBe('new pw.Month(200000, 1).month', '1');
debug('Test Month.equals');
shouldBeTrue('new pw.Month(2000, 1).equals(new pw.Month(2000, 1))');
shouldBeTrue('new pw.Month(2000, 1).equals(new pw.Month(2001, -11))');
shouldBeTrue('new pw.Month(2000, 1).equals(new pw.Month(1999, 13))');
shouldBeFalse('new pw.Month(2000, 1).equals(new pw.Month(2000, 2))');
shouldBeFalse('new pw.Month(2000, 1).equals(new pw.Month(2001, 1))');
shouldBeFalse('new pw.Month(2000, 1).equals(new pw.Month(2001, 2))');
debug('Test Month.previous');
shouldBeEqualToString('new pw.Month(2000, 2).previous().toString()', '2000-02');
shouldBeEqualToString('new pw.Month(2000, 2).previous(1).toString()', '2000-02');
shouldBeEqualToString('new pw.Month(2000, 2).previous(2).toString()', '2000-01');
shouldBeEqualToString('new pw.Month(2000, 2).previous(3).toString()', '1999-12');
shouldBeEqualToString('new pw.Month(2000, 2).previous(100).toString()', '1991-11');
debug('Test Month.next');
shouldBeEqualToString('new pw.Month(2000, 2).next().toString()', '2000-04');
shouldBeEqualToString('new pw.Month(2000, 2).next(1).toString()', '2000-04');
shouldBeEqualToString('new pw.Month(2000, 2).next(2).toString()', '2000-05');
shouldBeEqualToString('new pw.Month(2000, 2).next(3).toString()', '2000-06');
shouldBeEqualToString('new pw.Month(2000, 2).next(100).toString()', '2008-07');
debug('Test Month.firstDay');
shouldBeEqualToString('new pw.Month(2000, 1).firstDay().toString()', '2000-02-01');
shouldBeEqualToString('new pw.Month(2000, 11).firstDay().toString()', '2000-12-01');
shouldBeEqualToString('new pw.Month(1, 0).firstDay().toString()', '0001-01-01');
shouldBeEqualToString('new pw.Month(1, 1).firstDay().toString()', '0001-02-01');
shouldBeEqualToString('new pw.Month(1, 11).firstDay().toString()', '0001-12-01');
shouldBeEqualToString('new pw.Month(20000, 0).firstDay().toString()', '20000-01-01');
shouldBeEqualToString('new pw.Month(20000, 1).firstDay().toString()', '20000-02-01');
shouldBeEqualToString('new pw.Month(20000, 11).firstDay().toString()', '20000-12-01');
debug('Test Month.middleDay');
shouldBeEqualToString('new pw.Month(2000, 0).middleDay().toString()', '2000-01-15');
shouldBeEqualToString('new pw.Month(2000, 1).middleDay().toString()', '2000-02-14');
shouldBeEqualToString('new pw.Month(2000, 2).middleDay().toString()', '2000-03-15');
shouldBeEqualToString('new pw.Month(2000, 11).middleDay().toString()', '2000-12-15');
shouldBeEqualToString('new pw.Month(1, 0).middleDay().toString()', '0001-01-15');
shouldBeEqualToString('new pw.Month(1, 1).middleDay().toString()', '0001-02-14');
shouldBeEqualToString('new pw.Month(1, 2).middleDay().toString()', '0001-03-15');
shouldBeEqualToString('new pw.Month(1, 11).middleDay().toString()', '0001-12-15');
shouldBeEqualToString('new pw.Month(20000, 0).middleDay().toString()', '20000-01-15');
shouldBeEqualToString('new pw.Month(20000, 1).middleDay().toString()', '20000-02-14');
shouldBeEqualToString('new pw.Month(20000, 2).middleDay().toString()', '20000-03-15');
shouldBeEqualToString('new pw.Month(20000, 11).middleDay().toString()', '20000-12-15');
debug('Test Month.lastDay');
shouldBeEqualToString('new pw.Month(2000, 1).lastDay().toString()', '2000-02-29');
shouldBeEqualToString('new pw.Month(2000, 11).lastDay().toString()', '2000-12-31');
shouldBeEqualToString('new pw.Month(1, 0).lastDay().toString()', '0001-01-31');
shouldBeEqualToString('new pw.Month(1, 1).lastDay().toString()', '0001-02-28');
shouldBeEqualToString('new pw.Month(1, 11).lastDay().toString()', '0001-12-31');
shouldBeEqualToString('new pw.Month(20000, 0).lastDay().toString()', '20000-01-31');
shouldBeEqualToString('new pw.Month(20000, 1).lastDay().toString()', '20000-02-29');
shouldBeEqualToString('new pw.Month(20000, 11).lastDay().toString()', '20000-12-31');
debug('Test Month.valueOf');
shouldBe('new pw.Month(1970, 0).valueOf()', '0');
shouldBe('new pw.Month(1970, 1).valueOf()', '1');
shouldBe('new pw.Month(2000, 0).valueOf()', '360');
shouldBe('new pw.Month(1, 0).valueOf()', '-23628');
shouldBe('new pw.Month(20000, 11).valueOf()', '216371');
debug('Test Month.toString');
shouldBeEqualToString('new pw.Month(2000, 0).toString()', '2000-01');
shouldBeEqualToString('new pw.Month(1, 11).toString()', '0001-12');
shouldBeEqualToString('new pw.Month(20000, 5).toString()', '20000-06');
debug('Test Month.parse');
shouldBeEqualToString('pw.Month.parse("2000-01").toString()', '2000-01');
shouldBeEqualToString('pw.Month.parse("1999-10").toString()', '1999-10');
shouldBeEqualToString('pw.Month.parse("0001-11").toString()', '0001-11');
shouldBeEqualToString('pw.Month.parse("12345-03").toString()', '12345-03');
// Incorrect number of leading zeros
shouldBeEqualToString('pw.Month.parse("02000-02").toString()', '2000-02');
shouldBeEqualToString('pw.Month.parse("2000-002").toString()', '2000-02');
shouldBeEqualToString('pw.Month.parse("2000-2").toString()', '2000-02');
shouldBeEqualToString('pw.Month.parse("1-02").toString()', '0001-02');
// Invalid
shouldBeNull('pw.Month.parse("2000-02-03")');
shouldBeNull('pw.Month.parse("2000-W02")');
shouldBeNull('pw.Month.parse("x")');
shouldBeNull('pw.Month.parse("")');
}
</script>
</body>
</html>