var moment = require("../../moment");

exports.week_year = {
    "iso weekday": function (test) {
        var i;
        test.expect(7 * 7);

        for (i = 0; i < 7; ++i) {
            moment.lang('dow:' + i + ',doy: 6', {week: {dow: i, doy: 6}});
            test.equal(moment([1985, 1,  4]).isoWeekday(), 1, "Feb  4 1985 is Monday    -- 1st day");
            test.equal(moment([2029, 8, 18]).isoWeekday(), 2, "Sep 18 2029 is Tuesday   -- 2nd day");
            test.equal(moment([2013, 3, 24]).isoWeekday(), 3, "Apr 24 2013 is Wednesday -- 3rd day");
            test.equal(moment([2015, 2,  5]).isoWeekday(), 4, "Mar  5 2015 is Thursday  -- 4th day");
            test.equal(moment([1970, 0,  2]).isoWeekday(), 5, "Jan  2 1970 is Friday    -- 5th day");
            test.equal(moment([2001, 4, 12]).isoWeekday(), 6, "May 12 2001 is Saturday  -- 6th day");
            test.equal(moment([2000, 0,  2]).isoWeekday(), 7, "Jan  2 2000 is Sunday    -- 7th day");
        }
        test.done();
    },

    "iso weekday setter" : function (test) {
        test.expect(27);

        var a = moment([2011, 0, 10]);
        test.equal(moment(a).isoWeekday(1).date(),  10, 'set from mon to mon');
        test.equal(moment(a).isoWeekday(4).date(),  13, 'set from mon to thu');
        test.equal(moment(a).isoWeekday(7).date(),  16, 'set from mon to sun');
        test.equal(moment(a).isoWeekday(-6).date(),  3, 'set from mon to last mon');
        test.equal(moment(a).isoWeekday(-3).date(),  6, 'set from mon to last thu');
        test.equal(moment(a).isoWeekday(0).date(),   9, 'set from mon to last sun');
        test.equal(moment(a).isoWeekday(8).date(),  17, 'set from mon to next mon');
        test.equal(moment(a).isoWeekday(11).date(), 20, 'set from mon to next thu');
        test.equal(moment(a).isoWeekday(14).date(), 23, 'set from mon to next sun');

        a = moment([2011, 0, 13]);
        test.equal(moment(a).isoWeekday(1).date(), 10, 'set from thu to mon');
        test.equal(moment(a).isoWeekday(4).date(), 13, 'set from thu to thu');
        test.equal(moment(a).isoWeekday(7).date(), 16, 'set from thu to sun');
        test.equal(moment(a).isoWeekday(-6).date(),  3, 'set from thu to last mon');
        test.equal(moment(a).isoWeekday(-3).date(),  6, 'set from thu to last thu');
        test.equal(moment(a).isoWeekday(0).date(),   9, 'set from thu to last sun');
        test.equal(moment(a).isoWeekday(8).date(),  17, 'set from thu to next mon');
        test.equal(moment(a).isoWeekday(11).date(), 20, 'set from thu to next thu');
        test.equal(moment(a).isoWeekday(14).date(), 23, 'set from thu to next sun');

        a = moment([2011, 0, 16]);
        test.equal(moment(a).isoWeekday(1).date(), 10, 'set from sun to mon');
        test.equal(moment(a).isoWeekday(4).date(), 13, 'set from sun to thu');
        test.equal(moment(a).isoWeekday(7).date(), 16, 'set from sun to sun');
        test.equal(moment(a).isoWeekday(-6).date(),  3, 'set from sun to last mon');
        test.equal(moment(a).isoWeekday(-3).date(),  6, 'set from sun to last thu');
        test.equal(moment(a).isoWeekday(0).date(),   9, 'set from sun to last sun');
        test.equal(moment(a).isoWeekday(8).date(),  17, 'set from sun to next mon');
        test.equal(moment(a).isoWeekday(11).date(), 20, 'set from sun to next thu');
        test.equal(moment(a).isoWeekday(14).date(), 23, 'set from sun to next sun');

        test.done();
    },

    "weekday first day of week Sunday (dow 0)": function (test) {
        test.expect(7);

        moment.lang('dow: 0,doy: 6', {week: {dow: 0, doy: 6}});
        test.equal(moment([1985, 1,  3]).weekday(), 0, "Feb  3 1985 is Sunday    -- 0th day");
        test.equal(moment([2029, 8, 17]).weekday(), 1, "Sep 17 2029 is Monday    -- 1st day");
        test.equal(moment([2013, 3, 23]).weekday(), 2, "Apr 23 2013 is Tuesday   -- 2nd day");
        test.equal(moment([2015, 2,  4]).weekday(), 3, "Mar  4 2015 is Wednesday -- 3nd day");
        test.equal(moment([1970, 0,  1]).weekday(), 4, "Jan  1 1970 is Thursday  -- 4th day");
        test.equal(moment([2001, 4, 11]).weekday(), 5, "May 11 2001 is Friday    -- 5th day");
        test.equal(moment([2000, 0,  1]).weekday(), 6, "Jan  1 2000 is Saturday  -- 6th day");
        test.done();
    },

    "weekday first day of week Monday (dow 1)": function (test) {
        test.expect(7);

        moment.lang('dow: 1,doy: 6', {week: {dow: 1, doy: 6}});
        test.equal(moment([1985, 1,  4]).weekday(), 0, "Feb  4 1985 is Monday    -- 0th day");
        test.equal(moment([2029, 8, 18]).weekday(), 1, "Sep 18 2029 is Tuesday   -- 1st day");
        test.equal(moment([2013, 3, 24]).weekday(), 2, "Apr 24 2013 is Wednesday -- 2nd day");
        test.equal(moment([2015, 2,  5]).weekday(), 3, "Mar  5 2015 is Thursday  -- 3nd day");
        test.equal(moment([1970, 0,  2]).weekday(), 4, "Jan  2 1970 is Friday    -- 4th day");
        test.equal(moment([2001, 4, 12]).weekday(), 5, "May 12 2001 is Saturday  -- 5th day");
        test.equal(moment([2000, 0,  2]).weekday(), 6, "Jan  2 2000 is Sunday    -- 6th day");
        test.done();
    },

    "weekday first day of week Tuesday (dow 2)": function (test) {
        test.expect(7);

        moment.lang('dow: 2,doy: 6', {week: {dow: 2, doy: 6}});
        test.equal(moment([1985, 1,  5]).weekday(), 0, "Feb  5 1985 is Tuesday   -- 0th day");
        test.equal(moment([2029, 8, 19]).weekday(), 1, "Sep 19 2029 is Wednesday -- 1st day");
        test.equal(moment([2013, 3, 25]).weekday(), 2, "Apr 25 2013 is Thursday  -- 2nd day");
        test.equal(moment([2015, 2,  6]).weekday(), 3, "Mar  6 2015 is Friday    -- 3nd day");
        test.equal(moment([1970, 0,  3]).weekday(), 4, "Jan  3 1970 is Staturday -- 4th day");
        test.equal(moment([2001, 4, 13]).weekday(), 5, "May 13 2001 is Sunday    -- 5th day");
        test.equal(moment([2000, 0,  3]).weekday(), 6, "Jan  3 2000 is Monday    -- 6th day");
        test.done();
    },

    "weekday first day of week Wednesday (dow 3)": function (test) {
        test.expect(7);

        moment.lang('dow: 3,doy: 6', {week: {dow: 3, doy: 6}});
        test.equal(moment([1985, 1,  6]).weekday(), 0, "Feb  6 1985 is Wednesday -- 0th day");
        test.equal(moment([2029, 8, 20]).weekday(), 1, "Sep 20 2029 is Thursday  -- 1st day");
        test.equal(moment([2013, 3, 26]).weekday(), 2, "Apr 26 2013 is Friday    -- 2nd day");
        test.equal(moment([2015, 2,  7]).weekday(), 3, "Mar  7 2015 is Saturday  -- 3nd day");
        test.equal(moment([1970, 0,  4]).weekday(), 4, "Jan  4 1970 is Sunday    -- 4th day");
        test.equal(moment([2001, 4, 14]).weekday(), 5, "May 14 2001 is Monday    -- 5th day");
        test.equal(moment([2000, 0,  4]).weekday(), 6, "Jan  4 2000 is Tuesday   -- 6th day");
        moment.lang('dow:3,doy:6', null);
        test.done();
    },

    "weekday first day of week Thursday (dow 4)": function (test) {
        test.expect(7);

        moment.lang('dow: 4,doy: 6', {week: {dow: 4, doy: 6}});

        test.equal(moment([1985, 1,  7]).weekday(), 0, "Feb  7 1985 is Thursday  -- 0th day");
        test.equal(moment([2029, 8, 21]).weekday(), 1, "Sep 21 2029 is Friday    -- 1st day");
        test.equal(moment([2013, 3, 27]).weekday(), 2, "Apr 27 2013 is Saturday  -- 2nd day");
        test.equal(moment([2015, 2,  8]).weekday(), 3, "Mar  8 2015 is Sunday    -- 3nd day");
        test.equal(moment([1970, 0,  5]).weekday(), 4, "Jan  5 1970 is Monday    -- 4th day");
        test.equal(moment([2001, 4, 15]).weekday(), 5, "May 15 2001 is Tuesday   -- 5th day");
        test.equal(moment([2000, 0,  5]).weekday(), 6, "Jan  5 2000 is Wednesday -- 6th day");
        test.done();
    },

    "weekday first day of week Friday (dow 5)": function (test) {
        test.expect(7);

        moment.lang('dow: 5,doy: 6', {week: {dow: 5, doy: 6}});
        test.equal(moment([1985, 1,  8]).weekday(), 0, "Feb  8 1985 is Friday    -- 0th day");
        test.equal(moment([2029, 8, 22]).weekday(), 1, "Sep 22 2029 is Staturday -- 1st day");
        test.equal(moment([2013, 3, 28]).weekday(), 2, "Apr 28 2013 is Sunday    -- 2nd day");
        test.equal(moment([2015, 2,  9]).weekday(), 3, "Mar  9 2015 is Monday    -- 3nd day");
        test.equal(moment([1970, 0,  6]).weekday(), 4, "Jan  6 1970 is Tuesday   -- 4th day");
        test.equal(moment([2001, 4, 16]).weekday(), 5, "May 16 2001 is Wednesday -- 5th day");
        test.equal(moment([2000, 0,  6]).weekday(), 6, "Jan  6 2000 is Thursday  -- 6th day");
        test.done();
    },

    "weekday first day of week Saturday (dow 6)": function (test) {
        test.expect(7);

        moment.lang('dow: 6,doy: 6', {week: {dow: 6, doy: 6}});
        test.equal(moment([1985, 1,  9]).weekday(), 0, "Feb  9 1985 is Staturday -- 0th day");
        test.equal(moment([2029, 8, 23]).weekday(), 1, "Sep 23 2029 is Sunday    -- 1st day");
        test.equal(moment([2013, 3, 29]).weekday(), 2, "Apr 29 2013 is Monday    -- 2nd day");
        test.equal(moment([2015, 2, 10]).weekday(), 3, "Mar 10 2015 is Tuesday   -- 3nd day");
        test.equal(moment([1970, 0,  7]).weekday(), 4, "Jan  7 1970 is Wednesday -- 4th day");
        test.equal(moment([2001, 4, 17]).weekday(), 5, "May 17 2001 is Thursday  -- 5th day");
        test.equal(moment([2000, 0,  7]).weekday(), 6, "Jan  7 2000 is Friday    -- 6th day");
        test.done();
    }
};
