模組:PrevalenceData/testcases
閱讀設定
呢個係模組模組:PrevalenceData嘅試例結果。 |
-- vi:set sw=4 ts=4 ai sm:
---- 呢啲測試只係 「盡人事」,原因係被測試嘅模組用維基數據,所以冇可能知道結果係乜;
---- 呢度用嘅預期嘅正確結果目前係基於2024年10月25號嘅維基數據。
----
---- 正確嘅測試方法係諗辦法模擬維基數據,然後整一啲假嘅數據淨係用嚟做測試,
---- 等我哋可以控制 「預期嘅正確結果」;做呢樣嘢應該超出咗粵維嘅有限資源。
----
---- 用法一,適用於加/改 test case:
---- p.test(require('模組:PrevalenceData'))
----
---- 用法二,適用於改模:
---- 喺模組:PrevalenceData 嗰陣:p.test()
---- 嗰便模組嘅 test 函數應該咁定義:
---- p.test = function ()
---- local q = require('模組:PrevalenceData/testcases');
---- return q.test(p);
---- end
----
---- 人手 「測試」 方法:
---- PrevalenceData 輸出可以人手睇,方法係喺 PrevalenceData 撳 「改」,然後喺下面 Debug console 打:
----
---- print(p.main({args={qId='維基數據號碼'}}))
----
---- 注意:
---- 1. 參數名係 qId,唔係 qid。
---- 2. 空白參數測試唔到,會喺系統底層產生錯誤錯息,連 pcall 都 trap 唔到。
require 'strict';
local p = {};
--- 內部輔助函數
-- 剷走追蹤分類
local function strip_cats (s)
return mw.ustring.gsub(s, '%[%[Category:[^%[%]]+%]%]', '');
end
local function strip_refs (s)
return mw.ustring.gsub(s, '<ref[^<>]*>.-</ref>', '');
end
local function strip_all_metadata (s)
return strip_refs(strip_cats(s))
end
-- 入口:測試函數
-- PrevalenceData 冇用 parent frame、CSS 等等,唔使模擬呢啲,淨係畀 args 已經足夠
p.test = function (p)
local a, b;
-- 測試自嘅嘅輔助函數
assert(strip_cats('a') == 'a');
assert(strip_cats('a[[Category:foo]]') == 'a');
assert(strip_cats('a[[Category]]') == 'a[[Category]]');
assert(strip_all_metadata('a') == 'a');
assert(strip_all_metadata('a[[Category:foo]]') == 'a');
assert(strip_all_metadata('a[[Category]]') == 'a[[Category]]');
-- 已知:唔畀參數唔會 crash,出空字串
a, b = pcall(p.main, { args = {
-- 冇參數
}});
assert(a);
assert(type(b) == 'string');
assert(#b == 0);
-- 已知:畀嘅參數唔係病
-- 正確輸出應該係空字串
a, b = pcall(p.main, { args = {
qId = 'Q12375546';
}});
assert(a);
assert(type(b) == 'string');
assert(#b == 0);
-- 模組源碼用 Q133087 做例,原模組用 「to」 同夾硬(hard code)用英文 override,唔應該有 override
-- 喺2024年10月25號原輸出 「1 to 2% ([[已發展國家|developed world]])」
-- 正確輸出應該做咗本地化
a, b = pcall(p.main, { args = {
qId = 'Q133087';
}});
assert(a);
assert(type(b) == 'string');
assert(mw.ustring.match(strip_all_metadata(b), '^%d+-%d+%%(%[%[已發展國家%]%])$'));
-- 維基數據 Property:P1193 畀 Q190564 做例,實際上模組會出空字串
-- 正確輸出應該有嘢
a, b = pcall(p.main, { args = {
qId = 'Q190564';
}});
assert(a);
assert(type(b) == 'string');
assert(mw.ustring.match(strip_refs(b), '^%d%.%d+%%(%[%[英國%]%])$'));
-- Q12202,2024年10月25號輸出 「0.24%([[法國]]), 0.6%([[新西伯利亞]])」
-- 正確輸出應該用頓號
a, b = pcall(p.main, { args = {
qId = 'Q12202';
}});
assert(a);
assert(type(b) == 'string');
assert(mw.ustring.match(strip_all_metadata(b), '^%d%.%d+%%(.-、.-)$'));
--(維基數據 Property:P1193 畀嘅第二個例 Q1648484,實際上喺維基數據唔係咁寫,用唔到嚟做 test case)
-- Q219223,2024年10月25號輸出 「65%、10%」
-- 正確輸出應該兩個數都有括弧
a, b = pcall(p.main, { args = {
qId = 'Q219223';
}});
assert(a);
assert(type(b) == 'string');
b = strip_all_metadata(b);
assert(not mw.ustring.match(strip_all_metadata(b), '%%$') and not mw.ustring.match(b, '%%、'));
-- Q12204,2024年10月25號輸出 「0.043-0.045%([[蘇里南]])、0.00033-0.00053%([[冰島]])、0.077-0.079%([[厄瓜多爾]])、-0.99-1.01%([[挪威]])、-0.00088-0.00112%([[法國]])、0.0029%([[美國]])、0.0028%」
-- 正確輸出應該全部數都有括弧同唔應該有負數
a, b = pcall(p.main, { args = {
qId = 'Q12204';
}});
assert(a);
assert(type(b) == 'string');
b = strip_all_metadata(b);
-- subtest A 唔應該有負數
assert(not mw.ustring.match(b, '^%-%d') and not mw.ustring.match(b, '、%-%d'));
-- subtest B 唔應該有冇括弧嘅數值
assert(not mw.ustring.match(b, '%%$') and not mw.ustring.match(b, '%%、'));
-- Q267602,2024年10月26號輸出 「0.05%、0.01%」,最大值同最細值用咗 P1480=Q10578722、Q10585806 表示
-- 暫時當應該加入追蹤類
a, b = pcall(p.main, { args = {
qId = 'Q267602';
}});
assert(a);
assert(type(b) == 'string');
assert(mw.ustring.match(b, '未知修飾子'));
-- Q1022718,2024年10月26號輸出 「0.00198%、0.005%」
-- 應該加入追蹤類
a, b = pcall(p.main, { args = {
qId = 'Q1022718';
}});
assert(a);
assert(type(b) == 'string');
assert(mw.ustring.match(b, '多過一個冇括弧數值'));
end
return p;