Module:Infobox date field metadata/testcases

local p = require('Module:UnitTests')

function p:test_parseDate -- Must begin with 'test'

self:preprocess_equals_many('', {

--Y { '2013', '2013' },     { '2113', '2113' },      { '1913', '1913' },      { '1113', 'Invalid date/time' }, { '322', 'Unrecognized pattern' }, { '96', 'Unrecognized pattern' }, { '1913 BC', 'Unrecognized pattern' },

--My { 'June 2013', '2013-06' }, { '2013 June', '2013-06' }, { '2013, June', '2013-06' }, { 'August 2013', '2013-08' }, { 'August, 2013', '2013-08' }, { 'May 2013', '2013-05' }, { 'Jan 2013', '2013-01' }, { 'Dec 2013', '2013-12' }, { 'Dec. 2013', '2013-12' }, { 'December, 2013', '2013-12' }, { 'June 1013', 'Invalid date/time' }, { 'June 2113', '2113-06' }, { 'Plucktober 2013', 'Unrecognized pattern' }, { 'June 196', 'Unrecognized pattern' }, { 'June 96', 'Invalid date/time' }, -- this will try to match d M, like '15 June' but fail when checking validity { '96 June', 'Invalid date/time' }, -- ditto

--dMy { '3 May 2013', '2013-05-03' }, { '27 August 2013', '2013-08-27' }, { '30 November 2013', '2013-11-30' }, { '32 June 2013', 'Invalid date/time' }, { '31 June 2013', 'Invalid date/time' }, { '30 June 2013', '2013-06-30' }, { '28 February 2013', '2013-02-28' }, { '29 February 2013', 'Invalid date/time' }, { '29 February 2012', '2012-02-29' }, { '29 February 2000', '2000-02-29' }, { '29 February 1900', 'Invalid date/time' }, { '12 June 3013', '3013-06-12' }, { '12 June 1213', 'Invalid date/time' }, { '12 Blobember 2013', 'Unrecognized pattern' }, { '12 Dec 2013', '2013-12-12' }, { '12 Dec. 2013', '2013-12-12' }, { '12 June 96', 'Unrecognized pattern' }, { '3 May, 2013', '2013-05-03' }, { '3rd May 2013', '2013-05-03' }, { '3rd May, 2013', '2013-05-03' },

--Mdy { 'May 3, 2013', '2013-05-03' }, { 'August 27, 2013', '2013-08-27' }, { 'November 30, 2013', '2013-11-30' }, { 'Nov. 30, 2013', '2013-11-30' }, { 'June 32, 2013', 'Invalid date/time' }, { 'June 31, 2013', 'Invalid date/time' }, { 'June 30, 2013', '2013-06-30' }, { 'February 28, 2013', '2013-02-28' }, { 'February 29, 2013', 'Invalid date/time' }, { 'February 29, 2012', '2012-02-29' }, { 'February 29, 2000', '2000-02-29' }, { 'February 29, 1900', 'Invalid date/time' }, { 'June 12, 3013', '3013-06-12' }, { 'June 12, 1213', 'Invalid date/time' }, { 'Blobember 12, 2013', 'Unrecognized pattern' }, { 'June 12, 96', 'Unrecognized pattern' }, { 'May 3 2013', '2013-05-03' }, { 'May 3, 2013', '2013-05-03' }, { 'May 3rd 2013', '2013-05-03' }, { 'May 3rd, 2013', '2013-05-03' },

{ '2013 May 3', '2013-05-03' }, { '2013, May 3', '2013-05-03' }, { '2013 3 May', '2013-05-03' }, { '2013, 3 May', '2013-05-03' },

--ymd { '2013-05-03', '2013-05-03' },     { '2013-08-27', '2013-08-27' },      { '2013-11-27', '2013-11-27' },      { '2013-06-32', 'Invalid date/time' }, { '2013-06-31', 'Invalid date/time' }, { '2013-06-30', '2013-06-30' },     { '2013-02-28', '2013-02-28' },      { '2013-02-29', 'Invalid date/time' }, { '2012-02-29', '2012-02-29' },     { '2000-02-29', '2000-02-29' },      { '1900-02-29', 'Invalid date/time' }, { '3013-06-12', '3013-06-12' },     { '1413-06-12', 'Invalid date/time' }, { '2013-14-12', 'Invalid date/time' }, { '2013-00-12', 'Invalid date/time' }, { '2003-11', 'Unrecognized pattern' }, -- for now (ambiguous case) { '2003-13', 'Unrecognized pattern' }, -- for now { '2013-05', 'Unrecognized pattern' }, -- for now { '2013-13', 'Unrecognized pattern' }, -- for now { '1999-11', 'Unrecognized pattern' }, -- for now { '1906-08', 'Unrecognized pattern' }, -- for now -- hms { '10:38:27', '10:38:27'},     { '10:38:87', 'Invalid date/time'}, { '10:62:27', 'Invalid date/time'}, { '25:38:27', 'Invalid date/time'}, { '10:38:27 am', '10:38:27'}, { '10:38:27 pm', '22:38:27'}, { '10:38', '10:38'},     { '10:38 am', '10:38'}, { '10:38 pm', '22:38'}, { '10 am', '10'}, { '10', 'Unrecognized pattern'}, { '10 pm', '22'},

-- dMy hms { '1 May 1973, 10:38:27', '1973-05-01 10:38:27'}, { '1 May 1973, 8:38:27', '1973-05-01 08:38:27'}, { '1 May 1973, 10:38:87', 'Invalid date/time'}, { '1 May 1973, 10:62:27', 'Invalid date/time'}, { '1 May 1973, 25:38:27', 'Invalid date/time'}, -- Mdy hms { 'May 1, 1973, 10:38:27', '1973-05-01 10:38:27'}, -- ymd hms { '1973-05-01, 10:38:27', '1973-05-01 10:38:27'},     -- hms dMy { '10:38:27, 1 May 1973', '1973-05-01 10:38:27'}, -- hms Mdy { '10:38:27, May 1, 1973', '1973-05-01 10:38:27'}, -- hms ymd { '10:38:27, 1973-05-01', '1973-05-01 10:38:27'},     -- no commas { '10:38:27 May 1 1973', '1973-05-01 10:38:27'},

-- dMy hms { '1 May 1973, 10:38:27am', '1973-05-01 10:38:27'}, -- Mdy hms { 'May 1, 1973, 10:38:27am', '1973-05-01 10:38:27'}, -- ymd hms { '1973-05-01, 10:38:27 am', '1973-05-01 10:38:27'}, -- hms dMy { '10:38:27 am, 1 May 1973', '1973-05-01 10:38:27'}, -- hms Mdy { '10:38:27am, May 1, 1973', '1973-05-01 10:38:27'}, -- hms ymd { '10:38:27 am, 1973-05-01', '1973-05-01 10:38:27'},

-- dMy hms { '1 May 1973, 10:38:27 pm', '1973-05-01 22:38:27'}, -- Mdy hms { 'May 1, 1973, 10:38:27 pm', '1973-05-01 22:38:27'}, -- ymd hms { '1973-05-01, 10:38:27pm', '1973-05-01 22:38:27'}, -- hms dMy { '10:38:27pm, 1 May 1973', '1973-05-01 22:38:27'}, -- hms Mdy { '10:38:27 pm, May 1, 1973', '1973-05-01 22:38:27'}, -- hms ymd { '10:38:27pm, 1973-05-01', '1973-05-01 22:38:27'},

-- dMy hm     { '1 May 1973, 10:38', '1973-05-01 10:38'}, -- Mdy hm     { 'May 1, 1973, 10:38', '1973-05-01 10:38'}, -- ymd hm     { '1973-05-01, 10:38', '1973-05-01 10:38'}, -- hm dMy { '10:38, 1 May 1973', '1973-05-01 10:38'}, -- hm Mdy { '10:38, May 1, 1973', '1973-05-01 10:38'}, -- hm ymd { '10:38, 1973-05-01', '1973-05-01 10:38'},

-- dMy hmp { '1 May 1973, 10:38 am', '1973-05-01 10:38'}, -- Mdy hmp { 'May 1, 1973, 10:38am', '1973-05-01 10:38'}, -- ymd hmp { '1973-05-01, 10:38am', '1973-05-01 10:38'}, -- hmp dMy { '10:38 am, 1 May 1973', '1973-05-01 10:38'}, -- hmp Mdy { '10:38am, May 1, 1973', '1973-05-01 10:38'}, -- hmp ymd { '10:38am, 1973-05-01', '1973-05-01 10:38'},

-- dMy hmp { '1 May 1973, 10:38pm', '1973-05-01 22:38'}, -- Mdy hmp { 'May 1, 1973, 10:38 pm', '1973-05-01 22:38'}, -- ymd hmp { '1973-05-01, 10:38 pm', '1973-05-01 22:38'}, -- hmp dMy { '10:38pm, 1 May 1973', '1973-05-01 22:38'}, -- hmp Mdy { '10:38 pm, May 1, 1973', '1973-05-01 22:38'}, -- hmp ymd { '10:38 pm, 1973-05-01', '1973-05-01 22:38'},

-- dMy hp     { '1 May 1973, 10 am', '1973-05-01 10'}, -- Mdy hp     { 'May 1, 1973, 10am', '1973-05-01 10'}, -- ymd hp     { '1973-05-01, 10am', '1973-05-01 10'}, -- hp dMy { '10 am, 1 May 1973', '1973-05-01 10'}, -- hp Mdy { '10am, May 1, 1973', '1973-05-01 10'}, -- hp ymd { '10am, 1973-05-01', '1973-05-01 10'},

-- dMy hp     { '1 May 1973, 10pm', '1973-05-01 22'}, -- Mdy hp     { 'May 1, 1973, 10 pm', '1973-05-01 22'}, -- ymd hp     { '1973-05-01, 10 pm', '1973-05-01 22'}, -- hp dMy { '10pm, 1 May 1973', '1973-05-01 22'}, -- hp Mdy { '10 pm, May 1, 1973', '1973-05-01 22'}, -- hp ymd { '10 pm, 1973-05-01', '1973-05-01 22'},

-- invalid { 'This is not a date', 'Unrecognized pattern' }, { '2004 was a nice year', 'Unrecognized pattern' }, { 'Somewhere around 2004', 'Unrecognized pattern' }, { '2004 ', 'Unrecognized pattern' }, { '1 May 1733 (Russian)', 'Unrecognized pattern' }, { '1 May 1933 (uncertain)', 'Unrecognized pattern' }, { '1 May 1733 (old style)', 'Unrecognized pattern' }, { '1 May 1973 (but later cancelled)', 'Unrecognized pattern' }, { '1 May 1973 (UK), 4 June 1973 (USA)', 'Unrecognized pattern' },

-- date ranges { '3 May 2013 - 12 February 2014', '2013-05-03; 2014-02-12' }, { 'May 3, 2013 - February 12, 2014', '2013-05-03; 2014-02-12' }, { '3 May - 12 October 2013', '2013-05-03; 2013-10-12' }, { 'May 3 - October 12, 2013', '2013-05-03; 2013-10-12' }, { '3 - 12 May 2013', '2013-05-03; 2013-05-12' }, { 'May 3 - 12, 2013', '2013-05-03; 2013-05-12' }, { 'May - June 2013', '2013-05; 2013-06' }, { 'May 2013 - February 2014', '2013-05; 2014-02' }, { '2013 - 2014', '2013; 2014' },

{ 'May 3 2013 - February 12 2014', '2013-05-03; 2014-02-12' }, { 'May 3 - October 12 2013', '2013-05-03; 2013-10-12' }, { 'May 3 - 12 2013', '2013-05-03; 2013-05-12' },

{ '3rd May 2013 - 12th February 2014', '2013-05-03; 2014-02-12' }, { 'May 3rd, 2013 - February 12th, 2014', '2013-05-03; 2014-02-12' }, { '3rd May - 12th October 2013', '2013-05-03; 2013-10-12' }, { 'May 3rd - October 12th, 2013', '2013-05-03; 2013-10-12' }, { '3rd - 12th May 2013', '2013-05-03; 2013-05-12' }, { 'May 3rd - 12th, 2013', '2013-05-03; 2013-05-12' },

-- variations in dates { '3 May 2013 - 3 May 2013', '2013-05-03; 2013-05-03' }, -- ?? well, they are inclusive, so     { '3 May 2013 - 2 May 2013', 'Invalid date range' }, { '3 May 2013 - 4 March 2013', 'Invalid date range' }, { '3 May 2013 - 4 May 2012', 'Invalid date range' }, { '3 May - 3 May 2013', '2013-05-03; 2013-05-03' }, { '3 May - 2 May 2013', 'Invalid date range' }, { '3 May - 4 March 2013', 'Invalid date range' }, { '3 May - 4 May 2012', '2012-05-03; 2012-05-04' }, { '3 May - 3 May 2012', '2012-05-03; 2012-05-03' }, { '3 - 2 May 2013', 'Invalid date range' }, { 'May - April 2013', 'Invalid date range' }, { '2013 - 2012', 'Invalid date range' },

-- dashes and date sep test { '3 May 2013 – 12 February 2014', '2013-05-03; 2014-02-12' }, { '3 May 2013 – 12 February 2014', '2013-05-03; 2014-02-12' }, { '3 May 2013 — 12 February 2014', '2013-05-03; 2014-02-12' }, { '3 May 2013-12 February 2014', '2013-05-03; 2014-02-12' }, { 'May 3 2013-February 12 2014', '2013-05-03; 2014-02-12' }, { 'May 2013-February 2014', '2013-05; 2014-02' }, { '2013-2014', '2013; 2014' },     { '3 May 2013 – 12 February 2014', '2013-05-03; 2014-02-12' }, { '3 May 2013 – 12 February 2014', '2013-05-03; 2014-02-12' }, { '3 May 2013 – 12 February 2014', '2013-05-03; 2014-02-12' }, { '3 May 2013 – 12 February 2014', '2013-05-03; 2014-02-12' },

-- missing parts { '3 May', 'Incomplete date' }, { 'May 3', 'Incomplete date' }, { 'February 29', 'Incomplete date' }, -- can't check if 29 is valid { 'May', 'Incomplete date' }, { 'October', 'Incomplete date' }, -- -- these are kinda hypothetical and not used real-world     -- missing parts ranges dmY      { '3 May 2013 - April 2014', 'Incomplete date range' },      { '3 May 2013 - 2014', 'Incomplete date range' },      { 'May 2013 - 5 April 2014', 'Incomplete date range' },      { 'May 2013 - 2014', 'Incomplete date range' },      { '2013 - 5 April 2014', 'Incomplete date range' },      { '2013 - April 2014', 'Incomplete date range' },      -- missing parts ranges Mdy      { 'May 3, 2013 - April 2014', 'Incomplete date range' },      { 'May 3, 2013 - 2014', 'Incomplete date range' },      { 'May 2013 - April 5, 2014', 'Incomplete date range' },      { '2013 - April 5, 2014', 'Incomplete date range' }, -- missing parts in ranges (actual real world use) { '3 - 26 May', 'Incomplete date range' }, { 'May 3 - 26', 'Incomplete date range' }, { '3 May - 5 April', 'Incomplete date range' }, { 'May 3 - April 5', 'Incomplete date range' }, { 'February 29 - April 5', 'Incomplete date range' }, -- can't check if 29 is valid { 'March 3 - February 29', 'Incomplete date range' },

-- empty { '', 'Empty input' }, { ' ', 'Empty input' },

--{ 'December 10, 2012', 'Has metadata template' }, --{ '', 'Has metadata template' },

--     { '3 May 2013 - 5 April 2014', '2013-05-03; 2014-04-05' },      { '3 May 2013 - April 2014',  },      { '3 May 2013 - 2014',  },      { 'May 2013 - 5 April 2014',  },      { 'May 2013 - 2014',  },      { '2013 - 5 April 2014',  },      { '2013 - April 2014',  },      -- })

end

function p:test_emitMetadata -- Must begin with 'test'

self:preprocess_equals_many('', {       -- different styles        { '3 May 2013', ' &#160;( 2013-05-03 ) ' },        { 'May 3, 2013', ' &#160;( 2013-05-03 ) ' },        { 'May 2013', ' &#160;( 2013-05 ) ' },        { '2013', ' &#160;( 2013 ) ' },        { '12:15:04, May 3, 2013', ' &#160;( 2013-05-03T12:15:04 ) ' },        { 'May 3, 2013, 12:15:04', ' &#160;( 2013-05-03T12:15:04 ) ' },        { '12:15, May 3, 2013', ' &#160;( 2013-05-03T12:15 ) ' },        { '10pm, May 3, 2013', ' &#160;( 2013-05-03T22 ) ' },        { '12:15:04', ' &#160;( 12:15:04 ) ' },        { '12:15', ' &#160;( 12:15 ) ' },        { '3 May 2013 – 6 February 2014', ' &#160;( 2013-05-03 - 2014-02-06 ) ' },        { '3 May – 22 June 2013', ' &#160;( 2013-05-03 - 2013-06-22 ) ' },        { 'May 2013 – February 2014', ' &#160;( 2013-05 - 2014-02 ) ' },        { '2013 – 2014', ' &#160;( 2013 - 2014 ) ' },    }, { nowiki = true }    )

end

function p:test_stripFieldExtras -- Must begin with 'test'

self:preprocess_equals_many('', {                      -- references stripping        { '3 May 2013', '3 May 2013' },        { '3 May 2013   ', '3 May 2013' },        { '    3 May 2013', '3 May 2013' },        { '    3 May 2013   ', '3 May 2013' },        { '3 May 2013 ', '3 May 2013' },        { '3 May 2013 ', '3 May 2013' },        { '3 May 2013 ', '3 May 2013' },        { '3 May 2013 Broken', '3 May 2013 Broken' }, -- opening ref causes markup errors        { '3 May 2013 ', '3 May 2013' },        { '3 May 2013  ', '3 May 2013' },        { '3 May 2013   ', '3 May 2013' },        { '3 May 2013  ', '3 May 2013' },        { '3 May 2013  ', '3 May 2013' },        { '3 May 2013 ', '3 May 2013' },        { '3 May 2013  ', '3 May 2013' },        { '3 May 2013   ', '3 May 2013' },        { '3 May 2013 ', '3 May 2013' },        { '3 May 2013', '3 May 2013' },        { '3 May 2013 ', '3 May 2013' }, { '3 May 2013', '3 May 2013' }, { ' 3 May 2013', '3 May 2013' }, { ' 3 May 2013', '3 May 2013' }, { ' 3 May 2013', '3 May 2013' }, { ' 3 May 2013', '3 May 2013' }, { '3 May 2013', '3 May 2013' }, { '3 May 2013  ', '3 May 2013' }, }  , { nowiki = true } )

end

return p