;+ ; Report a test suite has begun. ; ; @param testsuite {in}{required}{type=string} name of test suite ; @keyword ntestcases {in}{required}{type=integer} number of test suites/cases ; contained by the test suite ; @keyword ntests {in}{required}{type=integer} number of tests contained in the ; hierarchy below this test suite ; @keyword level {in}{required}{type=level} level of test suite ;- pro mgtestclirunner::reportTestSuiteStart, testsuite, $ ntestcases=ntestcases, $ ntests=ntests, $ level=level compile_opt strictarr indent = level eq 0 ? '' : string(bytarr(level * self.indent) + self.space) printf, self.logLun, $ indent + 'Starting test suite ' + testsuite $ + ' (' $ + strtrim(ntestcases, 2) + ' test case' $ + (ntestcases eq 1 ? '' : 's') $ + ', ' $ + strtrim(ntests, 2) + ' test' + (ntests eq 1 ? '' : 's') $ + ')' end ;+ ; Report the results of a test suite. ; ; @keyword npass {in}{required}{type=integer} ; number of passing tests contained in the hierarchy below the test ; suite ; @keyword nfail {in}{required}{type=integer} ; number of failing tests contained in the hierarchy below the test ; suite ; @keyword level {in}{required}{type=integer} ; level of test suite ;- pro mgtestclirunner::reportTestSuiteResult, npass=npass, nfail=nfail, level=level compile_opt strictarr indent = string(bytarr((level + 1L) * self.indent) + self.space) printf, self.logLun, $ indent + 'Results: ' $ + strtrim(npass, 2) + ' / ' + strtrim(npass + nfail, 2) $ + ' tests passed' end ;+ ; Report a test case has begun. ; ; @param testcase {in}{required}{type=string} name of test case ; @keyword ntests {in}{required}{type=integer} number of tests contained in this ; test case ; @keyword level {in}{required}{type=level} level of test case ;- pro mgtestclirunner::reportTestCaseStart, testcase, ntests=ntests, level=level compile_opt strictarr indent = string(bytarr(level * self.indent) + self.space) printf, self.logLun, $ indent + 'Starting ' + testcase $ + ' (' + strtrim(ntests, 2) + ' test' + (ntests eq 1 ? '' : 's') + ')' end ;+ ; Report the results of a test case. ; ; @keyword npass {in}{required}{type=integer} number of passing tests ; @keyword nfail {in}{required}{type=integer} number of failing tests ; @keyword level {in}{required}{type=integer} level of test case ;- pro mgtestclirunner::reportTestCaseResult, npass=npass, nfail=nfail, level=level compile_opt strictarr indent = string(bytarr((level + 1L) * self.indent) + self.space) printf, self.logLun, $ indent + 'Results: ' $ + strtrim(npass, 2) + ' / ' + strtrim(npass + nfail, 2) $ + ' tests passed' end ;+ ; Report the start of single test. ; ; @param testname {in}{required}{type=string} name of test ; @keyword level {in}{required}{type=integer} level of test case ;- pro mgtestclirunner::reportTestStart, testname, level=level compile_opt strictarr indent = string(bytarr((level + 1L) * self.indent) + self.space) printf, self.logLun, indent + testname + ': ', format='(A, $)' end ;+ ; Report the result of a single test. ; ; @param msg {in}{required}{type=string} message to display when test fails ; @keyword passed {in}{required}{type=boolean} whether the test passed ;- pro mgtestclirunner::reportTestResult, msg, passed=passed compile_opt strictarr printf, self.logLun, (passed ? 'passed' : 'failed "' + msg + '"') end ;+ ; Free resources. ;- pro mgtestclirunner::cleanup compile_opt strictarr if (self.logLun gt 0) then free_lun, self.logLun self->mgtestrunner::cleanup !quiet = 0 end ;+ ; Initialize the test runner. ; ; @returns 1 for success, 0 for failure ; @keyword log_file {in}{optional}{type=string} if present, output is sent to ; that file, otherwise output is sent to stdout ;- function mgtestclirunner::init, log_file=logFile compile_opt strictarr if (~self->mgtestrunner::init()) then return, 0B if (n_elements(logFile) gt 0) then begin logDir = file_dirname(logFile) if (~file_test(logDir)) then file_mkdir, logDir endif if (n_elements(logFile) gt 0) then begin openw, logLun, logFile, /get_lun self.logLun = logLun endif else begin self.logLun = -1L endelse self.indent = 3L self.space = (byte(' '))[0] !quiet = 1 return, 1B end ;+ ; Define member variables. ; ; @file_comments Results for tests, test cases, and test suites are reported to ; the test runner. The MGtestCliRunner displays the results in ; the output log or in a log file. ; ; @field logLun the logical unit number to send output to (-1L by default) ; @field indent number of spaces a single indent should be ; @field space byte value of the space character ;- pro mgtestclirunner__define compile_opt strictarr define = { MGtestCliRunner, inherits MGtestRunner, $ logLun : 0L, $ indent : 0L, $ space : 0B $ } end