# Module:ISO 639 name/testcases

--[=[  
Unit tests for Module:ISO 639 name error messages. This is not intended to test every possible thing that  
can make an error message; rather, it is to test the creation and rendering of the messages themselves.  

Click talk page to run tests.  

]=]  

local p = require('Module:UnitTests')  

----------------------------< I S O _ 6 3 9 >----------------------------------------------------------------  

function p:test_iso_639  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no code param  
{'xx'}, -- not a 639-1 code  
{'nv'}, -- 639-1 code  
{'cic'}, -- 639-2 code  
{'ice'}, -- 639-2B code  
{'nav'}, -- 639-3 code  
{'apa'}, -- 639-5 code  

{'|'}, -- no code param, no 639-part param  
{'xx|1'}, -- not a 639-1 code  
{'nv|1'}, -- 639-1 code  
{'nav|2'}, -- 639-2 code  
{'ice|2B'}, -- 639-2B code  
{'cic|3'}, -- 639-3 code  
{'apa|5'}, -- 639-5 code  

{'apa|6'}, -- invalid 639-part  

{'el'}, -- 639-1 code in override table  
{'ang'}, -- 639-2 code in override table  
{'gre'}, -- 639-2B code in override table  
{'egy'}, -- 639-3 code in override table  
-- {''}, -- 639-5 code at this writing override table is empty  

{'iw'}, -- 639-1 code in deprecated table  
{'mol'}, -- 639-2 code in deprecated table  
{'jaw'}, -- 639-2B code in deprecated table  
{'cqu'}, -- 639-3 code in deprecated table  
{'car'}, -- 639-5 code in deprecated table (also in -2 and -3)  

--language names --  
{'Navajo'}, -- 639-1 name  
{'Navajo'}, -- 639-2 name  
{'Navaho'}, -- 639-3 name  
{'Apache languages'}, -- 639-5 name  

{'Navajo|1'}, -- 639-1 name  
{'Navajo|2'}, -- 639-2 name  
{'Icelandic|2B'}, -- 639-2B name  
{'Navaho|3'}, -- 639-3 name  
{'Apache languages|5'}, -- 639-5 name  

-- {''}, -- name in deprecated 1; deprecated codes in 1 have same-name as other codes in 1  
-- {''}, -- name in deprecated 2; deprecated codes in 2 have same-name as other codes in 2  
{'Javanese|2B'}, -- name in deprecated 2B  
{'Chilean Quechua|3'}, -- name in deprecated 3  
{'Galibi Carib|5'}, -- name in deprecated 5  

{'Navajo|5'}, -- name not in 639-5  
{'Apache languages|3'}, -- name not in 639-3  
{'Chickasaw|2B'}, -- name not in 639-2B  
{'Chickasaw|2'}, -- name not in 639-2  
{'Apache languages|1'}, -- name not in 639-1  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< N A M E _ F R O M _ C O D E >--------------------------------------  

cannot specify part  

function p:test_name_from_code  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no language param  
{'xx'}, -- not a 639-1 code  
{'xxx'}, -- not a 639-2, 3, 5 code  
{'nv'}, -- 639-1 code  
{'nav'}, -- 639-2 code  
{'nav'}, -- 639-3 code  
{'apa'}, -- 639-5 code  

{'el'}, -- 639-1 code in override table  
{'ang'}, -- 639-2 code in override table  
{'tib'}, -- 639-2B code in override table  
{'egy'}, -- 639-3 code in override table  
-- {''}, -- 639-5 code at this writing override table is empty  

{'iw'}, -- 639-1 code in deprecated table  
{'mol'}, -- 639-2 code in deprecated table  
{'jaw'}, -- 639-2B code in deprecated table  
{'cqu'}, -- 639-3 code in deprecated table  
{'car'}, -- 639-5 code in deprecated table (also in -2 and -3)  

-- link & label  
{'nv|link=yes'}, -- links to 639-1 name  
{'nav|link=yes|label=Navaho'}, -- links to 639-2 name with alt spelling label  
{'ice|link=yes|label=Frozen North'}, -- links to 639-2B name with alt spelling label  
{'nav|label=Navaho'}, -- does not link; |label= is ignored  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< N A M E _ F R O M _ C O D E _ 1 >----------------------------------  

function p:test_name_from_code_1  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no language param  
{'xx'}, -- not a 639-1 code  
{'xx|hide-err=yes'}, -- not a 639-1 code  
{'nv-Latn'}, -- ietf tag  
{'nv'}, -- 639-1 code  
{'nav'}, -- 639-2 code  
{'el'}, -- override 639-1 code  
{'iw'}, -- 639-1 code in deprecated table  

{'nv|link=yes'}, -- linked  
{'nv|link=yes|label=Navaho'}, -- linked with alt label  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< N A M E _ F R O M _ C O D E _ 2 >----------------------------------  

function p:test_name_from_code_2  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no language param  
{'xxx'}, -- not a 639-2 code  
{'xxx|hide-err=yes'}, -- not a 639-2 code  
{'nav-Latn'}, -- ietf tag  
{'nv'}, -- 639-1 code  
{'nav'}, -- 639-2 code  
{'ice'}, -- 639-2B code  
{'mga'}, -- override 639-2 code  
{'mol'}, -- 639-2 code in deprecated table  

{'nav|link=yes'}, -- linked  
{'nav|link=yes|label=Navaho'}, -- linked with alt label  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< N A M E _ F R O M _ C O D E _ 2 B >--------------------------------  

function p:test_name_from_code_2B  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no language param  
{'xxx'}, -- not a 639-2 code  
{'xxx|hide-err=yes'}, -- not a 639-2 code  
{'nav-Latn'}, -- ietf tag  
{'nv'}, -- 639-1 code  
{'nav'}, -- 639-2T code  
{'ice'}, -- 639-2B code  
{'tib'}, -- 639-2B code in override table  
{'jaw'}, -- 639-2B code in deprecated table  

{'ice|link=yes'}, -- linked  
{'ice|link=yes|label=Frozen North'}, -- linked with alt label  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< N A M E _ F R O M _ C O D E _ 3 >----------------------------------  

function p:test_name_from_code_3  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no language param  
{'xxx'}, -- not a 639-3 code  
{'xxx|hide-err=yes'}, -- not a 639-3 code  
{'nav-Latn'}, -- ietf tag  
{'nv'}, -- 639-1 code  
{'nav'}, -- 639-3 code  
{'pms'}, -- override 639-3 code  
{'cqu'}, -- 639-3 code in deprecated table  

{'nav|link=yes'}, -- linked  
{'nav|link=yes|label=Navajo'}, -- linked with alt label  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< N A M E _ F R O M _ C O D E _ 5 >----------------------------------  

function p:test_name_from_code_5  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no language param  
{'xxx'}, -- not a 639-5 code  
{'xxx|hide-err=yes'}, -- not a 639-5 code  
{'nav-Latn'}, -- ietf tag  
{'nv'}, -- 639-1 code  
{'apa'}, -- 639-5 code  
-- {''}, -- override 639-5 code; at this writing  
{'car'}, -- 639-5 code in deprecated table (also in -2 and -3)  

{'apa|link=yes'}, -- linked  
{'apa|link=yes|label=Apache'}, -- linked with alt label  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< C O D E _ F R O M _ N A M E >--------------------------------------  

function p:test_code_from_name  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no name param  
{'nv'}, -- 639-1 code  
--language names --  
{'Navajo'}, -- 639-1 name  
{'Navajo'}, -- 639-2 name  
-- {''}, -- 639-2B names same as -1, -2T names so -1 name will be used for this test  
{'Navaho'}, -- 639-3 name  
{'Apache languages'}, -- 639-5 name  

{'Navajo|1'}, -- 639-1 name  
{'Icelandic|2'}, -- 639-2 name  
{'Icelandic|2B'}, -- 639-2B name  
{'Navaho|3'}, -- 639-3 name  
{'Apache languages|5'}, -- 639-5 name  

{'Navajo|5'}, -- 639-1 name not in 5  
{'Navajo|3'}, -- 639-2 name not in 3  
{'Navaho|2B'}, -- 639-3 name not in 2B  
{'Navaho|2'}, -- 639-3 name not in 2  
{'Apache languages|1'}, -- 639-5 name not in 1  

{'Apache languages|6'}, -- invalid 639-part  

{'Greek'}, -- only 639-1 code in override table  
{'Old English'}, -- 639-2 code in override table  
{'Standard Tibetan'}, -- 639-2B code in override table; same as -1 and -2 so -1 code is returned  
{'Ancient Egyptian'}, -- 639-3 code in override table  
-- {''}, -- 639-5 code at this writing override table is empty  

-- {''}, -- name in deprecated 1; deprecated codes in 1 have same-name as other codes in 1  
-- {''}, -- name in deprecated 2; deprecated codes in 2 have same-name as other codes in 2  
{'Javanese|2B'}, -- name in deprecated 2B  
{'Chilean Quechua|3'}, -- name in deprecated 3  
{'Galibi Carib|5'}, -- name in deprecated 5  

-- these should not link  
{'Navajo|link=yes'}, -- 639-1 name  
{'Navajo|link=yes|label=Navajo'}, -- 639-2 name  
{'Navaho|label=Navajo'}, -- 639-3 name  
},  
{nowiki=false, templatestyles=true}  
end  

----------------------------< I S _ C O D E >----------------------------------------  

function p:test_is_code  
self:preprocess_equals_preprocess_many(  
*, *,  
{  
{''}, -- no code param  
{'xx'}, -- not a 639-1 code  
{'xxx'}, -- not a 639-2, 3, 5 code  

{'nv'}, -- 639-1 code  
{'apa'}, -- 639-2 code  
{'ice'}, -- 639-2B code  
{'nav'}, -- 639-2 code  

{'el'}, -- override 639-1 code  
{'mga'}, -- override 639-2 code  
{'pms'}, -- override 639-3 code  

{'iw'}, -- 639-1 code in deprecated table  
{'mol'}, -- 639-2 code in deprecated table  
{'jaw'}, -- 639-2B code in deprecated table  
{'cqu'}, -- 639-3 code in deprecated table  
{'car'}, -- 639-5 code in deprecated table (also in -2 and -3)  
},  
{nowiki=false, templatestyles=true}  
end  

return p