Module:AffectionTest
Appearance
Documentation for this module may be created at Module:AffectionTest/doc
local p = {}
-- 测试好感度系统的各种功能
function p.runTests()
local results = {}
local passCount = 0
local failCount = 0
-- 辅助函数:添加测试结果
local function addResult(name, passed, message)
table.insert(results, {
name = name,
passed = passed,
message = message or ""
})
if passed then
passCount = passCount + 1
else
failCount = failCount + 1
end
end
-- 测试1:等级判断
local affection = require('Module:Affection')
-- 创建模拟frame
local function makeFrame(value)
return {
args = {[1] = tostring(value)}
}
end
-- 测试等级名称
local level10 = affection.getLevelName(makeFrame(10))
addResult("等级测试:10分", level10 == "陌生", "期望'陌生',得到'" .. level10 .. "'")
local level30 = affection.getLevelName(makeFrame(30))
addResult("等级测试:30分", level30 == "认识", "期望'认识',得到'" .. level30 .. "'")
local level50 = affection.getLevelName(makeFrame(50))
addResult("等级测试:50分", level50 == "友好", "期望'友好',得到'" .. level50 .. "'")
local level70 = affection.getLevelName(makeFrame(70))
addResult("等级测试:70分", level70 == "亲密", "期望'亲密',得到'" .. level70 .. "'")
local level90 = affection.getLevelName(makeFrame(90))
addResult("等级测试:90分", level90 == "喜欢", "期望'喜欢',得到'" .. level90 .. "'")
local level100 = affection.getLevelName(makeFrame(100))
addResult("等级测试:100分", level100 == "热恋", "期望'热恋',得到'" .. level100 .. "'")
-- 测试等级图标
local icon10 = affection.getLevelIcon(makeFrame(10))
addResult("图标测试:10分", icon10 == "💔", "期望'💔',得到'" .. icon10 .. "'")
local icon100 = affection.getLevelIcon(makeFrame(100))
addResult("图标测试:100分", icon100 == "❤️", "期望'❤️',得到'" .. icon100 .. "'")
-- 测试计算功能
local calcFrame = {
args = {
current = "50",
change = "15"
}
}
local newValue = affection.calculate(calcFrame)
addResult("计算测试:50+15", newValue == "65", "期望'65',得到'" .. newValue .. "'")
-- 测试超出上限
local maxFrame = {
args = {
current = "95",
change = "20",
max = "100"
}
}
local maxValue = affection.calculate(maxFrame)
addResult("上限测试:95+20", maxValue == "100", "期望'100'(已达上限),得到'" .. maxValue .. "'")
-- 测试低于下限
local minFrame = {
args = {
current = "10",
change = "-20"
}
}
local minValue = affection.calculate(minFrame)
addResult("下限测试:10-20", minValue == "0", "期望'0'(已达下限),得到'" .. minValue .. "'")
-- 生成测试报告
local html = mw.html.create('div')
:css('max-width', '800px')
:css('margin', '20px auto')
:css('padding', '20px')
:css('background', 'linear-gradient(135deg, #f0f8ff 0%, #e6f3ff 100%)')
:css('border-radius', '15px')
-- 标题
html:tag('div')
:css('font-size', '24px')
:css('font-weight', 'bold')
:css('color', '#0088cc')
:css('margin-bottom', '20px')
:css('text-align', 'center')
:wikitext('🧪 好感度系统测试报告')
-- 统计信息
local stats = html:tag('div')
:css('margin', '20px 0')
:css('padding', '15px')
:css('background', 'white')
:css('border-radius', '10px')
:css('text-align', 'center')
stats:tag('span')
:css('color', '#00aa00')
:css('font-weight', 'bold')
:css('font-size', '18px')
:css('margin-right', '20px')
:wikitext('✓ 通过: ' .. passCount)
stats:tag('span')
:css('color', '#aa0000')
:css('font-weight', 'bold')
:css('font-size', '18px')
:wikitext('✗ 失败: ' .. failCount)
-- 测试结果列表
for _, result in ipairs(results) do
local resultDiv = html:tag('div')
:css('margin', '10px 0')
:css('padding', '12px')
:css('background', 'white')
:css('border-radius', '8px')
:css('border-left', '4px solid ' .. (result.passed and '#00aa00' or '#aa0000'))
resultDiv:tag('span')
:css('font-weight', 'bold')
:css('color', result.passed and '#00aa00' or '#aa0000')
:wikitext((result.passed and '✓' or '✗') .. ' ')
resultDiv:tag('span')
:css('font-weight', 'bold')
:wikitext(result.name)
if result.message ~= "" then
resultDiv:tag('div')
:css('color', '#666')
:css('font-size', '14px')
:css('margin-top', '5px')
:wikitext(result.message)
end
end
return tostring(html)
end
return p