local tests = require('Module:UnitTests')
local m_links = require('Module:links')
local lang = require('Module:languages').getByCode('sa')
local sa_utils_translit = require('Module:sa-utilities/translit')
local Deva_to_IAST = require('Module:sa-utilities/translit/Deva-to-IAST')
local Deva_to_SLP = require('Module:sa-utilities/translit/Deva-to-SLP1')
local IAST_to_SLP = require('Module:sa-utilities/translit/IAST-to-SLP1')
local SLP_to_IAST = require('Module:sa-utilities/translit/SLP1-to-IAST')
local SLP_to_Deva = require('Module:sa-utilities/translit/SLP1-to-Deva')

local function link(term)
	return m_links.full_link { lang = lang, term = term, tr = '-' }
end

function tests:check_Deva_conversion(input, expected)
	input = input[1]
	local slp = Deva_to_SLP.tr(input)
	table.insert(expected, input)
	self:equals(link(input),
		table.concat({ Deva_to_IAST.tr(input), slp, SLP_to_Deva.tr(slp) }, ', '),
		table.concat(expected, ', '))
end

function tests:test_Deva_conversion()
	local examples = {
		{ { 'संस्कृत' }, { 'saṃskṛta', 'saMskfta' } },
		{ { 'तन्त्र' }, { 'tantra', 'tantra' } },
		{ { 'चन्द्र' }, { 'candra', 'candra' } },
		{ { 'स्वतंत्र' }, { 'svataṃtra', 'svataMtra' } },
		{ { 'त्रैंश' }, { 'traiṃśa', 'trEMSa' } },
		{ { 'कार्त्स्न्य' }, { 'kārtsnya', 'kArtsnya' } },
		{ { 'उक्त्वा' }, { 'uktvā', 'uktvA' } },
		{ { 'औपद्रष्ट्र्य' }, { 'aupadraṣṭrya', 'Opadrazwrya' } },
		{ { 'मार्त्स्न' }, { 'mārtsna', 'mArtsna' } },
		{ { 'निकुञ्जिकाम्ला' }, { 'nikuñjikāmlā', 'nikuYjikAmlA' } },
		{ { 'महत्' }, { 'mahat', 'mahat' } },
	}
	self:iterate(examples, 'check_Deva_conversion')
end

function tests:check_IAST_conversion(input, expected)
	input = input[1]
	local slp = IAST_to_SLP.tr(input)
	if #expected < 3 then table.insert(expected, input) end
	self:equals(input,
		table.concat({ slp, SLP_to_Deva.tr(slp), SLP_to_IAST.tr(slp) }, ', '),
		table.concat(expected, ', '))
end

function tests:test_IAST_conversion()
	local examples = {
		{ { 'saṃskṛtá' }, { 'saMskfta/', 'संस्कृत', } },
		{ { 'tántra' }, { 'ta/ntra', 'तन्त्र' } },
		{ { 'candrá' }, { 'candra/', 'चन्द्र' } },
		{ { 'svátaṃtra' }, { 'sva/taMtra', 'स्वतंत्र' } },
		{ { 'traiṃśa' }, { 'trEMSa', 'त्रैंश' } },
		{ { 'kārtsnya' }, { 'kArtsnya', 'कार्त्स्न्य' } },
		{ { 'uktvā' }, { 'uktvA', 'उक्त्वा' } },
		{ { 'aúpadraṣṭrya' }, { 'O/padrazwrya', 'औपद्रष्ट्र्य' } },
		{ { 'áupadraṣṭrya' }, { 'O/padrazwrya', 'औपद्रष्ट्र्य', 'aúpadraṣṭrya' } },
		{ { 'mā́rtsna' }, { 'mA/rtsna', 'मार्त्स्न' } },
		{ { 'nikuñjikāmlā' }, { 'nikuYjikAmlA', 'निकुञ्जिकाम्ला' } },
		{ { 'mahát' }, { 'maha/t', 'महत्' } },
		{ { 'kanyā̀' }, { 'kanyA\\', 'कन्या' } },
		{ { 'mūrdhán' }, { 'mUrDa/n', 'मूर्धन्' } },
		{ { 'átharvan' }, { 'a/Tarvan', 'अथर्वन्' } },
		{ { 'mūrkhá' }, { 'mUrKa/', 'मूर्ख' } },
	}
	self:iterate(examples, 'check_IAST_conversion')
end

function tests:check_detect_to_SLP(input, expected)
	input = input[1]
	local slp = IAST_to_SLP.tr(input)
	self:equals(input,
		sa_utils_translit.detect_to_SLP(input),
		expected[1])
end

function tests:test_detect_to_SLP()
	local examples = {
		{ { 'saṃskṛtá' }, { 'saMskfta/' } },
		{ { 'tántra' }, { 'ta/ntra' } },
		{ { 'candrá' }, { 'candra/' } },
		{ { 'स्वतंत्र' }, { 'svataMtra' } },
		{ { 'traiṃśa' }, { 'trEMSa' } },
		{ { 'कार्त्स्न्य' }, { 'kArtsnya' } },
		{ { 'uktvā' }, { 'uktvA' } },
		{ { 'औपद्रष्ट्र्य' }, { 'Opadrazwrya' } },
		{ { 'áupadraṣṭrya' }, { 'O/padrazwrya' } },
		{ { 'mā́rtsna' }, { 'mA/rtsna' } },
		{ { 'निकुञ्जिकाम्ला' }, { 'nikuYjikAmlA' } },
		{ { 'महत्' }, { 'mahat' } },
	}
	self:iterate(examples, 'check_detect_to_SLP')
end

return tests
"https://si.wiktionary.org/w/index.php?title=Module:sa-utilities/translit/testcases&oldid=41866" වෙතින් සම්ප්‍රවේශනය කෙරිණි