Module:Sandbox/Hellknowz/Test/testcases

local p = require('Module:UnitTests')

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

self:preprocess_equals_many('{{#invoke:Sandbox/Hellknowz/Test|parseDateOutputRaw|', '|noUnstrip=yes}}', {

--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'},

{ '10:38:, May 1, 1973', 'Unrecognized pattern'},

{ '10:, May 1, 1973', 'Unrecognized pattern'},

{ '10, May 1, 1973', 'Unrecognized pattern'},

-- 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' },

--{ '{{Start date|2012|12|10}}', 'Has metadata template' },

--{ '{{Enddate|2013|12|10}}', '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('{{#invoke:Sandbox/Hellknowz/Test|emitMetadata|', '|dtstart=yes|dtend=yes|noTrackingCat=yes}}', {

-- different styles

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

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

{ 'May 2013', ' (2013-05)' },

{ '2013', ' (2013)' },

{ '12:15:04, May 3, 2013', ' (2013-05-03T12:15:04)' },

{ 'May 3, 2013, 12:15:04', ' (2013-05-03T12:15:04)' },

{ '12:15, May 3, 2013', ' (2013-05-03T12:15)' },

{ '10pm, May 3, 2013', ' (2013-05-03T22)' },

{ '12:15:04', ' (12:15:04)' },

{ '12:15', ' (12:15)' },

{ '3 May 2013 – 6 February 2014', ' (2013-05-03 - 2014-02-06)' },

{ '3 May – 22 June 2013', ' (2013-05-03 - 2013-06-22)' },

{ 'May 2013 – February 2014', ' (2013-05 - 2014-02)' },

{ '2013 – 2014', ' (2013 - 2014)' },

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

{ '3 May 2013 {{Flag icon|USA}}', ' (2013-05-03)' },

{ '3 May 2013Excellent job', ' (2013-05-03)' },

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

}, { nowiki = true } )

end

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

self:preprocess_equals_many('{{#invoke:Sandbox/Hellknowz/Test|outputRawStripped|', '}}', {

-- 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 2013Well, hello there!', '3 May 2013' },

{ '3 May 2013 Well, hello there!', '3 May 2013' },

{ '3 May 2013Well, hello there!', '3 May 2013' },

{ '3 May 2013Broken', '3 May 2013Broken' }, -- opening ref causes markup errors

{ '3 May 2013', '3 May 2013' },

{ '3 May 2013Well, hello there!Well, hello!', '3 May 2013' },

{ '3 May 2013Well, hello there!Well, hello!Well well well', '3 May 2013' },

{ '3 May 2013Well,..hello!', '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' },

{ '{{Flag icon|USA}} 3 May 2013', '3 May 2013' },

{ '{{Flagicon|UK}} 3 May 2013', '3 May 2013' },

{ '{{Flagicon|UK}} {{Flag icon|USA}} 3 May 2013', '3 May 2013' },

{ '3 May 2013{{Flagicon|UK}}', '3 May 2013' },

{ '3 May 2013 {{Flagicon|UK}} {{Flag icon|USA}} ', '3 May 2013' },

{ '{{Nowrap|3 May 2013}}', '3 May 2013' },

{ '{{no break | 3 May 2013 }}', '3 May 2013' },

}

, { nowiki = true }

)

end

--[[

function p:test_testUnicode() -- Must begin with 'test'

self:preprocess_equals_many('{{#invoke:Sandbox/Hellknowz/Test|testUnicode|', '}}', {

{ '-', 'yes' },

{ '–', 'yes' },

{ '—', 'yes' },

{ 'x–', 'no' },

})

end

]]

return p