if(typeof require !== 'undefined') { var Specification = require('../scripts/specification-converter.js'); } Date.Specification = new Specification({ 'Pass': { setup: function() { this.now = new Date(); this.now.setMilliseconds(0); }, 'thursday': { run: function() { }, assert: function() { return Date.thursday().equals( Date.parse('thursday') ) } }, 'november': { run: function() { }, assert: function() { return Date.november().equals( Date.parse('november') ) } }, 'friday 1pm': { run: function() { }, assert: function() { return Date.friday().set({hour:13}).equals( Date.parse('friday 1pm') ) } }, 'mon 2:35': { run: function() { }, assert: function() { return Date.monday().set({hour:2, minute:35}).equals( Date.parse('mon 2:35') ) } }, '4pm': { run: function() { }, assert: function() { return Date.today().set({hour:16}).equals( Date.parse('4pm') ) } }, 'yesterday': { run: function() { }, assert: function() { return Date.today().add(-1).day().equals( Date.parse('yesterday') ) } }, 'today': { run: function() { }, assert: function() { return Date.today().equals( Date.parse('today') ) } }, 'tomorrow': { run: function() { }, assert: function() { return Date.today().add(1).day().equals( Date.parse('tomorrow') ) } }, 'next month': { run: function() { }, assert: function() { return Date.today().next().month().equals( Date.parse('next month') ) } }, '5 months before now': { run: function() { }, assert: function() { return new Date().set({ millisecond: 0 }).add(-5).months().equals(Date.parse('5 months before now').set({millisecond: 0})) } }, '7 days from now': { run: function() { }, assert: function() { return new Date().add(7).days().set({millisecond: 0}).equals(Date.parse('7 days from now').set({millisecond:0})) } }, '3 years ago': { run: function() { }, assert: function() { return Date.today().add(-3).years().equals( Date.parse('3 years ago') ) } }, '7 hours ago': { run: function() { }, assert: function() { return (new Date()).add(-7).hours().set({millisecond: 0}).equals(Date.parse('7 hours ago').set({millisecond: 0})) } }, '1 week hence': { run: function() { }, assert: function() { return Date.today().add(7).days().equals(Date.parse('1 week hence')) } }, '1 year ago tomorrow': { run: function() { }, assert: function() { return Date.today().add({years: -1, days: 1}).equals(Date.parse('1 year ago tomorrow')) } }, 'January 5': { run: function() { }, assert: function() { return Date.january().set({day: 5}).equals(Date.parse('January 5')) } }, 'dec 25': { run: function() { }, assert: function() { return Date.december().set({day: 25}).equals(Date.parse('dec 25')) } }, 'may 27th': { run: function() { }, assert: function() { return Date.may().set({day: 27}).equals(Date.parse('may 27th')) } }, 'October 2006': { run: function() { }, assert: function() { return Date.october().set({year: 2006}).equals(Date.parse('October 2006')) } }, 'jan 3 2010': { run: function() { }, assert: function() { return new Date(2010,0,3).equals(Date.parse('jan 3 2010')) } }, 'february 14, 2004': { run: function() { }, assert: function() { return new Date(2004,1,14).equals(Date.parse('february 14, 2004')) } }, '3 jan 2000': { run: function() { }, assert: function() { return new Date(2000,0,3).equals(Date.parse('3 jan 2000')) } }, '5/27/1979': { run: function() { }, assert: function() { return new Date(1979,4,27).equals(Date.parse('5/27/1979')) } }, '27/5/1979': { run: function() { }, assert: function() { return new Date(1979,4,27).equals(Date.parse('27/5/1979')) } }, '05/06': { run: function() { }, assert: function() { return Date.may().set({day: 6}).equals(Date.parse('05/06')) } }, '1979-05-27': { run: function() { }, assert: function() { return new Date(1979,4,27).equals(Date.parse('1979-05-27')) } }, 'Friday': { run: function() { }, assert: function() { return Date.friday().equals(Date.parse('Friday')) } }, '5': { run: function() { }, assert: function() { return Date.today().set({day: 5}).equals(Date.parse('5')) } }, '4:00': { run: function() { }, assert: function() { return Date.today().set({hour: 4}).equals(Date.parse('4:00')) } }, '17:00': { run: function() { }, assert: function() { return Date.today().set({hour: 17}).equals(Date.parse('17:00')) } }, '0800': { run: function() { }, assert: function() { return Date.today().set({year: 800, day: 1}).equals(Date.parse('0800')) } }, '17 april 85': { run: function() { }, assert: function() { return new Date(1985,3,17).equals(Date.parse('17 april 85')) } }, '1979-05-27 05:00': { run: function() { }, assert: function() { return new Date(1979,4,27,5,0,0).equals(Date.parse('1979-05-27 05:00')) } }, 'January 5 @ 7pm': { run: function() { }, assert: function() { return Date.january().set({day: 5, hour: 19}).equals(Date.parse('January 5 @ 7pm')) } }, 'this second : The term "this" is not supported': { run: function() { }, assert: function() { return new Date().equals( Date.parse('this second') ) } } }, 'Fail': { setup: function() { this.now = new Date(); this.now.setMilliseconds(0); }, 'summer : Not really sure what "summer" should return.': { run: function() { }, assert: function() { return Date.july().equals( Date.parse('summer') ) } }, 'friday 13:00 : Both "friday 1pm" and "13:00" pass.': { run: function() { }, assert: function() { return Date.friday().set({hour:13}).equals( Date.parse('friday 13:00') ) } }, '6 in the morning : The term "morning" is not supported': { run: function() { }, assert: function() { return Date.today().set({hour:6}).equals( Date.parse('6 in the morning') ) } }, 'sat 7 in the evening : The term "evening" is not supported': { run: function() { }, assert: function() { return Date.today().set({hour:6}).equals( Date.parse('sat 7 in the evening') ) } }, 'this tuesday : The term "this" is not supported': { run: function() { }, assert: function() { return Date.tuesday().equals( Date.parse('this tuesday') ) } }, 'last winter : The term "winter" is not supported': { run: function() { }, assert: function() { return Date.today().set({ month: 11, day: 21 }).add(-1).year().equals( Date.parse('last winter') ) } }, 'thursday last week -- last not supported': { run: function() { }, assert: function() { return Date.thursday().last().week().equals( Date.parse('thursday last week') ) } }, 'last week tuesday -- last not supported': { run: function() { }, assert: function() { return Date.tuesday().last().week().equals( Date.parse('last week tuesday') ) } }, 'yesterday at 4:00 -- at not supported': { run: function() { this.parsed = Date.parse('yesterday at 4:00'); this.computed = Date.today().addDays(-1).set({ hour: 4 }); }, assert: function() { return this.parsed.equals(this.computed); } }, 'tomorrow at 6:45pm -- at not supported': { run: function() { }, assert: function() { return Date.today().addDays(1).set({ hour: 18, minute: 45}).equals( Date.parse('tomorrow at 6:45pm') ) } }, 'last friday at 20:00 -- last not supported': { run: function() { }, assert: function() { return Date.today().last().friday().set({ hour: 20 }).equals( Date.parse('last friday at 20:00') ) } }, 'this morning : The term "morning" is not supported': { run: function() { }, assert: function() { return Date.today().set({ hour: 9 }).equals( Date.parse('this morning') ) } }, 'last night : The term "night" is not supported': { run: function() { }, assert: function() { return Date.today().set({ hour: 18 }).equals( Date.parse('last night') ) } }, 'afternoon yesterday : The term "afternoon" is not supported': { run: function() { }, assert: function() { return Date.today().add(1).day().set({ hour: 12 }).equals( Date.parse('afternoon yesterday') ) } }, // 'in 3 hours : problem with "in"': { // run: function() { }, // assert: function() { return new Date().set({millisecond:0}).add(3).hours().equals(Date.parse('in 3 hours').set({millisecond:0})) } // }, '3 months ago saturday at 5:00 pm': { run: function() { }, assert: function() { return Date.saturday().add({month: -3}).set({hour: 17}).equals(Date.parse('3 months ago saturday at 5:00 pm')) } }, '7 hours before tomorrow at noon': { run: function() { }, assert: function() { return Date.today().add({day: 1}).set({hour: 5}).equals(Date.parse('7 hours before tomorrow at noon')) } }, '3rd wednesday in november': { run: function() { }, assert: function() { return Date.november().third().wednesday().equals(Date.parse('3rd wednesday in november')) } }, '3rd month next year': { run: function() { }, assert: function() { return Date.today().add(1).year().set({month: 2}).equals(Date.parse('3rd month next year')) } }, '3rd thursday this september': { run: function() { }, assert: function() { return Date.september().third().thursday().equals(Date.parse('3rd thursday this september')) } }, '4th day last week': { run: function() { }, assert: function() { return Date.sunday().add(3).days().equals(Date.parse('4th day last week')) } }, 'oct 06 : Currently returns 6th of October, not October 2006': { run: function() { }, assert: function() { return Date.october().set({year: 2006}).equals(Date.parse('oct 06')) } } } });