// a bunch of tests copy+pasted from the chronic date parser, // by Tom Preston-Werner ❤️ // https://github.com/mojombo/chronic/edit/master/test/test_parsing.rb import test from 'tape' import spacetime from 'spacetime' import nlp from './_lib.js' const fmt = (iso) => (iso ? spacetime(iso).format('iso-short') : '-') // eslint-disable-next-line const mk = function (y, m, d, h, sec, mil) { let s = spacetime.now().year(y) if (m) { s = s.month(m - 1) } if (d) { s = s.date(d) } if (h) { s = s.hour(h) } if (sec) { s = s.second(sec) } if (mil) { s = s.millisecond(mil) } return fmt(s) } test('chronic-tests-one', (t) => { const arr = [ ['2012-08-02T13:00:00', mk(2012, 8, 2, 13)], ['aug 3', mk(2007, 8, 3, 12)], ['aug. 3', mk(2007, 8, 3, 12)], ['aug-20', mk(2007, 8, 20, 12)], ['may 27', mk(2007, 5, 27, 12)], ['may 28', mk(2007, 5, 28, 12)], ['may 28 5pm', mk(2007, 5, 28, 17)], ['may 28 at 5pm', mk(2007, 5, 28, 17)], // ['may 28 at 5:32.19pm', mk(2006, 5, 28, 17, 32, 19)], // ['may 28 at 5:32:19.764', mk(2007, 5, 28, 17, 32, 19, 764000)], ['5pm on may 28', mk(2007, 5, 28, 17)], ['5pm may 28', mk(2007, 5, 28, 17)], ['5 on may 28', mk(2007, 5, 28, 5)], ['may 27th', mk(2007, 5, 27, 12)], ['may 27th 5:00 pm', mk(2007, 5, 27, 17)], ['may 27th at 5pm', mk(2007, 5, 27, 17)], // ['may 27th at 5', mk(2007, 5, 27, 5)], // ['fifteenth of this month', mk(2007, 8, 15, 12)], ['22nd February', mk(2007, 2, 22, 12)], ['31st of may at 6:30pm', mk(2007, 5, 31, 18, 30)], ['11th december 8am', mk(2006, 12, 11, 8)], // ['2009 May 22nd', mk(2009, 05, 22, 12)], ['22 February', mk(2007, 2, 22, 12)], ['22 feb', mk(2007, 2, 22, 12)], ['22-feb', mk(2007, 2, 22, 12)], ['31 of may at 6:30pm', mk(2007, 5, 31, 18, 30)], ['11 december 8am', mk(2006, 12, 11, 8)], ['5:00 pm may 27th', mk(2007, 5, 27, 17)], ['05:00 pm may 27th', mk(2007, 5, 27, 17)], ['5pm on may 27th', mk(2007, 5, 27, 17)], // ['5 on may 27th', mk(2007, 5, 27, 5)], // ["may '97", mk(1997, 5, 16, 12)], // ['may 33', mk(2033, 5, 16, 12)], // ['may 32', mk(2032, 5, 16, 12, 0, 0)], // ["may '01", mk(2001, 5, 16, 12, 0, 0)], ['November 18, 2010', mk(2010, 11, 18, 12)], ['Jan 1, 2010', mk(2010, 1, 1, 12)], ['February 14, 2004', mk(2004, 2, 14, 12)], ['jan 3 2010', mk(2010, 1, 3, 12)], ['jan 3 2010 midnight', mk(2010, 1, 3, 0)], ['jan 3 2010 at midnight', mk(2010, 1, 3, 0)], ['jan 3 2010 at 4', mk(2010, 1, 3, 4)], ['may 27, 1979', mk(1979, 5, 27, 12)], // ["may 27 '79", mk(1979, 5, 27, 12)], // ['may 27 79 4:30', mk(1979, 5, 27, 16, 30)], // ['may 27 79 at 4:30', mk(1979, 5, 27, 4, 30)], // ['may 27 32', mk(2032, 5, 27, 12, 0, 0)], // ['oct 5 2012 1045pm', mk(2012, 10, 5, 22, 45)], // ['may 1st 01', mk(2001, 5, 1, 12)], ['November 18th 2010', mk(2010, 11, 18, 12)], ['November 18th, 2010', mk(2010, 11, 18, 12)], ['November 18th 2010 midnight', mk(2010, 11, 18, 0)], // ['November 18th 2010 at midnight', mk(2010, 11, 19, 0)], ['November 18th 2010 at 4', mk(2010, 11, 18, 16)], ['November 18th 2010 at 4', mk(2010, 11, 18, 4)], ['March 30th, 1979', mk(1979, 3, 30, 12)], // ['March 30th 79', mk(1979, 3, 30, 12)], // ['March 30th 79 4:30', mk(1979, 3, 30, 16, 30)], // ['March 30th 79 at 4:30', mk(1979, 3, 30, 4, 30)], ['22nd February 2012', mk(2012, 2, 22, 12)], // ['11th december 79', mk(1979, 12, 11, 12)], ['3 jan 2010', mk(2010, 1, 3, 12)], ['3 jan 2010 4pm', mk(2010, 1, 3, 16)], ['27 Oct 2006 7:30pm', mk(2006, 10, 27, 19, 30)], // ['3 jan 10', mk(2010, 1, 3, 12)], // ['3 jan 10', mk(2010, 1, 3, 12)], // ['3 jan 10', mk(2010, 1, 3, 12)], ['5/27/1979', mk(1979, 5, 27, 12), 'iso-times'], ['5/27/1979 4am', mk(1979, 5, 27, 4), 'iso-times'], // ['7/12/11', mk(2011, 7, 12, 12), 'iso-times'], // ['7/12/11', mk(2011, 12, 7, 12), 'iso-times'], ['9/19/2011 6:05:57 PM', mk(2011, 9, 19, 18, 5, 57), 'iso-times'], ['2013-03-12 17:00', mk(2013, 3, 12, 17, 0, 0), 'iso-times'], ['27/5/1979', mk(1979, 5, 27, 12)], ['27/5/1979 @ 0700', mk(1979, 5, 27, 7)], ['03/18/2012 09:26 pm', mk(2012, 3, 18, 21, 26)], // ['30.07.2013 16:34:22', mk(2013, 7, 30, 16, 34, 22)], // ['09.08.2013', mk(2013, 8, 9, 12)], // ['9.8.2013', mk(2013, 8, 9, 12)], ['30-07-2013 21:53:49', mk(2013, 7, 30, 21, 53, 49), 'iso-short'], ['2000-1-1', mk(2000, 1, 1, 12), 'iso-short'], ['2006-08-20', mk(2006, 8, 20, 12), 'iso-short'], ['2006-08-20 7pm', mk(2006, 8, 20, 19), 'iso-short'], ['2006-08-20 03:00', mk(2006, 8, 20, 3), 'iso-short'], ['2006-08-20 03:30:30', mk(2006, 8, 20, 3, 30, 30), 'iso-short'], ['2006-08-20 15:30:30', mk(2006, 8, 20, 15, 30, 30), 'iso-short'], ['2006-08-20 15:30.30', mk(2006, 8, 20, 15, 30, 30), 'iso-short'], ['1902-08-20', mk(1902, 8, 20, 12, 0, 0), 'iso-short'], ['2013.07.30 11:45:23', mk(2013, 7, 30, 11, 45, 23)], ['2013.08.09', mk(2013, 8, 9, 12, 0, 0)], // ['2012:05:25 22:06:50', mk(2012, 5, 25, 22, 6, 50)], // ['05/06', mk(2007, 5, 6, 12)], // ['05/06', mk(2007, 6, 5, 12)], // ['05/06 6:05:57 PM', mk(2007, 5, 6, 18, 05, 57)], // ['05/06 6:05:57 PM', mk(2007, 6, 5, 18, 05, 57)], // ['13/09', mk(2006, 9, 13, 12),'dd/mm'], // ['1/13', mk(2007, 1, 13, 12),'dd/mm'], // ['3/13', mk(2006, 3, 13, 12),'dd/mm'], // ['12/1', mk(2005, 12, 1, 12),'dd/mm'], // ['12/1', mk(2006, 12, 1, 12),'dd/mm'], // ['12/1', mk(2006, 12, 1, 12),'dd/mm'], // ['8/1', mk(2006, 8, 1, 12),'dd/mm'], // ['8/1', mk(2007, 8, 1, 12),'dd/mm'], // ['8/1', mk(2006, 8, 1, 12),'dd/mm'], // ['1/1', mk(2006, 1, 1, 12),'dd/mm'], // ['1/1', mk(2007, 1, 1, 12),'dd/mm'], // ['1/1', mk(2006, 1, 1, 12),'dd/mm'], // ['2012-06', mk(2012, 6, 1)], // ['2013/12', mk(2013, 12, 1, 0)], ] const context = { today: [2006, 8, 24], } arr.forEach(a => { const found = nlp(a[0]).dates(context).json()[0] || {} const have = fmt((found.dates || {}).start) t.equal(have, a[1], a[0]) }) t.end() }) test('chronic-tests-two', (t) => { const context = { today: [2006, 7, 16], } const arr = [ // ['9am on Saturday', mk(2006, 8, 19, 9)], ['on Tuesday', mk(2006, 8, 22, 12)], ['1:00:00 PM', mk(2006, 8, 16, 13)], ['01:00:00 PM', mk(2006, 8, 16, 13)], ['today at 02:00:00', mk(2006, 8, 16, 14)], ['today at 02:00:00 AM', mk(2006, 8, 16, 2)], ['today at 3:00:00', mk(2006, 8, 16, 3)], ['today at 03:00:00', mk(2006, 8, 16, 3)], // ['tomorrow at 4a.m.', mk(2006, 8, 17, 4)], // ['3rd month next year', mk(2007, 3, 1)], // ['3rd thursday this september', mk(2006, 9, 21, 12)], // ['3rd thursday this november', mk(2010, 11, 18, 12)], // ['4th day last week', mk(2006, 8, 9, 12)], // ['30-Mar-11', mk(2011, 3, 30, 12)], // ['31-Aug-12', mk(2012, 8, 31)], // //end of testing handlers ['friday', mk(2006, 8, 18, 12)], // ['tue', mk(2006, 8, 22, 12)], ['13:00', mk(2006, 8, 16, 13), 'times'], ['13:45', mk(2006, 8, 16, 13, 45), 'times'], ['1:01pm', mk(2006, 8, 16, 13, 1), 'times'], ['2:01pm', mk(2006, 8, 16, 14, 1), 'times'], ['november', mk(2006, 11, 1), 'times'], ['friday 13:00', mk(2006, 8, 18, 13), 'times'], ['monday 4:00', mk(2006, 8, 21, 16), 'times'], ['sat 4:00', mk(2006, 8, 19, 4), 'times'], ['sunday 4:20', mk(2006, 8, 20, 4, 20), 'times'], ['4 pm', mk(2006, 8, 16, 16), 'times'], ['4 am', mk(2006, 8, 16, 4), 'times'], ['12 pm', mk(2006, 8, 16, 12), 'times'], ['12:01 pm', mk(2006, 8, 16, 12, 1), 'times'], ['12:01 am', mk(2006, 8, 16, 0, 1), 'times'], ['12 am', mk(2006, 8, 16), 'times'], ['4:00 in the morning', mk(2006, 8, 16, 4), 'times'], // ['0:10', mk(2006, 8, 17, 0, 10),'times'], ['november 4', mk(2006, 11, 4, 12)], ['aug 24', mk(2006, 8, 24, 12)], ['friday 1 pm', mk(2006, 8, 18, 13)], // ['friday 11 at night', mk(2006, 8, 18, 23)], // ['friday 11 in the evening', mk(2006, 8, 18, 23)], ['sunday 6am', mk(2006, 8, 20, 6)], ['friday evening at 7', mk(2006, 8, 18, 19)], // //year ['this year', mk(2006, 1, 1)], // //month name ['last november', mk(2005, 11, 1)], // //fortnight // ['this fortnight', mk(2006, 8, 21, 19, 30)], // ['this fortnight', mk(2006, 8, 14, 19)], // //week ['this week', mk(2006, 8, 14)], // //week // ['this weekend', mk(2006, 8, 20)], // ['this weekend', mk(2006, 8, 13)], // ['last weekend', mk(2006, 8, 13)], // //day // ['this day', mk(2006, 8, 16, 19)], ['today', mk(2006, 8, 16, 19)], ['yesterday', mk(2006, 8, 15, 12)], ['tomorrow', mk(2006, 8, 17, 12)], // //day name // ['this tuesday', mk(2006, 8, 22, 12),'rel-dayname'], // ['next tuesday', mk(2006, 8, 22, 12),'rel-dayname'], // ['last tuesday', mk(2006, 8, 15, 12),'rel-dayname'], // ['this wed', mk(2006, 8, 23, 12),'rel-dayname'], // ['next wed', mk(2006, 8, 23, 12),'rel-dayname'], // ['last wed', mk(2006, 8, 9, 12),'rel-dayname'], // //day portion // ['this morning', mk(2006, 8, 16, 9)], // ['tonight', mk(2006, 8, 16, 22)], // //hour // ['next hr', mk(2006, 8, 16, 15, 30, 0)], // ['next hrs', mk(2006, 8, 16, 15, 30, 0)], // //minute // ['next min', mk(2006, 8, 16, 14, 1, 30)], // ['next mins', mk(2006, 8, 16, 14, 1, 30)], // ['next minute', mk(2006, 8, 16, 14, 1, 30)], // //second // ['next sec', mk(2006, 8, 16, 14, 0, 1)], // ['next secs', mk(2006, 8, 16, 14, 0, 1)], // ['this second', mk(2006, 8, 16, 14)], // ['this second', mk(2006, 8, 16, 14)], // ['next second', mk(2006, 8, 16, 14, 0, 1)], // ['last second', mk(2006, 8, 16, 13, 59, 59)], // ['yesterday at 4:00', mk(2006, 8, 15, 16)], ['today at 9:00', mk(2006, 8, 16, 9)], // ['today at 2100', mk(2006, 8, 16, 21)], // ['this day at 0900', mk(2006, 8, 16, 9)], // ['tomorrow at 0900', mk(2006, 8, 17, 9)], // ['yesterday at 4:00', mk(2006, 8, 15, 4)], // ['last friday at 4:00', mk(2006, 8, 11, 16)], // ['next wed 4:00', mk(2006, 8, 23, 16)], // ['yesterday afternoon', mk(2006, 8, 15, 15)], // ['last week tuesday', mk(2006, 8, 8, 12)], ['tonight at 7', mk(2006, 8, 16, 19)], // ['tonight 7', mk(2006, 8, 16, 19)], // ['7 tonight', mk(2006, 8, 16, 19)], ['today at 6:00pm', mk(2006, 8, 16, 18)], ['today at 6:00am', mk(2006, 8, 16, 6)], // ['this day 1800', mk(2006, 8, 16, 18)], ['yesterday at 4:00pm', mk(2006, 8, 15, 16)], ['tomorrow evening at 7', mk(2006, 8, 17, 19)], ['tomorrow morning at 5:30', mk(2006, 8, 17, 5, 30)], // ['next monday at 12:01 am', mk(2006, 8, 21, 0, 1)], // ['next monday at 12:01 pm', mk(2006, 8, 21, 12, 1)], // //with context // ['sunday at 8:15pm', mk(2006, 8, 13, 20, 15)], // ['afternoon yesterday', mk(2006, 8, 15, 15)], // ['tuesday last week', mk(2006, 8, 8, 12)], // ['An hour ago', mk(2006, 8, 16, 13)], ['A day ago', mk(2006, 8, 15, 14)], ['a month ago', mk(2006, 7, 16, 14)], ['a year ago', mk(2005, 8, 16, 14)], // //past ['3 years ago', mk(2003, 8, 16, 14), 'ago'], ['1 month ago', mk(2006, 7, 16, 14), 'ago'], // ['1 fortnight ago', mk(2006, 8, 2, 14),'ago'], // ['2 fortnights ago', mk(2006, 7, 19, 14),'ago'], ['3 weeks ago', mk(2006, 7, 26, 14), 'ago'], // ['2 weekends ago', mk(2006, 8, 5), 'ago'], ['3 days ago', mk(2006, 8, 13, 14), 'ago'], // ['5 mornings ago', mk(2006, 8, 12, 9),'ago'], // ['7 hours ago', mk(2006, 8, 16, 7), 'ago'], // ['3 minutes ago', mk(2006, 8, 16, 13, 57), 'ago'], // ['20 seconds before now', mk(2006, 8, 16, 13, 59, 40),'ago'], // //future ['3 years from now', mk(2009, 8, 16, 14, 0, 0), 'from now'], // ['6 months hence', mk(2007, 2, 16, 14)], // ['3 fortnights hence', mk(2006, 9, 27, 14)], ['1 week from now', mk(2006, 8, 23, 14, 0, 0), 'from now'], // ['1 weekend from now', mk(2006, 8, 19)], // ['2 weekends from now', mk(2006, 8, 26)], // ['1 day hence', mk(2006, 8, 17, 14)], // ['5 mornings hence', mk(2006, 8, 21, 9)], ['1 hour from now', mk(2006, 8, 16, 15), 'from now'], // ['20 minutes hence', mk(2006, 8, 16, 14, 20)], ['20 seconds from now', mk(2006, 8, 16, 14, 0, 20), 'from now'], // ['2 months ago', mk(2007, 1, 7, 23, 30)], // //Two repeaters ['25 minutes and 20 seconds from now', mk(2006, 8, 16, 14, 25, 20), 'from now'], // ['24 hours and 20 minutes from now', mk(2006, 8, 17, 14, 20, 0), 'from now'], ['24 hours 20 minutes from now', mk(2006, 8, 17, 14, 20, 0), 'from now'], ['in 3 hours', mk(2006, 8, 16, 17), 'from now'], // //past // ['3 years ago tomorrow', mk(2003, 8, 17, 12)], // ['3 years ago this friday', mk(2003, 8, 18, 12)], // ['3 months ago saturday at 5:00 pm', mk(2006, 5, 19, 17)], // ['2 days from this second', mk(2006, 8, 18, 14)], // ['7 hours before tomorrow at midnight', mk(2006, 8, 17, 17)], // //future // ['september 3 years ago', mk(2003, 9)], // ['3rd month next year', mk(2007, 3)], // ['3rd month next year', mk(2007, 3, 1)], // ['3rd thursday this september', mk(2006, 9, 21, 12)], // ['3rd thursday this november', mk(2010, 11, 18, 12)], // ['4th day last week', mk(2006, 8, 9, 12)], // ['this spring', mk(2007, 3, 20),'year'], // ['this winter', mk(2006, 12, 22),'year'], // ['last spring', mk(2006, 3, 20),'year'], // ['last winter', mk(2005, 12, 22),'year'], // ['next spring', mk(2007, 3, 20),'year'], // ['this quarter', mk(2006, 7, 1),'year'], // ['next quarter', mk(2006, 10, 1),'year'], // ['last quarter', mk(2006, 4, 1),'year'], // ['1 quarter ago', mk(2006, 4, 1),'year'], // ['2 quarters ago', mk(2006, 1, 1),'year'], // ['1 quarter from now', mk(2006, 10, 1),'year'], // ['Q1', mk(2006, 1, 1),'year'], // ['first quarter', mk(2007, 1, 1),'year'], // ['1st quarter', mk(2006, 1, 1),'year'], // ['q1 2005', mk(2005, 1, 1),'year'], // ['2005 q1', mk(2005, 1, 1),'year'], // ['q1 this year', mk(2006, 1, 1),'year'], // ['this year q1', mk(2006, 1, 1),'q1'], // ['q1 next year', mk(2007, 1, 1),'q1'], // ['next year q1', mk(2007, 1, 1),'q1'], // ['this q1', mk(2006, 1, 1),'q1'], // ['last q1', mk(2006, 1, 1),'q1'], // ['next q1', mk(2007, 1, 1),'q1'], // ['#q2 2005', mk(2005, 4, 1),'q1'], // ['2005 q2', mk(2005, 4, 1),'q1'], // ['q2 this year', mk(2006, 4, 1),'q1'], // ['this year q2', mk(2006, 4, 1),'q1'], // ['q2 next year', mk(2007, 4, 1),'q1'], // ['next year q2', mk(2007, 4, 1),'q1'], // ['this q2', mk(2006, 4, 1),'q1'], // ['last q2', mk(2006, 4, 1),'q1'], // ['next q2', mk(2007, 4, 1),'q1'], ['Q4', mk(2006, 10, 1), 'q4 #1'], ['fourth quarter', mk(2006, 10, 1), 'q4 #2'], // ['4th quarter', mk(2005, 10, 1), 'q4'], ['4th quarter 2005', mk(2005, 10, 1), 'q4 #3'], // ['2005 4th quarter', mk(2005, 10, 1), 'q4'], // ['4th quarter this year', mk(2006, 10, 1), 'q4'], // ['this year 4th quarter', mk(2006, 10, 1), 'q4'], // ['4th quarter next year', mk(2007, 10, 1), 'q4'], // ['next year 4th quarter', mk(2007, 10, 1), 'q4'], // ['this 4th quarter', mk(2006, 10, 1), 'q4'], // ['last 4th quarter', mk(2005, 10, 1), 'q4'], // ['next 4th quarter', mk(2006, 10, 1), 'q4'], // ['1st thursday in november', mk(2007, 11, 1, 12), 'thurs tests'], // ['1st friday in november', mk(2007, 11, 2, 12), 'thurs tests'], // ['1st saturday in november', mk(2007, 11, 3, 12), 'thurs tests'], ['2011-01-01 at noon', mk(2011, 1, 1, 12, 0), 'thurs tests'], ['Thu Aug 10', mk(2006, 8, 10, 12), 'thurs tests'], // ['Thursday July 31', mk(2006, 7, 31, 12), 'thurs tests')//], ['Thursday December 31', mk(2006, 12, 31, 12), 'thurs tests'], ['Thu Aug 10 4pm', mk(2006, 8, 10, 16), 'thurs tests'], ['Thu Aug 10 at 4pm', mk(2006, 8, 10, 16), 'thurs tests'], ['Thu Aug 10th at 4pm', mk(2006, 8, 10, 16), 'thurs tests'], // ['Thu 17th at 4pm', mk(2006, 8, 17, 16), 'thurs tests'], // ['Thu 16th at 4pm', mk(2006, 8, 16, 16), 'thurs tests'], // ['Thu 1st at 4pm', mk(2006, 9, 1, 16), 'thurs tests'], // ['Thu 17th', mk(2006, 8, 17, 12), 'thurs tests'], ['Thu Aug 10 2006', mk(2006, 8, 10, 12), 'thurs tests'], ['Thursday July 31 2006', mk(2006, 7, 31, 12), 'thurs tests'], ['Thursday December 31 2006', mk(2006, 12, 31, 12), 'thurs tests'], ['Thursday December 30 2006', mk(2006, 12, 30, 12), 'thurs tests'], ['Thu Aug 10th', mk(2006, 8, 10, 12), 'thurs tests'], // ['Thursday July 31st', mk(2006, 7, 31, 12), 'thurs tests'], ['Thursday December 31st', mk(2006, 12, 31, 12), 'thurs tests'], ['Thu Aug 10th 2005', mk(2005, 8, 10, 12), 'thurs tests'], ['Thursday July 31st 2005', mk(2005, 7, 31, 12), 'thurs tests'], ['Thursday December 31st 2005', mk(2005, 12, 31, 12), 'thurs tests'], ['Thursday December 30th 2005', mk(2005, 12, 30, 12), 'thurs tests'], ] arr.forEach(a => { const found = nlp(a[0]).dates(context).json()[0] || {} const have = fmt(found.dates.start) t.equal(have, a[1], a[3] || a[0]) }) t.end() })