モジュール:ISO639言語名/testcases

local p = {}

function p.compareWithCLDR()
	local sortedPairs = require('モジュール:TableTools').sortedPairs
	local langMappingTitle = 'モジュール:ISO639言語名/data'
	local mwLanguageNames = mw.language.fetchLanguageNames('ja', 'all')
	local mwLanguageNamesEn = mw.language.fetchLanguageNames('en', 'all')
	local langMap = {}
	
	for code, name in pairs(mwLanguageNames) do
		langMap[code] = { ['cldr'] = name, ['cldrEn'] = mwLanguageNamesEn[code] }
	end
	
	for code, name in pairs(mw.loadData(langMappingTitle).full_name) do
		if langMap[code] then
			langMap[code]['module'] = name
		else
			langMap[code] = { ['module'] = name }
		end
	end
	
	local res = mw.html.create('table')
		:addClass('wikitable sortable')
		:tag('tr')
			:tag('th')
				:wikitext('言語コード')
				:done()
			:tag('th')
				:wikitext('[[', langMappingTitle, '|モジュール]]')
				:done()
			:tag('th')
				:wikitext('[[mw:Extension:CLDR/ja|CLDR]]による日本語名')
				:done()
			:tag('th')
				:wikitext('等しいか')
				:done()
			:tag('th')
				:wikitext('CLDRによる英語名')
				:allDone()
	
	local function makeLangNameLink(langName)
		if not langName or langName == '' then return '' end
		return '[[' .. langName .. ']]'
	end
	
	local tdYes = mw.html.create('td')
			:cssText('background-color:#9f9;vertical-align:middle;text-align:center;')
			:wikitext('Yes')
	local tdNo = mw.html.create('td')
		:cssText('background-color:#f99;vertical-align:middle;text-align:center;')
		:wikitext('No')
	
	for code, v in sortedPairs(langMap) do
		res
			:tag('tr')
				:tag('td')
					:wikitext('[[:en:ISO 639:', code, '|', code, ']]')
					:done()
				:tag('td')
					:wikitext(makeLangNameLink(v['module']))
					:done()
				:tag('td')
					:wikitext(makeLangNameLink(v['cldr']))
					:done()
				:node((v['module'] == v['cldr']) and tdYes or tdNo)
				:tag('td')
					:wikitext(v['cldrEn'])
					:done()
				:allDone()
	end
	return tostring(res)
end

return p