local m = require'Module:ja-ruby'
local t = require'Module:UnitTests'

function t:test_ruby()
	local function nw(s) return self.frame:extensionTag('nowiki', s) end
	local function o2s(o)
		if o == nil then return '' end
		local function table_to_string(t1)
			local result = {'{'}
			for k, v in pairs(t1) do
				table.insert(result, '["')
				table.insert(result, k)
				table.insert(result, '"]=')
				if type(v) == 'string' then
					table.insert(result, '"')
					table.insert(result, nw(v))
					table.insert(result, '"')
				elseif type(v) == 'table' then
					table.insert(result, table_to_string(v))
				else
					table.insert(result, tostring(v))	
				end
				table.insert(result, ',')
			end
			table.insert(result, '}')
			return table.concat(result)
		end
		return '<li>' .. table_to_string(o) .. '</li>'
	end
	local function _f(s1, s2, sr, o)
		return t:equals('<li>' .. nw(s1) .. '</li><li>' .. nw(s2) .. '</li>' .. o2s(o), m.to_wiki(m.parse_text(s1, s2, o), o), sr, {nowiki = true})
	end
	local function _ff(s1, sr, o)
		return t:equals('<li>' .. nw(s1) .. '</li>' .. o2s(o), m.to_wiki(m.parse_markup(s1, o), o), sr, {nowiki = true})
	end
	local function _f3(args, sr)
		return t:equals(o2s(args), m.ruby_auto(args), sr, {nowiki = true})
	end
	_f(
		'推%理%小%説',
		'すい%り% しょう%せつ',
		'<ruby>推<rp>(</rp><rt>すい</rt><rp>)</rp></ruby><ruby>理<rp>(</rp><rt>り</rt><rp>)</rp></ruby><ruby>小<rp>(</rp><rt>しょう</rt><rp>)</rp></ruby><ruby>説<rp>(</rp><rt>せつ</rt><rp>)</rp></ruby>')
	_f(
		'[[w:Edgar Allan Poe|アラン・ポー]]の[[推理 小説]]',
		'あらん ぽー の すいり しょうせつ',
		'[[w:Edgar Allan Poe|アラン・ポー]]の[[推理小説|<ruby>推理<rp>(</rp><rt>すいり</rt><rp>)</rp></ruby><ruby>小説<rp>(</rp><rt>しょうせつ</rt><rp>)</rp></ruby>]]')
	_f(
		'[[w:Edgar Allan Poe|アラン・ポー]]の[[推理 小説]]',
		'あらん ぽー の すいり しょうせつ',
		'[[w:Edgar Allan Poe|アラン・ポー]]の[[推理 小説|<ruby>推理<rp>(</rp><rt>すいり</rt><rp>)</rp></ruby> <ruby>小説<rp>(</rp><rt>しょうせつ</rt><rp>)</rp></ruby>]]',
		{space = 'all'})
	_f(
		'(This is a pen.)',
		'(ディス イズ ア ペン.)',
		'(<ruby>This<rp>(</rp><rt>ディス</rt><rp>)</rp></ruby> <ruby>is<rp>(</rp><rt>イズ</rt><rp>)</rp></ruby> <ruby>a<rp>(</rp><rt>ア</rt><rp>)</rp></ruby> <ruby>pen<rp>(</rp><rt>ペン</rt><rp>)</rp></ruby>.)')
	_f(
		'[This is a pen.]',
		'[ディス イズ ア ペン.]',
		'[<ruby>This<rp>(</rp><rt>ディス</rt><rp>)</rp></ruby><ruby>is<rp>(</rp><rt>イズ</rt><rp>)</rp></ruby><ruby>a<rp>(</rp><rt>ア</rt><rp>)</rp></ruby><ruby>pen<rp>(</rp><rt>ペン</rt><rp>)</rp></ruby>.]',
		{space = 'none'})
	_f(
		'(This is %a% pen.)',
		'(ディス イズ %[[ア]]% ペン.)',
		'(<ruby>This<rp>(</rp><rt>ディス</rt><rp>)</rp></ruby> <ruby>is<rp>(</rp><rt>イズ</rt><rp>)</rp></ruby> <ruby>a<rp>(</rp><rt>[[ア|ア]]</rt><rp>)</rp></ruby> <ruby>pen<rp>(</rp><rt>ペン</rt><rp>)</rp></ruby>.)',
		{allow_ruby_link = true})
	_f(
		'自業自得',
		'You [[deserve]] it',
		'<ruby>自業自得<rp>(</rp><rt>You [[deserve|deserve]] it</rt><rp>)</rp></ruby>',
		{allow_ruby_link = true})
	_f(
		'[[pun|駄洒]]落&駄[[pun|洒落]]',
		'だじゃれ&だじゃれ',
		'<ruby>[[pun|駄洒]]落<rp>(</rp><rt>だじゃれ</rt><rp>)</rp></ruby>&<ruby>駄[[pun|洒落]]<rp>(</rp><rt>だじゃれ</rt><rp>)</rp></ruby>')
	_f(
		'用ゐる',
		'もちいる',
		'<ruby>用ゐ<rp>(</rp><rt>もちい</rt><rp>)</rp></ruby>る',
		{try = 'force'})
	_f(
		'スイーツ(笑)',
		'スイーツ かっこ わらい',
		'スイーツ<ruby>(笑)<rp>(</rp><rt>かっこわらい</rt><rp>)</rp></ruby>',
		{try = 'force'})
	_f(
		'阿  呆',
		'阿 b呆',
		'阿<ruby><rp>(</rp><rt>b</rt><rp>)</rp></ruby>呆',
		{try = 'force'})
	_f(
		'[[speech|喋る]][[marionette|人%形]]',
		'しゃべる にん%ぎょう',
		'<ruby>[[speech|喋]]<rp>(</rp><rt>しゃべ</rt><rp>)</rp></ruby>[[speech|る]]<ruby>[[marionette|人]]<rp>(</rp><rt>にん</rt><rp>)</rp></ruby><ruby>[[marionette|形]]<rp>(</rp><rt>ぎょう</rt><rp>)</rp></ruby>',
		{break_link = true})
	_ff(table.concat({
		'apple[b[[alpha|a]]]([[beta|β]]α)nana',
		'apple[[banana|[ba](βα)nana]]',
		'apple[[[banana|ba]]]([[beta|β]]α)[[banana|nana]]',
	}, ', '), table.concat({
		'apple<ruby>b[[alpha|a]]<rp>(</rp><rt>[[beta|β]]α</rt><rp>)</rp></ruby>nana',
		'apple[[banana|<ruby>ba<rp>(</rp><rt>βα</rt><rp>)</rp></ruby>nana]]',
		'apple<ruby>[[banana|ba]]<rp>(</rp><rt>[[beta|β]]α</rt><rp>)</rp></ruby>[[banana|nana]]',
	}, ', '))
	_f3({
		markup = 'Apple[[[banana](Citrus)]]',
		target = 'markup',
		options = {break_link = true}
	}, 'Apple[[[banana|banana]]](Citrus)')
end

return {show = function(frame) return t:run(frame) end}
"https://si.wiktionary.org/w/index.php?title=Module:ja-ruby/testcases&oldid=36645" වෙතින් සම්ප්‍රවේශනය කෙරිණි