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}