Module:Date time/testcases

-- Unit tests for Module:Date time. Click talk page to run tests.

local p = require('Module:UnitTests')

local DateTime = require('Module:Date time/sandbox')

local ERROR_MESSAGES = DateTime.ERROR_MESSAGES

local function getErrorMessage(message, template, invalid)

if not template then

template = "start date"

end

local category = "Category:Pages using Module:Date time with invalid values"

if invalid then

category = ""

end

return string.format('Error: %s (help)%s', message, template, category)

end

local function getPresentDate()

local lang = mw.language.getContentLanguage()

return lang:formatDate("Y-m-d")

end

function p:test_01_valid()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

{'1999', ''}, -- only year

{'1999|2', ''}, -- year and month

{'1999|02|1', ''}, -- year, month, and day

{'1999|02|01|5', ''}, -- year, month, day, hour

{'1999|02|01|5|3', ''}, -- year, month, day, hour, minute

{'1999|02|01|5|3|2', ''}, -- year, month, day, hour, minute, second

}, {nowiki=1})

end

function p:test_02_min_max_values()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

{'1999|1', ''}, -- month min value

{'1999|12', ''}, -- month max value

{'1999|02|01|00', ''}, -- hour min value

{'1999|02|01|23', ''}, -- hour max value

{'1999|02|01|00|00', ''}, -- minute min value

{'1999|02|01|23|59', ''}, -- minute max value

{'1999|02|01|00|00', ''}, -- second min value

{'1999|02|01|23|59', ''}, -- second max value

{'1999|1|31', ''},

{'1999|2|28', ''},

{'1999|3|31', ''},

{'1999|4|30', ''},

{'1999|5|31', ''},

{'1999|6|30', ''},

{'1999|7|31', ''},

{'1999|8|31', ''},

{'1999|9|30', ''},

{'1999|10|31', ''},

{'1999|11|30', ''},

{'1999|12|31', ''},

}, {nowiki=1})

end

function p:test_03_leap_year()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

{'2000|02|29', ''},

}, {nowiki=1})

end

function p:test_04_leading_zeros()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

{'1999|02', ''}, -- month

{'1999|02|01', ''}, -- day

{'1999|02|01|05', ''}, -- hour

{'1999|02|01|05|05', ''}, -- minute

{'1999|02|01|05|05|05', ''}, -- second

}, {nowiki=1})

end

function p:test_05_timezone()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

{'2000|02|01|10|||Z', ''},

-- full time

{'2000|02|01|10|||−12:00', ''}, -- Latest time zone

{'2000|02|01|10|||−02:30', ''},

{'2000|02|01|10|||−02:00', ''},

{'2000|02|01|10|||−01:30', ''},

{'2000|02|01|10|||−01:00', ''},

{'2000|02|01|10|||+00:00', ''},

{'2000|02|01|10|||+01:00', ''},

{'2000|02|01|10|||+01:30', ''},

{'2000|02|01|10|||+14:00', ''}, -- Earliest time zone

-- no minutes

{'2000|02|01|10|||−12', ''}, -- Latest time zone

{'2000|02|01|10|||−02', ''},

{'2000|02|01|10|||−01', ''},

{'2000|02|01|10|||+00', ''},

{'2000|02|01|10|||+01', ''},

{'2000|02|01|10|||+14', ''}, -- Earliest time zone

-- missing leading zero

{'2000|02|01|10|||−2:30', ''},

{'2000|02|01|10|||−2:00', ''},

{'2000|02|01|10|||−1:30', ''},

{'2000|02|01|10|||−1:00', ''},

{'2000|02|01|10|||+0:00', ''},

{'2000|02|01|10|||+1:00', ''},

-- ASCII hyphen

{'2000|02|01|10|||-12:00', ''},

{'2000|02|01|10|||-12', ''},

{'2000|02|01|10|||-01:30', ''},

{'2000|02|01|10|||-1:30', ''},

{'2000|02|01|10|||-01:00', ''},

{'2000|02|01|10|||-1:00', ''},

}, {nowiki=1})

end

function p:test_06_df()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

{'2000|02|29|df=yes', ''},

{'2000|02|29|df=y', ''},

}, {nowiki=1})

end

function p:test_09_errors()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'validate_date_time', {

-- No values

{'', getErrorMessage(ERROR_MESSAGES.missing_year)},

-- Year and day, no month

{'1999|3=20', getErrorMessage(ERROR_MESSAGES.missing_month)},

-- Month outside range

{'1999|-1', getErrorMessage(ERROR_MESSAGES.invalid_month)},

{'1999|13', getErrorMessage(ERROR_MESSAGES.invalid_month)},

-- Days outside range

{'1999|01|-1', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "1", "31"))},

-- More days than in a given month

{'1999|1|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "1", "31"))},

{'1999|2|29', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "2", "28"))},

{'1999|3|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "3", "31"))},

{'1999|4|31', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "4", "30"))},

{'1999|5|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "5", "31"))},

{'1999|6|31', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "6", "30"))},

{'1999|7|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "7", "31"))},

{'1999|8|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "8", "31"))},

{'1999|9|31', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "9", "30"))},

{'1999|10|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "10", "31"))},

{'1999|11|31', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "11", "30"))},

{'1999|12|32', getErrorMessage(string.format(ERROR_MESSAGES.invalid_day, "12", "31"))},

-- Too many leading zeros

{'1999|010', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|020', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|2|010', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|2|1|023', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|2|1|2|033', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|001', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|002', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|2|001', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|2|3|002', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

{'1999|1|2|3|1|003', getErrorMessage(ERROR_MESSAGES.has_leading_zeros)},

-- Time outside range

{'1999|1|2|-1', getErrorMessage(ERROR_MESSAGES.invalid_hour)},

{'1999|1|2|1|-2', getErrorMessage(ERROR_MESSAGES.invalid_minute)},

{'1999|1|2|1|2|-3', getErrorMessage(ERROR_MESSAGES.invalid_second)},

{'1999|1|2|25', getErrorMessage(ERROR_MESSAGES.invalid_hour)},

{'1999|1|2|1|60', getErrorMessage(ERROR_MESSAGES.invalid_minute)},

{'1999|1|2|1|2|60', getErrorMessage(ERROR_MESSAGES.invalid_second)},

-- Time without an hour

{'1999|1|2||30', getErrorMessage(ERROR_MESSAGES.time_without_hour)},

{'1999|1|2|||05', getErrorMessage(ERROR_MESSAGES.time_without_hour)},

-- Timezone

--- Matches "-12:00" to "+14:00"

{'1999|1|2|1|2|59|-13:00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|+15:00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|-13', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|+15', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|-00:00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|-00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|ABC', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|05:00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|005:00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|05:000', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2|1|2|59|05:00:00', getErrorMessage(ERROR_MESSAGES.invalid_timezone)},

{'1999|1|2||||+04:00', getErrorMessage(ERROR_MESSAGES.timezone_incomplete_date)},

-- Not integers

{'abc|1|2', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|abc|2', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|2|abc', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|2|3|abc', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|2|3|4|abc', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|2|3|4|5|abc', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|1.5|2', getErrorMessage(ERROR_MESSAGES.integers)},

{'1999|1|2.', getErrorMessage(ERROR_MESSAGES.integers)},

-- Df validation

{'2000|02|29|df=no', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "df"))},

{'2000|02|29|df=Y', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "df"))},

-- p validation

{'2000|02|29|p=no', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "p"))},

{'2000|02|29|p=Y', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "p"))},

{'2000|02|29|paren=no', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "paren"))},

{'2000|02|29|p=Y|paren=no', getErrorMessage(string.format(ERROR_MESSAGES.duplicate_parameters, "p", "paren"))},

{'2000|02|29|p=y|paren=no', getErrorMessage(string.format(ERROR_MESSAGES.duplicate_parameters, "p", "paren"))},

-- br validation

{'2000|02|29|br=no', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "br"))},

{'2000|02|29|br=Y', getErrorMessage(string.format(ERROR_MESSAGES.yes_value_parameter, "br"))},

}, {nowiki=1})

end

function p:test_10_generate_date_valid_start_date()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date', {

{'2000', '2000 (2000)'},

{'2000|02', 'February 2000 (2000-02)'},

{'2000|02|29', 'February 29, 2000 (2000-02-29)'},

{'2000|02|df=yes', 'February 2000 (2000-02)'},

{'2000|02|29|df=y', '29 February 2000 (2000-02-29)'},

{'2000|02|29|11', '11:00, February 29, 2000 (2000-02-29T11:00:00)'},

{'2000|02|29|11|5', '11:05, February 29, 2000 (2000-02-29T11:05:00)'},

{'2000|02|29|11|5|29', '11:05:29, February 29, 2000 (2000-02-29T11:05:29)'},

{'2000|02|29|11|5|29|Z', '11:05:29, February 29, 2000 (UTC) (2000-02-29T11:05:29Z)'},

{'2000|02|29|11|5|29|+5:00', '11:05:29, February 29, 2000 (+05:00) (2000-02-29T11:05:29+05:00)'},

{'2000|02|29|11|df=y', '11:00, 29 February 2000 (2000-02-29T11:00:00)'},

{'2000|02|29|11|5|df=y', '11:05, 29 February 2000 (2000-02-29T11:05:00)'},

{'2000|02|29|11|5|29|df=y', '11:05:29, 29 February 2000 (2000-02-29T11:05:29)'},

{'2000|02|29|11|5|29|Z|df=y', '11:05:29, 29 February 2000 (UTC) (2000-02-29T11:05:29Z)'},

{'2000|02|29|11|5|29|+5:00|df=y', '11:05:29, 29 February 2000 (+05:00) (2000-02-29T11:05:29+05:00)'},

{'2000|02|29|5|2|3|+5:00|df=y', '05:02:03, 29 February 2000 (+05:00) (2000-02-29T05:02:03+05:00)'},

{'2000|02|01|5|2|3|+5:00', '05:02:03, February 1, 2000 (+05:00) (2000-02-01T05:02:03+05:00)'},

{'2000|02|01|5|2|3|+5:00|df=y', '05:02:03, 1 February 2000 (+05:00) (2000-02-01T05:02:03+05:00)'},

-- No padding zero

{'2000|2', 'February 2000 (2000-02)'},

{'2000|2|1', 'February 1, 2000 (2000-02-01)'},

{'2000|11', 'November 2000 (2000-11)'},

{'2000|11|30', 'November 30, 2000 (2000-11-30)'},

}, {nowiki=1})

end

function p:test_11_generate_date_valid_end_date()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date|template=end date', {

{'2000|02|29|11|5|29|+5:00', '11:05:29, February 29, 2000 (+05:00) (2000-02-29T11:05:29+05:00)'},

{'2000|02|29|11|5|29|+5:00|df=y', '11:05:29, 29 February 2000 (+05:00) (2000-02-29T11:05:29+05:00)'},

}, {nowiki=1})

end

function p:test_12_generate_date_valid_date_display()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date', {

{'2000|02|01|5|2|3|+5:00', '05:02:03, February 1, 2000 (+05:00) (2000-02-01T05:02:03+05:00)'},

{'2000|02|01|5|2|3|+5:00|df=y', '05:02:03, 1 February 2000 (+05:00) (2000-02-01T05:02:03+05:00)'},

{'template=end date|2000|02|01|5|2|3|+5:00', '05:02:03, February 1, 2000 (+05:00) (2000-02-01T05:02:03+05:00)'},

{'template=end date|2000|02|01|5|2|3|+5:00|df=y', '05:02:03, 1 February 2000 (+05:00) (2000-02-01T05:02:03+05:00)'},

})

end

function p:test_15_generate_date_invalid()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date', {

-- Year required

{'', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|02', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|02|29', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|||11', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|||11|5', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|||11|5|29', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|||11|5|29|Z', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'||||||Z', getErrorMessage(ERROR_MESSAGES.missing_year)},

-- Timezone without a day and hour

{'2000||||||Z', getErrorMessage(ERROR_MESSAGES.timezone_incomplete_date)},

{'2000|5|||||Z', getErrorMessage(ERROR_MESSAGES.timezone_incomplete_date)},

{'2000|5|6||||Z', getErrorMessage(ERROR_MESSAGES.timezone_incomplete_date)},

{'2000|5|6||5||Z', getErrorMessage(ERROR_MESSAGES.time_without_hour)},

{'2000|5|6||5|3|Z', getErrorMessage(ERROR_MESSAGES.time_without_hour)},

-- Template not supported

{'template=start date text|2000|02|29|11|5|29|+5:00|df=y', getErrorMessage("Template not supported", "start date text", true)},

}, {nowiki=1})

end

function p:test_20_generate_start_date_age_valid()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date|template=start date and age', {

-- Standard

{'1999', '1999; 26 years ago (1999)'},

{'1999|2', 'February 1999; 26 years ago (1999-02)'},

{'1999|2|1', 'February 1, 1999; 26 years ago (1999-02-01)'},

-- Line break

{'1999|br=y', '1999;
26 years ago
 (1999)'},

{'1999|2|br=y', 'February 1999;
26 years ago
 (1999-02)'},

{'1999|2|1|br=y', 'February 1, 1999;
26 years ago
 (1999-02-01)'},

-- Parenthesis

{'1999|p=y', '1999 (26 years ago) (1999)'},

{'1999|2|p=y', 'February 1999 (26 years ago) (1999-02)'},

{'1999|2|1|p=y', 'February 1, 1999 (26 years ago) (1999-02-01)'},

-- Line break and parenthesis

{'1999|p=y|br=y', '1999
(26 years ago)
 (1999)'},

{'1999|2|p=y|br=y', 'February 1999
(26 years ago)
 (1999-02)'},

{'1999|2|1|p=y|br=y', 'February 1, 1999
(26 years ago)
 (1999-02-01)'},

-- Today values

{mw.language.getContentLanguage():formatDate("Y"), mw.language.getContentLanguage():formatDate("Y") .. '; 0 years ago (' .. mw.language.getContentLanguage():formatDate("Y") .. ')'},

{mw.language.getContentLanguage():formatDate("Y") .. '|' .. mw.language.getContentLanguage():formatDate("m"), mw.language.getContentLanguage():formatDate("F") .. ' ' .. mw.language.getContentLanguage():formatDate("Y") .. '; 0 months ago (' .. mw.language.getContentLanguage():formatDate("Y") .. '-' .. mw.language.getContentLanguage():formatDate("m") .. ')'},

{mw.language.getContentLanguage():formatDate("Y") .. '|' .. mw.language.getContentLanguage():formatDate("m") .. "|" .. mw.language.getContentLanguage():formatDate("d"), mw.language.getContentLanguage():formatDate("F") .. ' ' .. mw.language.getContentLanguage():formatDate("j") .. ', ' .. mw.language.getContentLanguage():formatDate("Y") .. '; 0 days ago (' .. mw.language.getContentLanguage():formatDate("Y") .. '-' .. mw.language.getContentLanguage():formatDate("m") .. '-' .. mw.language.getContentLanguage():formatDate("d") .. ')'},

}, {nowiki=1})

end

function p:test_21_generate_end_date_age_valid()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date|template=end date and age', {

-- Standard

{'1999', '1999; 26 years ago (1999)'},

{'1999|2', 'February 1999; 26 years ago (1999-02)'},

{'1999|2|1', 'February 1, 1999; 26 years ago (1999-02-01)'},

-- Line break

{'1999|br=y', '1999;
26 years ago
 (1999)'},

{'1999|2|br=y', 'February 1999;
26 years ago
 (1999-02)'},

{'1999|2|1|br=y', 'February 1, 1999;
26 years ago
 (1999-02-01)'},

-- Parenthesis

{'1999|p=y', '1999 (26 years ago) (1999)'},

{'1999|2|p=y', 'February 1999 (26 years ago) (1999-02)'},

{'1999|2|1|p=y', 'February 1, 1999 (26 years ago) (1999-02-01)'},

-- Line break and parenthesis

{'1999|p=y|br=y', '1999
(26 years ago)
 (1999)'},

{'1999|2|p=y|br=y', 'February 1999
(26 years ago)
 (1999-02)'},

{'1999|2|1|p=y|br=y', 'February 1, 1999
(26 years ago)
 (1999-02-01)'},

-- Today values

{mw.language.getContentLanguage():formatDate("Y"), mw.language.getContentLanguage():formatDate("Y") .. '; 0 years ago (' .. mw.language.getContentLanguage():formatDate("Y") .. ')'},

{mw.language.getContentLanguage():formatDate("Y") .. '|' .. mw.language.getContentLanguage():formatDate("m"), mw.language.getContentLanguage():formatDate("F") .. ' ' .. mw.language.getContentLanguage():formatDate("Y") .. '; 0 months ago (' .. mw.language.getContentLanguage():formatDate("Y") .. '-' .. mw.language.getContentLanguage():formatDate("m") .. ')'},

{mw.language.getContentLanguage():formatDate("Y") .. '|' .. mw.language.getContentLanguage():formatDate("m") .. "|" .. mw.language.getContentLanguage():formatDate("d"), mw.language.getContentLanguage():formatDate("F") .. ' ' .. mw.language.getContentLanguage():formatDate("j") .. ', ' .. mw.language.getContentLanguage():formatDate("Y") .. '; 0 days ago (' .. getPresentDate() .. ')'},

}, {nowiki=1})

end

function p:test_22_generate_date_range_valid()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date_range', {

-- Full dates

-- Same year, same month (November 12–27, 2008; 12–27 November 2008)

{'2008|11|12|2008|11|27', 'November 12–27, 2008 (2008-11-12) (2008-11-27)'},

{'2008|11|12|2008|11|27|df=yes', '12–27 November 2008 (2008-11-12) (2008-11-27)'},

-- Same year, different month (November 12 – December 27, 2008; 12 November – 27 December 2008)

{'2008|11|12|2008|12|27', 'November 12 – December 27, 2008 (2008-11-12) (2008-12-27)'},

{'2008|11|12|2008|12|27|df=yes', '12 November – 27 December 2008 (2008-11-12) (2008-12-27)'},

-- Different years (November 12, 2008 – December 27, 2010; 12 November 2008 – 27 December 2010)

{'2008|11|12|2010|12|27', 'November 12, 2008 – December 27, 2010 (2008-11-12) (2010-12-27)'},

{'2008|11|12|2010|12|27|df=yes', '12 November 2008 – 27 December 2010 (2008-11-12) (2010-12-27)'},

-- To present

-- Full date (November 12, 2008 – present; 12–27 November 2008 – present)

{'2008|11|12|present', 'November 12, 2008 – present (2008-11-12) (' .. getPresentDate() .. ')'},

{'2008|11|12|present|df=yes', '12 November 2008 – present (2008-11-12) (' .. getPresentDate() .. ')'},

-- No day (November 2008 – present; November 2008 – present)

{'2008|11||present', 'November 2008 – present (2008-11) (' .. getPresentDate() .. ')'},

{'2008|11||present|df=yes', 'November 2008 – present (2008-11) (' .. getPresentDate() .. ')'},

-- No day and month (2008–present; 2008–present)

{'2008|||present', '2008–present (2008) (' .. getPresentDate() .. ')'},

{'2008|||present|df=yes', '2008–present (2008) (' .. getPresentDate() .. ')'},

}, {nowiki=1})

end

function p:test_23_generate_date_range_partial_dates()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date_range', {

-- Full date and partial date

-- No end month and day: different year

{'2008|11|12|2009|', 'November 12, 2008 – 2009 (2008-11-12) (2009)'},

{'2008|11|12|2009||df=yes', '12 November 2008 – 2009 (2008-11-12) (2009)'},

-- No end month and day: Same year

{'2008|11|12|2008|', ''},

{'2008|11|12|2008||df=yes', ''},

-- No end day: different year, same month

{'2008|11|12|2009|11', 'November 12, 2008 – November 2009 (2008-11-12) (2009-11)'},

{'2008|11|12|2009|11|df=yes', '12 November 2008 – November 2009 (2008-11-12) (2009-11)'},

-- No end day: Same year, same month

{'2008|11|12|2008|11', ''},

{'2008|11|12|2008|11|df=yes', ''},

-- No end day: Same year, different month (November 12 – December 2008; 12 November – December 2008)

{'2008|11|12|2008|12', 'November 12, 2008 – December 2008 (2008-11-12) (2008-12)'},

{'2008|11|12|2008|12|df=yes', '12 November 2008 – December 2008 (2008-11-12) (2008-12)'},

-- Partial date and full date

-- No start month and day: different year

{'2008|||2009|11|27', '2008 – November 27, 2009 (2008) (2009-11-27)'},

{'2008|||2009|11|27|df=yes', '2008 – 27 November 2009 (2008) (2009-11-27)'},

-- No start month and day: same year

{'2008|||2008|11|27', '2008 – November 27, 2008 (2008) (2008-11-27)'},

{'2008|||2008|11|27|df=yes', '2008 – 27 November 2008 (2008) (2008-11-27)'},

-- No start day: Same year, same month (November 2008 – November 27, 2008; November 2008 – 27 November 2008)

{'2008|11||2008|11|27', 'November 2008 – November 27, 2008 (2008-11) (2008-11-27)'},

{'2008|11||2008|11|27|df=yes', 'November 2008 – 27 November 2008 (2008-11) (2008-11-27)'},

-- No start day: Same year, different month (November 2008 – December 27, 2008; November 2008 – 27 December 2008)

{'2008|11||2008|12|27', 'November 2008 – December 27, 2008 (2008-11) (2008-12-27)'},

{'2008|11||2008|12|27|df=yes', 'November 2008 – 27 December 2008 (2008-11) (2008-12-27)'},

-- Partial dates both

-- No days: Same year, same month (November–November 2008; November–November 2008)

{'2008|11||2008|11', 'November–November 2008 (2008-11) (2008-11)'},

{'2008|11||2008|11|df=yes', 'November–November 2008 (2008-11) (2008-11)'},

-- No days: Same year, different month (November–December 2008; November–December 2008)

{'2008|11||2008|12', 'November–December 2008 (2008-11) (2008-12)'},

{'2008|11||2008|12|df=yes', 'November–December 2008 (2008-11) (2008-12)'},

}, {nowiki=1})

end

function p:test_24_generate_date_range_invalid()

self:preprocess_equals_sandbox_many('{{#invoke:Date time', 'generate_date_range', {

-- Empty

{'', getErrorMessage(ERROR_MESSAGES.missing_year)},

-- No end date

{'2000', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'2000|2', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'2000|2|1', getErrorMessage(ERROR_MESSAGES.missing_year)},

-- No start date

{'|||2000', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|||2000|2', getErrorMessage(ERROR_MESSAGES.missing_year)},

{'|||2000|2|1', getErrorMessage(ERROR_MESSAGES.missing_year)},

-- End date before start date

{'2008|11|27|2008|11|12', getErrorMessage(ERROR_MESSAGES.end_date_before_start_date)},

{'2008|11|27|2008|11|12|df=yes', getErrorMessage(ERROR_MESSAGES.end_date_before_start_date)},

}, {nowiki=1})

end

return p