test_all.lua
Verified
Added by iNTERFACEWARE
Test a script against all the sample messages loaded for the component
Source Code
--[[ test_all - a simple module which allows you to test your translator scripts with all sample messages simultaneously. test_all.run(MainFunction, OutputDirectory, Extension) will run MainFunction with each sample message, and put the results NOTE: Extension defaults to ".txt" (if not specified) into: <iguana_working_dir>/test_all/OutputDirectory/<sample_message_index>.Extension The results will either be the first return value of MainFunction, or an error message if MainFunction encountered an error. Example usage: function main(Data) -- uncomment one of these lines whenever you wish to run RealMain() -- on each sample message. --test_all.run(RealMain, 'Before my changes') --test_all.run(RealMain, 'After my changes') RealMain(Data) end function RealMain(Data) -- Insert your "real main function" here. return "Whatever you want to be put in the files" end Warning: depends on knowledge of how sample data is stored in Iguana. Additional warning: uses some API calls that may not be present in older versions of Iguana. --]] local function trace(a,b,c,d) return end local test_all = {} local function sampleDataDbPath() return iguana.workingDir()..'data/'..iguana.project.guid()..'.db' end local function ensureDirExists(Dir) os.execute('mkdir '..Dir) end function test_all.run(MainFunction, OutputDirectory, Extension) assert(iguana.project) Extension = Extension or 'txt' local conn = db.connect{api=db.SQLITE, name=sampleDataDbPath()} local SampleData = conn:query('SELECT Message FROM Log') ensureDirExists('"test_all/'..OutputDirectory..'"') for i=1,#SampleData do local Message = SampleData[i].Message:nodeValue() local Status, Result = pcall(MainFunction, Message) local OutFilePath = 'test_all/'..OutputDirectory..'/'..tostring(i)..'.'..Extension local OutFile = io.open(OutFilePath, 'w+') OutFile:write(Result) OutFile:close() end end return test_all
Description
Test a script against all the sample messages loaded for the component
Attachments
Usage Details
Ever wanted to “batch-test” a script against many sample messages?
This is a simple module that can be used to run your script for every sample message in the project. The current behaviour is to put the output (or error message) into a file, one per sample message. You are then free to examine (and diff) the files as you please. The module code is thoroughly commented.
How to use test_all.lua:
- Use a Filter or To Translator component
- Create a test_all module and paste in the code
Note: You can also load the attached project zip - Load the sample messages from the attached SampleData.txt file
Note: The project already contains the sample messages - Create a
realMain()
function to replacemain()
Note: We suggest changing this tomain()
and removing the test code for release - Use
test_all.run()
in the main() function to runrealMain()
- Examine the code, comments and annotations to see how it works
Here is some sample code:
local test_all = require 'test_all' function main(Data) -- uncomment one of these lines whenever you wish to run RealMain() -- on each sample message. -- the results are stored in a single file for each message: -- <iguana_working_dir>/test_all/OutputDirectory/<sample_message_index>.Extension -- NOTE: Extension defaults to ".txt" (if not specified) test_all.run(realMain, 'Before my changes') -- OutputDirectory = "Before my changes" test_all.run(realMain, 'After my changes', 'test') -- Extension = "test" realMain(Data) end function realMain(Data) -- Insert your "real main function" here. return "Whatever you want to be put in the files" end
More Information