fbpx
วิกิพีเดีย

มอดูล:UnitTests

คู่มือการใช้งานมอดูล[ดู] [แก้] [ประวัติ] [ล้างแคช]
  • {{[[Module:{{{1}}}|#invoke:{{{1}}}]]|function}}

UnitTests provides a unit test facility that can be used by other scripts using require. See Wikipedia:Lua#Unit_testing for details. Following is a sample from Module:Bananas/tests:

-- Unit tests for [[Module:Bananas]]. Click talk page to run tests. local p = require('Module:UnitTests') function p:test_hello() self:preprocess_equals('{{#invoke:Bananas | hello}}', 'Hello, world!') end return p 

The talk page Module talk:Bananas/tests executes it with {{#invoke: Bananas/tests | run_tests}}. Test methods like test_hello above must begin with "test".

Methods

  • run_tests(differs_at): Runs all tests. If "differs_at=1" is specified, a column will be added showing the first character position where the expected and actual results differ. Normally used on talk page of unit tests.
 {{#invoke:Bananas/tests|run_tests}} 
  • preprocess_equals(text, expected): Gives a piece of wikitext to preprocess and an expected resulting value. Scripts and templates can be invoked in the same manner they would be in a page.
 self:preprocess_equals('{{#invoke:Bananas | hello}}', 'Hello, world!') 
  • preprocess_equals_many(prefix, suffix, cases): Performs a series of preprocess_equals() calls on a set of given pairs. Automatically adds the given prefix and suffix to each text.
 self:preprocess_equals_many('{{#invoke:BananasArgs | add |', '}}', { {'2|3', '5'}, {'-2|2', '0'}, }) 
  • preprocess_equals_preprocess(text, expected): Gives two pieces of wikitext to preprocess and determines if they produce the same value. Useful for comparing scripts to existing templates.
 self:preprocess_equals_preprocess('{{#invoke:Bananas | hello}}', '{{Hello}}') 
  • preprocess_equals_preprocess_many(prefix, suffix, cases): Performs a series of preprocess_equals_preprocess() calls on a set of given pairs. The prefix/suffix supplied for both arguments is added automatically. If in any case the second part is not specified, the first part will be used.
 self:preprocess_equals_many('{{#invoke:Foo | spellnum |', '}}', '{{spellnum', '}}', { {'2'}, -- equivalent to {'2','2'}, {'-2', '-2.0'}, }) 
  • equals(name, actual, expected): Gives a computed value and the expected value, and checks if they are equal. Useful for testing modules that are designed to be used by other modules rather than using #invoke.
 self:equals('Simple addition', 2 + 2, 4) 

-- UnitTester provides unit testing for other Lua scripts. For details see [[Wikipedia:Lua#Unit_testing]]. -- For user documentation see talk page. local UnitTester = {}  local frame, tick, cross local result_table_header = "{|class=\"wikitable\"\n! !! Text !! Expected !! Actual" local result_table = '' local num_failures = 0  function first_difference(s1, s2)  if s1 == s2 then return '' end  local max = math.min(#s1, #s2)  for i = 1, max do  if s1:sub(i,i) ~= s2:sub(i,i) then return i end  end  return max + 1 end  function UnitTester:preprocess_equals(text, expected, options)  local actual = frame:preprocess(text)  if actual == expected then  result_table = result_table .. '| ' .. tick  else  result_table = result_table .. '| ' .. cross  num_failures = num_failures + 1  end  local maybe_nowiki = (options and options.nowiki) and mw.text.nowiki or function(...) return ... end  local differs_at = self.differs_at and (' \n| ' .. first_difference(expected, actual)) or ''  result_table = result_table .. ' \n| ' .. mw.text.nowiki(text) .. ' \n| ' .. maybe_nowiki(expected) .. ' \n| ' .. maybe_nowiki(actual) .. differs_at .. "\n|-\n" end  function UnitTester:preprocess_equals_many(prefix, suffix, cases, options)  for _, case in ipairs(cases) do  self:preprocess_equals(prefix .. case[1] .. suffix, case[2], options)  end end  function UnitTester:preprocess_equals_preprocess(text1, text2, options)  local actual = frame:preprocess(text1)  local expected = frame:preprocess(text2)  if actual == expected then  result_table = result_table .. '| ' .. tick  else  result_table = result_table .. '| ' .. cross  num_failures = num_failures + 1  end  local maybe_nowiki = (options and options.nowiki) and mw.text.nowiki or function(...) return ... end  local differs_at = self.differs_at and (' \n| ' .. first_difference(expected, actual)) or ''  result_table = result_table .. ' \n| ' .. mw.text.nowiki(text1) .. ' \n| ' .. maybe_nowiki(expected) .. ' \n| ' .. maybe_nowiki(actual) .. differs_at .. "\n|-\n" end  function UnitTester:preprocess_equals_preprocess_many(prefix1, suffix1, prefix2, suffix2, cases, options)  for _, case in ipairs(cases) do  self:preprocess_equals_preprocess(prefix1 .. case[1] .. suffix1, prefix2 .. (case[2] and case[2] or case[1]) .. suffix2, options)  end end  function UnitTester:equals(name, actual, expected, options)  if actual == expected then  result_table = result_table .. '| ' .. tick  else  result_table = result_table .. '| ' .. cross  num_failures = num_failures + 1  end  local maybe_nowiki = (options and options.nowiki) and mw.text.nowiki or function(...) return ... end  local differs_at = self.differs_at and (' \n| ' .. first_difference(expected, actual)) or ''  result_table = result_table .. ' \n| ' .. name .. ' \n| ' .. maybe_nowiki(tostring(expected)) .. ' \n| ' .. maybe_nowiki(tostring(actual)) .. differs_at .. "\n|-\n" end  local function deep_compare(t1, t2, ignore_mt)  local ty1 = type(t1)  local ty2 = type(t2)  if ty1 ~= ty2 then return false end  if ty1 ~= 'table' and ty2 ~= 'table' then return t1 == t2 end   local mt = getmetatable(t1)  if not ignore_mt and mt and mt.__eq then return t1 == t2 end   for k1, v1 in pairs(t1) do  local v2 = t2[k1]  if v2 == nil or not deep_compare(v1, v2) then return false end  end  for k2, v2 in pairs(t2) do  local v1 = t1[k2]  if v1 == nil or not deep_compare(v1, v2) then return false end  end   return true end  function val_to_str(v)  if type(v) == 'string' then  v = mw.ustring.gsub(v, '\n', '\\n')  if mw.ustring.match(mw.ustring.gsub(v, '[^\'"]', ''), '^"+$') then  return "'" .. v .. "'"  end  return '"' .. mw.ustring.gsub(v, '"', '\\"' ) .. '"'  else  return type(v) == 'table' and table_to_str(v) or tostring(v)  end end  function table_key_to_str(k)  if type(k) == 'string' and mw.ustring.match(k, '^[_%a][_%a%d]*$') then  return k  else  return '[' .. val_to_str(k) .. ']'  end end  function table_to_str(tbl)  local result, done = {}, {}  for k, v in ipairs(tbl) do  table.insert(result, val_to_str(v))  done[k] = true  end  for k, v in pairs(tbl) do  if not done[k] then  table.insert(result, table_key_to_str(k) .. '=' .. val_to_str(v))  end  end  return '{' .. table.concat(result, ',') .. '}' end  function UnitTester:equals_deep(name, actual, expected, options)  if deep_compare(actual, expected) then  result_table = result_table .. '| ' .. tick  else  result_table = result_table .. '| ' .. cross  num_failures = num_failures + 1  end  local maybe_nowiki = (options and options.nowiki) and mw.text.nowiki or function(...) return ... end  local actual_str = val_to_str(actual)  local expected_str = val_to_str(expected)  local differs_at = self.differs_at and (' \n| ' .. first_difference(expected_str, actual_str)) or ''  result_table = result_table .. ' \n| ' .. name .. ' \n| ' .. maybe_nowiki(expected_str) .. ' \n| ' .. maybe_nowiki(actual_str) .. differs_at .. "\n|-\n" end  function UnitTester:run(frame_arg)  frame = frame_arg  self.frame = frame  self.differs_at = frame.args['differs_at']  tick = frame:preprocess('{{Tick}}')  cross = frame:preprocess('{{Cross}}')   local table_header = result_table_header  if self.differs_at then  table_header = table_header .. ' !! Differs at'  end   -- Sort results into alphabetical order.  local self_sorted = {}  for key,value in pairs(self) do  if key:find('^test') then  table.insert(self_sorted, key)  end  end  table.sort(self_sorted)  -- Add results to the results table.  for i,value in ipairs(self_sorted) do  result_table = result_table .. "'''" .. value .. "''':\n" .. table_header .. "\n|-\n"  self[value](self)  result_table = result_table .. "|}\n\n"  end   return (num_failures == 0 and "<font color=\"#008000\">'''All tests passed.'''</font>" or "<font color=\"#800000\">'''" .. num_failures .. " tests failed.'''</font>") .. "\n\n" .. frame:preprocess(result_table) end  function UnitTester:new()  local o = {}  setmetatable(o, self)  self.__index = self  return o end  local p = UnitTester:new() function p.run_tests(frame) return p:run(frame) end return p 

มอด, unittests, เป, นมอด, ลท, กป, องก, นถาวรเน, องจากม, ความเส, ยงส, งกร, ณาอภ, ปรายการเปล, ยนแปลงใด, ทางหน, าค, ณอาจส, งคำขอแก, ไข, ไปย, งผ, แลระบบเพ, อให, แก, ไขได, หากเป, นการแก, ไขท, ไม, การค, ดค, านหร, อม, ความเห, นพ, องสน, บสน, ณย, งสามารถขอให, เล, กป, อ. niepnmxdulthithukpxngknthawrenuxngcakmikhwamesiyngsungkrunaxphipraykarepliynaeplngid thanghnakhuy khunxacsngkhakhxaekikh ipyngphuduaelrabbephuxihaekikhidhakepnkaraekikhthiimmikarkhdkhanhruxmikhwamehnphxngsnbsnun khunyngsamarthkhxihelikpxngknhnaidkhumuxkarichnganmxdul du aek prawti langaekhch Module 1 invoke 1 function UnitTests provides a unit test facility that can be used by other scripts using require See Wikipedia Lua Unit testing for details Following is a sample from Module Bananas tests Unit tests for Module Bananas Click talk page to run tests local p require Module UnitTests function p test hello self preprocess equals invoke Bananas hello Hello world end return p The talk page Module talk Bananas tests executes it with invoke Bananas tests run tests Test methods like test hello above must begin with test Methods run tests differs at Runs all tests If differs at 1 is specified a column will be added showing the first character position where the expected and actual results differ Normally used on talk page of unit tests invoke Bananas tests run tests preprocess equals text expected Gives a piece of wikitext to preprocess and an expected resulting value Scripts and templates can be invoked in the same manner they would be in a page self preprocess equals invoke Bananas hello Hello world preprocess equals many prefix suffix cases Performs a series of preprocess equals calls on a set of given pairs Automatically adds the given prefix and suffix to each text self preprocess equals many invoke BananasArgs add 2 3 5 2 2 0 preprocess equals preprocess text expected Gives two pieces of wikitext to preprocess and determines if they produce the same value Useful for comparing scripts to existing templates self preprocess equals preprocess invoke Bananas hello Hello preprocess equals preprocess many prefix suffix cases Performs a series of preprocess equals preprocess calls on a set of given pairs The prefix suffix supplied for both arguments is added automatically If in any case the second part is not specified the first part will be used self preprocess equals many invoke Foo spellnum spellnum 2 equivalent to 2 2 2 2 0 equals name actual expected Gives a computed value and the expected value and checks if they are equal Useful for testing modules that are designed to be used by other modules rather than using invoke self equals Simple addition 2 2 4 khumuxkarichnganthipraktdanbnnidungmacak mxdul UnitTests doc aek prawti phuekhiynsamarththakarthdlxngidthikrabathray aek dukhwamaetktang aelachudthdsxb srang khxngmxdulni hnayxykhxngmxdulni UnitTester provides unit testing for other Lua scripts For details see Wikipedia Lua Unit testing For user documentation see talk page local UnitTester local frame tick cross local result table header class wikitable n Text Expected Actual local result table local num failures 0 function first difference s1 s2 if s1 s2 then return end local max math min s1 s2 for i 1 max do if s1 sub i i s2 sub i i then return i end end return max 1 end function UnitTester preprocess equals text expected options local actual frame preprocess text if actual expected then result table result table tick else result table result table cross num failures num failures 1 end local maybe nowiki options and options nowiki and mw text nowiki or function return end local differs at self differs at and n first difference expected actual or result table result table n mw text nowiki text n maybe nowiki expected n maybe nowiki actual differs at n n end function UnitTester preprocess equals many prefix suffix cases options for case in ipairs cases do self preprocess equals prefix case 1 suffix case 2 options end end function UnitTester preprocess equals preprocess text1 text2 options local actual frame preprocess text1 local expected frame preprocess text2 if actual expected then result table result table tick else result table result table cross num failures num failures 1 end local maybe nowiki options and options nowiki and mw text nowiki or function return end local differs at self differs at and n first difference expected actual or result table result table n mw text nowiki text1 n maybe nowiki expected n maybe nowiki actual differs at n n end function UnitTester preprocess equals preprocess many prefix1 suffix1 prefix2 suffix2 cases options for case in ipairs cases do self preprocess equals preprocess prefix1 case 1 suffix1 prefix2 case 2 and case 2 or case 1 suffix2 options end end function UnitTester equals name actual expected options if actual expected then result table result table tick else result table result table cross num failures num failures 1 end local maybe nowiki options and options nowiki and mw text nowiki or function return end local differs at self differs at and n first difference expected actual or result table result table n name n maybe nowiki tostring expected n maybe nowiki tostring actual differs at n n end local function deep compare t1 t2 ignore mt local ty1 type t1 local ty2 type t2 if ty1 ty2 then return false end if ty1 table and ty2 table then return t1 t2 end local mt getmetatable t1 if not ignore mt and mt and mt eq then return t1 t2 end for k1 v1 in pairs t1 do local v2 t2 k1 if v2 nil or not deep compare v1 v2 then return false end end for k2 v2 in pairs t2 do local v1 t1 k2 if v1 nil or not deep compare v1 v2 then return false end end return true end function val to str v if type v string then v mw ustring gsub v n n if mw ustring match mw ustring gsub v then return v end return mw ustring gsub v else return type v table and table to str v or tostring v end end function table key to str k if type k string and mw ustring match k a a d then return k else return val to str k end end function table to str tbl local result done for k v in ipairs tbl do table insert result val to str v done k true end for k v in pairs tbl do if not done k then table insert result table key to str k val to str v end end return table concat result end function UnitTester equals deep name actual expected options if deep compare actual expected then result table result table tick else result table result table cross num failures num failures 1 end local maybe nowiki options and options nowiki and mw text nowiki or function return end local actual str val to str actual local expected str val to str expected local differs at self differs at and n first difference expected str actual str or result table result table n name n maybe nowiki expected str n maybe nowiki actual str differs at n n end function UnitTester run frame arg frame frame arg self frame frame self differs at frame args differs at tick frame preprocess Tick cross frame preprocess Cross local table header result table header if self differs at then table header table header Differs at end Sort results into alphabetical order local self sorted for key value in pairs self do if key find test then table insert self sorted key end end table sort self sorted Add results to the results table for i value in ipairs self sorted do result table result table value n table header n n self value self result table result table n n end return num failures 0 and lt font color 008000 gt All tests passed lt font gt or lt font color 800000 gt num failures tests failed lt font gt n n frame preprocess result table end function UnitTester new local o setmetatable o self self index self return o end local p UnitTester new function p run tests frame return p run frame end return p ekhathungcak https th wikipedia org w index php title mxdul UnitTests amp oldid 5540954, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม