Module:time/testcases

local export = {}

local schemata

local function code_tag(text, class) if class then return ' ' else return " " end end

local function iterate_tsv(tsv) local rows = tsv:gmatch "[^\n]+" return function local row = rows if row then local columns = {} local prev_pos = 1 for start_pos, column, tab, end_pos in row:gmatch "([^\t]+)(\t?)" do				if not (start_pos == prev_pos and (tab == "") == (end_pos == #row + 1)) then error("incorrect format in " .. row) end table.insert(columns, column) prev_pos = end_pos end return unpack(columns) end end end

local remove_links = require "Module:links".remove_links

function export.test_date_formatting(frame) local module_name = frame.args.module local quote_impl = require(module_name and "Module:" .. module_name or "Module:time").quote_impl local function format_date(date) return quote_impl { date = date } end local output = require "Module:array" output:insert class="wikitable" ! input !! occurrences !! output !! expected !! error local counts = { [true] = 0, [false] = 0 } for schema, count, date, expected in iterate_tsv(schemata) do		count = tonumber(count) if not schema then error("Line didn't match pattern: " .. line) end local ok, formatted = pcall(function return format_date(date):gsub("'''", "") end) local success = ok and formatted == expected counts[success] = counts[success] + 1 if ok then if formatted ~= expected then output:insert "|-" output:insert("| " .. code_tag(date) .. " || " .. count .. " || "					.. code_tag(formatted) .. " || " .. code_tag(expected) .. " ||") end else output:insert "|-" output:insert("| " .. code_tag(date) .. " || " .. count				.. " || || " .. code_tag(expected) .. " || "				.. code_tag(remove_links(formatted), "error")) end end output:insert "|}" output:insert(1, counts[true] .. "/" .. (counts[true] + counts[false]) .. " successes") return output:concat "\n" end

schemata = [[  , 	19297	September 14, 2014	2014 September 14  , 	8324	March 9, 2008	2008 March 9 --	6293	1997-07-14	1997 July 14   	4526	15 October 2002	2002 October 15   	2866	Oct 18 2011	2011 October 18  <l> <d4>	1914	6 March 1992	1992 March 6 <l> <d1> <d4>	1252	Apr 7 2003	2003 April 7 <l> <d4>	1065	January 1911	1911 January <d4>-<d2>	368	1843-06	1843 June <d4> <l> <d2>	206	1939 December 15	1939 December 15 <d4>-<d1>-<d2>	190	2018-4-22	2018 April 22 <d2>-<d2>-<d4>	180	10-05-2003	2003 May 10 <l>. <d2>, <d4>	179	Aug. 13, 2015	2015 August 13 <d4> <l> <d1>	173	2020 January 2	2020 January 2 <l>. <d1>, <d4>	102	Dec. 2, 2003	2003 December 2 <d1>/<d2>/<d4>	84	7/30/2015	2015 July 30 <d2>/<d2>/<d4>	80	04/04/2002	2002 April 4 <d4>-<d1>-<d1>	54	2020-3-2	2020 March 2	39		??? <d4>/<d2>/<d2>	32	2006/01/17	2006 January 17 <d2> <l>, <d4>	30	11 Sep, 2004	2004 September 11 <d1>/<d1>/<d4>	28	7/7/2015	2015 July 7 <d4> <l>	25	1993 April	1993 April <d1>/<d2>/<d2>	19	3/24/15	2015 March 24 <d4>, <d2> <l>	14	2017, 14 November	2017 November 14 <d2>/<d2>/<d2>	13	07/23/17	2017 July 23 <d1> <l>, <d4>	12	7 January, 1837	1837 January 7 <d2>/<d1>/<d4>	12	10/4/2014	2014 October 4 <d4>-<d2>-<d1>	12	1707-04-7	1707 April 7 <d2> <l> <d2>	11	12 May 92	1992 May 12 <l>	10	February	??? <d2>.<d2>.<d4>	9	21.10.2014	2014 October 21 <d4>-<d2>-<d2> <d2>:<d2>:<d2>	8	2002-12-18T04:19:52	2002 December 18 <d2>, <d4>	8	APR 17, 2015	2015 April 17 <l> <d2>	8	September 30	??? <l> <d2><l>, <d4>	8	February 11th, 1839	1839 February 11 <d1>/<d1>/<d2>	7	4/1/15	2015 April 1 <d2>-<d1>-<d4>	7	14-4-2017	2017 April 14 <d4>, <l> <d2>	7	2017, February 16	2017 February 16 <d2>-<d2>-<d2>	6	08-12-31	2008 December 31 <d4>/<d1>/<d2>	6	1995/8/21	1995 August 21 <l>, <d4>	6	November, 2018	2018 November <d1>-<d1>-<d4>	5	1-5-1840	1840 May 1 <d2>- <l>-<d2>	5	15-Jul-83	1983 July 15 <d4>, <d1> <l>	5	2017, 2 March	2017 March 2 <d4>-<d2>-<d2> <d2>:<d2>	5	1992-12-08T22:34	1992 December 8 <l> <d1>,<d4>	5	August 8,1864	1864 August 8 <l> <d1><l>, <d4>	5	March 3rd, 2020	2020 March 3 <l> <d2>,<d4>	5	February 24,2016 2016	???	5		??? <d2> <l> <d4>	4	14 august 2017	2017 August 14 <d1>-<d2>-<d4>	3	9-11-2017	2017 November 9 <d1>- <l>-<d2>	3	8-Mar-87	1987 March 8 <d2>.<d1>.<d4>	3	23.1.2020	2020 January 23 <d2>/<d1>/<d2>	3	01/6/17	2017 January 6 <d4>, <l> <d1>	3	2018, January 5	2018 January 5 <d1>, <d4>	3	APR 5, 2019	2019 April 5 <l> <d2>. <d4>	3	May 27. 2010	2010 May 27 <d1> <l> <d4>	2	7 march 2018	2018 March 7 <d1> <l> <d2>	2	7 Jun 90	1990 June 7 <d1>. <l> <d4>	2	8. April 2020	2020 April 8 <d2> <l> <d4> <d4>	2	15 Jul 2010 2010	??? <d2> <l><d4>	2	20 December1806	??? <d2>. <l> <d4>	2	27. November 1844	1844 November 27 <d2>.<d2>.<d2>	2	17.03.19	??? <d2><l> <l> <d4>	2	14th October 2018	2018 October 14 <d4>- <l>-<d2>	2	2005-May-31	2005 May 31 <l>.<l>.	2	n.d.	??? <l> <d1>	2	October 2	??? <l> <d2>, <d4> <d4>	2	September 29, 1905 1905	??? <l> <d2><l> <d4>	2	February 15th 1999	1999 February 15 <l>, <d2> <l> <d4> <d2>:<d2>:<d2> +<d4>	2	Mon, 23 Feb 2004 11:26:07 +0100	2004 February 23 <d1> <l> <d1> <d4>	1	9 September 9 2005	??? <d1> <l> <d1>, <d4>	1	1 March 1, 1988	??? <d1> <l><d4>	1	1 September1870	??? <d1>. <l> <d4>	1	3. october 2015	2015 October 3 <d1>/<d2>/<d2> <d4>	1	4/11/03 2003	??? <d2> <l>. <d4>	1	17 jan. 2014	2014 January 17 <d2>, <d4>	1	05 SEPTEMBER, 2018	2018 September 5 <d2> <l> <d2> <d4>	1	27 January 27 2010	??? <d2> <l> <d4>.	1	25 February 1996.	??? <d2>-<d1>-<d2>	1	05-2-27	??? <d2>. <l> <d4>	1	02. october 2018	2018 October 2 <d2>.<d1>.<d4>-<d2>-<d2>	1	30.6.2011-06-30	??? <d2>/<d2>, <d4>	1	11/19, 2015	November 19 <d4>, <l> <d1><l>	1	2011, October 7th	2011 October 7 <d4>-<d1>	1	1974-5	1974 May <d4>-<d2>-<d2> <d2>:<d2>:<d2>+<d4>	1	2008-09-25T20:53:38+0200	2008 September 25 <d4>...<d4>	1	2005...2011	??? <l> <d1>, <d4>	1	october 7, 2013	2013 October 7 <l> <d2>, <d4>	1	january 26, 2018	2018 January 26 <d2> <d4>	1	SATURDAY 02 MARCH 2019	2019 March 2 <l> <d1>, <d4>.	1	March 4, 2016.	2016 March 4 <l> <d1>. <d4>	1	February 7. 2008	2008 February 7 <l> <d1><l> <d4>	1	June 4th 2009	2009 June 4 <l> <d2>, <d4>-<d1>	1	March 23, 1658-9	1658-9 March 23 <l> <d2>, <d4>.	1	Dec 16, 2015.	2015 December 16 <l> <d4> <d4>	1	February 2010 2010	??? <l> <d4>, <d4>	1	September 2003, 2003	??? <l>, <d2> <l> <d4> <d2>:<d2>:<d2> 	1	Sat, 22 Sep 2001 22:12:03 GMT	2001 September 22 <l>, <d2> <l> <d4> <d4>	1	Wed, 28 Feb 2001 2001	??? <l>, <d2>- <l>-<d2>	1	Wed, 14-Nov-84	1984 November 14 <l>, <l> <d1><l>, <d4>	1	Saturday, December 7th, 2019	2019 December 7 <l>. <d2> <d4>	1	Dec. 16 2014	2014 December 16 <l>.<d2>, <d4>	1	Nov.12, 1996	1996 November 12 <l><d2>, <d4>	1	January20, 2010	??? <l> <d2>, <d4>	1	SeptembeR 24, 2011	2011 September 24]]

return export