You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
7.6 KiB
281 lines
7.6 KiB
--[[
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// date : 2013-5-4
|
|
// auth : macroli(idehong@gmail.com)
|
|
// ver : 0.3
|
|
// desc : output
|
|
//////////////////////////////////////////////////////////////////////////
|
|
--]]
|
|
------------------------------------------------------------------------------
|
|
|
|
--module(..., package.seeall)
|
|
|
|
-- for test output
|
|
local TestOutPutBase = {}
|
|
function TestOutPutBase:new(oo)
|
|
local o = oo or {}
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
function TestOutPutBase.FilterInfo(self, ...)
|
|
end
|
|
|
|
function TestOutPutBase.BeginCase(self, strLabelName)
|
|
end
|
|
|
|
function TestOutPutBase.EndCase(self, bRun, bSuccess, iTime, strLabelName)
|
|
end
|
|
|
|
function TestOutPutBase.BeginSuite(self, iNumber, strSuiteName)
|
|
end
|
|
|
|
function TestOutPutBase.EndSuite(self, iNumber, strSuiteName, iTime, iFailedNum)
|
|
end
|
|
|
|
function TestOutPutBase.BeginGroupSuite(self, iCaseNum, iSuiteNum)
|
|
end
|
|
|
|
function TestOutPutBase.EndGroupSuite(self, iCaseNum, iSuiteNum, iTime, iFailedNum, iStartTime)
|
|
end
|
|
|
|
function TestOutPutBase.BeginGroupEnv(self, strTip)
|
|
end
|
|
|
|
function TestOutPutBase.EndGroupEnv(self, strTip)
|
|
end
|
|
|
|
function TestOutPutBase.FailedTxt(self, ...)
|
|
end
|
|
|
|
function TestOutPutBase.StaticInfo(self)
|
|
end
|
|
|
|
function TestOutPutBase.GetStaticInfo(self)
|
|
end
|
|
|
|
function TestOutPutBase.Message(self, ...)
|
|
print( self:mergerTxt(...) )
|
|
end
|
|
|
|
function TestOutPutBase.mergerTxt(self, ...)
|
|
return string.format(...)
|
|
end
|
|
|
|
|
|
-- for test output
|
|
CmdTestOutPut = TestOutPutBase:new()
|
|
function CmdTestOutPut:new(oo)
|
|
local o = oo or {}
|
|
o.output = {
|
|
labelNum = 10,
|
|
fmt = { left = "[%-10s]", right = "[%10s]", },
|
|
label = { run = {label=" RUN", fmt="left",}, ok = {label="OK ", fmt="right",}, failed = {label=" FAILED", fmt="left",},
|
|
passed = {label=" PASSED", fmt="left",},
|
|
split = {label="----------", fmt="right",},
|
|
group = {label="==========", fmt="right",},
|
|
},
|
|
}
|
|
o.stat = {
|
|
iTotalCase = 0, iTotalSuite = 0, iTotalPassed = 0,
|
|
tFailedName = {},
|
|
iCurrCaseCount = 0,
|
|
}
|
|
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
function CmdTestOutPut.outerList(self, strFun, ...)
|
|
if not self.outer then return end
|
|
|
|
for i, v in pairs(self.outer) do
|
|
v[strFun](v, ...)
|
|
end
|
|
end
|
|
|
|
function CmdTestOutPut.FilterInfo(self, ...)
|
|
self:Message(...)
|
|
|
|
self:outerList("FilterInfo", ...)
|
|
end
|
|
|
|
function CmdTestOutPut.BeginCase(self, strLabelName)
|
|
self.stat.iCurrCaseCount = 1 + self.stat.iCurrCaseCount
|
|
self:Message("%s %s", self:getFMTStr("run", string.format(" %d%%", math.floor(self.stat.iCurrCaseCount*100/self.stat.iTotalCase))), strLabelName)
|
|
|
|
self:outerList("BeginCase", strLabelName)
|
|
end
|
|
|
|
function CmdTestOutPut.EndCase(self, bRun, bSuccess, iTime, strLabelName)
|
|
if not bRun then return end
|
|
|
|
if bSuccess then
|
|
self.stat.iTotalPassed = 1 + self.stat.iTotalPassed
|
|
self:Message("%s %s (%f ms)", self:getFMTStr("ok"), strLabelName, iTime)
|
|
else
|
|
table.insert(self.stat.tFailedName, strLabelName)
|
|
self:Message("%s %s (%f ms)", self:getFMTStr("failed"), strLabelName, iTime)
|
|
end
|
|
|
|
self:outerList("EndCase", bRun, bSuccess, iTime, strLabelName)
|
|
end
|
|
|
|
function CmdTestOutPut.BeginSuite(self, iNumber, strSuiteName)
|
|
self:Message("%s %d tests from %s.", self:getFMTStr("split"), iNumber, strSuiteName)
|
|
|
|
self:outerList("BeginSuite", iNumber, strSuiteName)
|
|
end
|
|
|
|
function CmdTestOutPut.EndSuite(self, iNumber, strSuiteName, iTime, iFailedNum)
|
|
self:Message("%s %d tests from %s (%f ms total).\n", self:getFMTStr("split"), iNumber, strSuiteName, iTime)
|
|
|
|
self:outerList("EndSuite", iNumber, strSuiteName, iTime, iFailedNum)
|
|
end
|
|
|
|
function CmdTestOutPut.BeginGroupSuite(self, iCaseNum, iSuiteNum)
|
|
self.stat = {
|
|
iTotalCase = iCaseNum, iTotalSuite = iSuiteNum, iTotalPassed = 0,
|
|
tFailedName = {},
|
|
iCurrCaseCount = 0,
|
|
}
|
|
|
|
self:Message("%s Running %d tests from %d test cases", self:getFMTStr("group"), iCaseNum, iSuiteNum)
|
|
|
|
self:outerList("BeginGroupSuite", iCaseNum, iSuiteNum)
|
|
end
|
|
|
|
function CmdTestOutPut.EndGroupSuite(self, iTime)
|
|
self:Message("%s Running %d tests from %d test cases ran. (%f ms total)", self:getFMTStr("group"), self.stat.iTotalCase, self.stat.iTotalSuite, iTime)
|
|
|
|
self:outerList("EndGroupSuite", iTime)
|
|
end
|
|
|
|
function CmdTestOutPut.BeginGroupEnv(self)
|
|
self:Message("%s Global test environment set-up.", self:getFMTStr("split"))
|
|
end
|
|
|
|
function CmdTestOutPut.EndGroupEnv(self)
|
|
self:Message("%s Global test environment tear-down.", self:getFMTStr("split"))
|
|
end
|
|
|
|
function CmdTestOutPut.FailedTxt(self, ...)
|
|
self:Message(...)
|
|
|
|
self:outerList("FailedTxt", ...)
|
|
end
|
|
|
|
function TestOutPutBase.Message(self, ...)
|
|
if not self.silence then print( self:mergerTxt(...) ) end
|
|
end
|
|
|
|
function CmdTestOutPut.StaticInfo(self)
|
|
self:Message("%s %d tests.", self:getFMTStr("passed"), self.stat.iTotalPassed)
|
|
|
|
local iFailedNum = #self.stat.tFailedName
|
|
if iFailedNum <= 0 then return end
|
|
self:Message("%s %d tests, listed below:", self:getFMTStr("failed"), iFailedNum)
|
|
for k, v in pairs(self.stat.tFailedName) do
|
|
self:Message("%s %s", self:getFMTStr("failed"), v)
|
|
end
|
|
|
|
self:outerList("StaticInfo")
|
|
|
|
error(string.format("%d SUITES, %d TESTS, %d FAILED", self.stat.iTotalSuite, self.stat.iTotalCase, iFailedNum))
|
|
end
|
|
|
|
|
|
function CmdTestOutPut.GetStaticInfo(self)
|
|
local iFailedNum = #self.stat.tFailedName
|
|
return {iTotalSuite=self.stat.iTotalSuite, iTotalCase=self.stat.iTotalCase, iFailedNum=iFailedNum}
|
|
end
|
|
|
|
function CmdTestOutPut.getFMTStr(self, label, addvalue)
|
|
local tObj = self.output.label[label]
|
|
if addvalue then
|
|
return string.format(self.output.fmt[tObj.fmt], tObj.label .. addvalue)
|
|
else
|
|
return string.format(self.output.fmt[tObj.fmt], tObj.label)
|
|
end
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
CAllCaseListOutPut = TestOutPutBase:new()
|
|
function CAllCaseListOutPut:new(oo)
|
|
local o = oo or {}
|
|
o.data = {f=false}
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
function CAllCaseListOutPut.BeginCase(self, strLabelName)
|
|
self:Message(strLabelName)
|
|
end
|
|
|
|
function CAllCaseListOutPut.EndSuite(self, iNumber, strSuiteName, iTime, iFailedNum)
|
|
if self.data.f then self.data.f:flush() end
|
|
end
|
|
|
|
function CAllCaseListOutPut.BeginGroupSuite(self, iCaseNum, iSuiteNum)
|
|
f = io.open(self.filename, "w+b")
|
|
if not f then return end
|
|
self.data.f = f
|
|
end
|
|
|
|
function CAllCaseListOutPut.EndGroupSuite(self, iCaseNum, iSuiteNum, iTime, iFailedNum, iStartTime)
|
|
if self.data.f then
|
|
self.data.f:close()
|
|
self.data.f = false
|
|
end
|
|
end
|
|
|
|
function CAllCaseListOutPut.Message(self, ...)
|
|
if self.data.f then self.data.f:write(self:mergerTxt(...) .. "\r\n") end
|
|
end
|
|
|
|
|
|
CFailedCaseListOutPut = TestOutPutBase:new()
|
|
function CFailedCaseListOutPut:new(oo)
|
|
local o = oo or {}
|
|
o.data = {f=false}
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
function CFailedCaseListOutPut.EndCase(self, bRun, bSuccess, iTime, strLabelName)
|
|
if bRun and not bSuccess then
|
|
self:Message(strLabelName .. "\r\n\r\n")
|
|
end
|
|
end
|
|
|
|
function CFailedCaseListOutPut.EndSuite(self, iNumber, strSuiteName, iTime, iFailedNum)
|
|
if self.data.f then self.data.f:flush() end
|
|
end
|
|
|
|
function CFailedCaseListOutPut.BeginGroupSuite(self, iCaseNum, iSuiteNum)
|
|
f = io.open(self.filename, "w+b")
|
|
if not f then return end
|
|
self.data.f = f
|
|
end
|
|
|
|
function CFailedCaseListOutPut.EndGroupSuite(self, iCaseNum, iSuiteNum, iTime, iFailedNum, iStartTime)
|
|
if self.data.f then
|
|
self.data.f:close()
|
|
self.data.f = false
|
|
end
|
|
end
|
|
|
|
function CFailedCaseListOutPut.FailedTxt(self, ...)
|
|
self:Message(...)
|
|
end
|
|
|
|
|
|
function CFailedCaseListOutPut.Message(self, ...)
|
|
if self.data.f then self.data.f:write(self:mergerTxt(...) .. "\r\n") end
|
|
end
|
|
|
|
|