-- Unit tests for [[Module:LDSVerse]]. Click talk page to run tests.

-- NB: If you ever see a failure on the results page even though the text seems like it's
--	*exactly* the same as what was expected but it still tells you there's a 
--	difference, check the underscore situation. The LDSverse module does not use 
--	underscores between words when generating the cross-wiki link (except for in 
--	#bookmarks, where they are required for the bookmark to work) so if the 
--	test case here expects there to be underscores in the generated link (e.g., 
--	[[s:Bible_(King_James)/Genesis|Gen.]]) it will throw an error because the 
--	link generated by the module will just be [[s:Bible (King James)/Genesis|Gen.]].
--	This is really annoying to debug because by the time MediaWiki generates the 
--	HTML that you see on the results page, it has in fact swapped in underscores 
--	for those spaces! But that is what is going on. FYI :)

local p = require('Module:UnitTests')

-- No parameters unit test
function p:test_01_noParams()
	self:preprocess_equals('{{LDS}}', '[[s:Portal:Mormonism#LDS_Standard_Works_(Scriptures)|LDS Standard Works]]')
end

-- One parameter
function p:test_02_noParams2()
	self:preprocess_equals('{{LDS|Display Text}}', '[[s:Portal:Mormonism#LDS_Standard_Works_(Scriptures)|Display Text]]')
end

-- Cite to book in Bible
function p:test_03_genesis()
	self:preprocess_equals('{{LDS|Gen.|gen}}', '[[s:Bible (King James)/Genesis|Gen.]]')
end

-- Cite to (other) book in Bible #1
function p:test_04_sos1()
	self:preprocess_equals('{{LDS|The Songs of Solomon|song}}', '[[s:Bible (King James)/Song of Solomon|The Songs of Solomon]]')
end

-- Cite to (other) book in Bible #2
function p:test_05_sos2()
	self:preprocess_equals('{{LDS|Canticles|Song of Solomon}}', '[[s:Bible (King James)/Song of Solomon|Canticles]]')
end

-- Cite to Bible chapter #1
function p:test_06_num_3()
	self:preprocess_equals('{{LDS|Num.|num|3}}', '[[s:Bible (King James)/Numbers#chapter_3|Num. 3]]')
end

-- Cite to Bible chapter #2
function p:test_07_1_kings_5()
	self:preprocess_equals('{{LDS|1 Kuningad|1kgs|5}}', '[[s:Bible (King James)/1 Kings#chapter_5|1 Kuningad 5]]')
end

-- Cite to Bible chapter #3
function p:test_08_amos_2()
	self:preprocess_equals('{{LDS|Amos (not Andy)|Amos|2}}', '[[s:Bible (King James)/Amos#chapter_2|Amos (not Andy) 2]]')
end

-- Cite to Bible verse #1
function p:test_09_gen_3_6()
	self:preprocess_equals('{{LDS|Gen.|gen|3|6}}', '[[s:Bible (King James)/Genesis#3:6|Gen. 3:6]]')
end

-- Cite to Bible verse #2
function p:test_10_matt_5_20()
	self:preprocess_equals('{{LDS|Matt.|Matthew|5|20}}', '[[s:Bible (King James)/Matthew#5:20|Matt. 5:20]]')
end

-- Cite to BoM book #1
function p:test_11_mormon()
	self:preprocess_equals('{{LDS|Morm.|Mormon}}', '[[s:Book of Mormon (1981)/Mormon|Morm.]]')
end

-- Cite to BoM book #2
function p:test_12_enos()
	self:preprocess_equals('{{LDS|Enos da Man|Enos}}', '[[s:Book of Mormon (1981)/Enos|Enos da Man]]')
end

-- Cite to BoM book #3
function p:test_13_1_ne()
	self:preprocess_equals('{{LDS|Morm.|1 Nephi}}', '[[s:Book of Mormon (1981)/1 Nephi|Morm.]]')
end

-- Cite to BoM chapter #1
function p:test_14_2_ne_26()
	self:preprocess_equals('{{LDS|2 Nyafi|2 Nephi|26}}', '[[s:Book of Mormon (1981)/2 Nephi#chapter_26|2 Nyafi 26]]')
end

-- Cite to BoM chapter #2
function p:test_15_alma_50()
	self:preprocess_equals('{{LDS|Alma|alma|50}}', '[[s:Book of Mormon (1981)/Alma#chapter_50|Alma 50]]')
end

-- Cite to BoM verse #1
function p:test_16_2_ne_26_33()
	self:preprocess_equals('{{LDS|2 Nyafi|2 Nephi|26|33}}', '[[s:Book of Mormon (1981)/2 Nephi#26:33|2 Nyafi 26:33]]')
end

-- Cite to D&C
function p:test_17_dc()
	self:preprocess_equals('{{LDS|D&C|dc}}', '[[s:The Doctrine and Covenants|D&C]]')
end

-- Cite to D&C Section
function p:test_18_dc_88()
	self:preprocess_equals('{{LDS|D&C|dc|88}}', '[[s:The Doctrine and Covenants/Section 88|D&C 88]]')
end

-- Cite to D&C verse
function p:test_19_dc_88_6()
	self:preprocess_equals('{{LDS|D&C|dc|88|6}}', '[[s:The Doctrine and Covenants/Section 88#6|D&C 88:6]]')
end

-- Cite to PoGP book 1
function p:test_20_jst_matthew()
	self:preprocess_equals('{{LDS|JST Matthew|jst-matt}}', '[[s:The Pearl of Great Price (1913)/Matthew|JST Matthew]]')
end

-- Cite to PoGP book 2
function p:test_21_abraham()
	self:preprocess_equals('{{LDS|Avraham (Gileadi)|abr}}', '[[s:The Pearl of Great Price (1913)/Abraham|Avraham (Gileadi)]]')
end

-- Cite to PoGP book 3
function p:test_22_moses()
	self:preprocess_equals('{{LDS|Moses|moses}}', '[[s:The Pearl of Great Price (1913)/Moses|Moses]]')
end

-- Cite to PoGP book 4
function p:test_23_history()
	self:preprocess_equals('{{LDS|JS History|History}}', '[[s:The Pearl of Great Price (1913)/History|JS History]]')
end

-- Cite to PoGP book 5
function p:test_24_aof()
	self:preprocess_equals('{{LDS|AoF|aoff}}', '[[s:The Pearl of Great Price (1913)/Articles of Faith|AoF]]')
end

-- Cite to PoGP chapter 1
function p:test_25_moses_2()
	self:preprocess_equals('{{LDS|Moses|moses|2}}', '[[s:The Pearl of Great Price (1913)/Moses#chapter_2|Moses 2]]') -- This assumes that PoGP chapter bookmarks get standardized
end

-- Cite to PoGP chapter 2
function p:test_26_abraham_3()
	self:preprocess_equals('{{LDS|Abr.|Abraham|3}}', '[[s:The Pearl of Great Price (1913)/Abraham#chapter_3|Abr. 3]]') -- This assumes that PoGP chapter bookmarks get standardized
end

-- Cite to PoGP chapter 3
function p:test_27_aof_1()
	self:preprocess_equals('{{LDS|AoF|aoff|1}}', '[[s:The Pearl of Great Price (1913)/Articles of Faith#chapter_1|AoF 1]]') -- This assumes that PoGP chapter bookmarks get standardized
end

-- Cite to PoGP chapter 4
function p:test_28_jst_matthew_1()
	self:preprocess_equals('{{LDS|JS Matthew|jsm|1}}', '[[s:The Pearl of Great Price (1913)/Matthew#chapter_1|JS Matthew 1]]') -- This assumes that PoGP chapter bookmarks get standardized
end

-- Cite to PoGP chapter 5
function p:test_29_js_history_1()
	self:preprocess_equals('{{LDS|JS Hist.|jsh|1}}', '[[s:The Pearl of Great Price (1913)/History#chapter_1|JS Hist. 1]]') -- This assumes that PoGP chapter bookmarks get standardized
end

-- Cite to PoGP verse 1
function p:test_30_moses_3_8()
	self:preprocess_equals('{{LDS|Moses|moses|3|8}}', '[[s:The Pearl of Great Price (1913)/Moses#3:8|Moses 3:8]]')
end

-- Cite to PoGP verse 2
function p:test_31_abraham_3_8()
	self:preprocess_equals('{{LDS|Abr.|Abraham|3|8}}', '[[s:The Pearl of Great Price (1913)/Abraham#3:8|Abr. 3:8]]')
end

-- Cite to PoGP verse 3
function p:test_32_jst_matthew_26()
	self:preprocess_equals('{{LDS|JST Matthew|jst-matt|1|26}}', '[[s:The Pearl of Great Price (1913)/Matthew#1:26|JST Matthew 1:26]]')
end

-- Cite to PoGP verse 4
function p:test_33_jst_hist_16()
	self:preprocess_equals('{{LDS|JST Historia|js-hist|1|16}}', '[[s:The Pearl of Great Price (1913)/History#1:16|JST Historia 1:16]]')
end

-- Cite to PoGP verse 5
function p:test_34_aof_11()
	self:preprocess_equals('{{LDS|Articles o\' Faith|Articles of Faith|1|11}}', '[[s:The Pearl of Great Price (1913)/Articles of Faith#1:11|Articles o\' Faith 1:11]]')
end

-- weird spacing issues
function p:test_35_spacing_1()
	self:preprocess_equals('{{LDS |Alma |alma |7 |11 }}', '[[s:Book of Mormon (1981)/Alma#7:11|Alma 7:11]]')
end

-- weird spacing issues
function p:test_36_spacing_2()
	self:preprocess_equals('{{LDS |  Mos. | mosiah |  4 |  16 }}', '[[s:Book of Mormon (1981)/Mosiah#4:16|Mos. 4:16]]')
end

-- range of verses
function p:test_37_range_1()
	self:preprocess_equals('{{LDS|Doctrine + Covenants|dc|128|19|22}}', '[[s:The Doctrine and Covenants/Section 128#19|Doctrine + Covenants 128:19–22]]')
end

-- range of verses
function p:test_38_range_2()
	self:preprocess_equals('{{LDS|Doctrine + Covenants|dc|128|19|–22, 24|||x}}', '[[s:The Doctrine and Covenants/Section 128#19|Doctrine + Covenants 128:19–22, 24]]')
end

-- BoM intro
function p:test_39_bom_title_page()
	self:preprocess_equals('{{LDS|Title Page to the Book of Mormon|ttlpg}}', '[[s:Book of Mormon (1981)/Title Page|Title Page to the Book of Mormon]]')
end

-- BoM 3 witnesses
function p:test_40_bom_3_witnesses()
	self:preprocess_equals('{{LDS|3 Witnesses|three}}', '[[s:Book of Mormon (1981)/Testimony of Three Witnesses|3 Witnesses]]')
end

-- BoM 8 witnesses
function p:test_41_bom_8_witnesses()
	self:preprocess_equals('{{LDS|8 Witnesses|eight}}', '[[s:Book of Mormon (1981)/Testimony of Eight Witnesses|8 Witnesses]]')
end

-- Lectures on Faith
function p:test_42_Lectures()
	self:preprocess_equals('{{LDS|Lectures re Faith|lof}}', '[[s:Lectures on Faith|Lectures re Faith]]')
end

-- Lectures on Faith
function p:test_43_Lecture_Seventh()
	self:preprocess_equals('{{LDS|Lectures about Faith|lof|7}}', '[[s:Lectures on Faith/Lecture Seventh|Lectures about Faith 7]]')
end

-- Forgotten second parameter
--		It's easy to forget to "repeat" the second parameter for the book name, especially if you use
--		the full book name as the display text, so these next tests check for a fix for that
function p:test_44_forgotten_2nd_param_1()
	self:preprocess_equals('{{LDS|Alma|7}}', '[[s:Book of Mormon (1981)/Alma#chapter_7|Alma 7]]')
end

-- Forgotten second parameter
function p:test_45_forgotten_2nd_param_2()
	self:preprocess_equals('{{LDS|Alma|7|11}}', '[[s:Book of Mormon (1981)/Alma#7:11|Alma 7:11]]')
end

-- Forgotten second parameter
function p:test_46_forgotten_2nd_param_3()
	self:preprocess_equals('{{LDS|Alma|7|11|–13, 23–24|||x}}', '[[s:Book of Mormon (1981)/Alma#7:11|Alma 7:11–13, 23–24]]')
end

-- Forgotten second parameter and abbreviation in displayText
function p:test_47_forgotten_2nd_param_4()
	self:preprocess_equals('{{LDS|2 Ne.|4|28|30}}', '[[s:Book of Mormon (1981)/2 Nephi#4:28|2 Ne. 4:28–30]]')
end

-- Graceful error handling for bad LoF numbers
function p:test_48_bad_lof_param()
	self:preprocess_equals('{{LDS|Lectures about Faith|lof|8}}', '[[s:Lectures on Faith|Lectures about Faith 8 (invalid)]]')
end

return p