; docformat = 'rst'
;+
; Results for tests, test cases, and test suites are reported to the test
; runner. The `MGutXMLRunner` displays the results in the output XML file.
;
; :Private:
;-
;+
; Report a test suite has begun.
;
; :Params:
; testsuite : in, required, type=string
; name of test suite
;
; :Keywords:
; ntestcases : in, required, type=integer
; number of test suites/cases contained by the test suite
; ntests : in, required, type=integer
; number of tests contained in the hierarchy below this test suite
; level : in, required, type=integer
; level of test suite
;-
pro mgutxmlrunner::reportTestSuiteStart, testsuite, $
ntestcases=ntestcases, $
ntests=ntests, $
level=level
compile_opt strictarr
indent = level eq 0L ? '' : string(bytarr(2 * level) + 32B)
msg = string(indent, testsuite, format='(%"%s")')
self->_print, self.lun, msg
end
;+
; Report the results of a test suite.
;
; :Keywords:
; npass : in, required, type=integer
; number of passing tests contained in the hierarchy below the test
; suite
; nfail : in, required, type=integer
; number of failing tests contained in the hierarchy below the test
; suite
; nskip : in, required, type=integer
; number of skipped tests contained in the hierarchy below the test
; suite
; level : in, required, type=integer
; level of test suite
;-
pro mgutxmlrunner::reportTestSuiteResult, npass=npass, nfail=nfail, $
nskip=nskip, level=level
compile_opt strictarr
indent = level eq 0L ? '' : string(bytarr(2 * level) + 32B)
msg = string(indent, format='(%"%s")')
self->_print, self.lun, msg
end
;+
; Report a test case has begun.
;
; :Params:
; testcase : in, required, type=string
; name of test case
;
; :Keywords:
; ntests : in, required, type=integer
; number of tests contained in this test case
; level : in, required, type=integer
; level of test case
;-
pro mgutxmlrunner::reportTestCaseStart, testcase, ntests=ntests, level=level
compile_opt strictarr
indent = level eq 0L ? '' : string(bytarr(2 * level) + 32B)
msg = string(indent, testcase, format='(%"%s")')
self->_print, self.lun, msg
end
;+
; Report the results of a test case.
;
; :Keywords:
; npass : in, required, type=integer
; number of passing tests
; nfail : in, required, type=integer
; number of failing tests
; nskip : in, required, type=integer
; number of skipped tests
; level : in, required, type=integer
; level of test case
;-
pro mgutxmlrunner::reportTestCaseResult, npass=npass, nfail=nfail, $
nskip=nskip, level=level
compile_opt strictarr
indent = level eq 0L ? '' : string(bytarr(2 * level) + 32B)
msg = string(indent, format='(%"%s")')
self->_print, self.lun, msg
end
;+
; Report the start of single test.
;
; :Params:
; testname : in, required, type=string
; name of test
;
; :Keywords:
; level : in, required, type=integer
; level of test case
;-
pro mgutxmlrunner::reportTestStart, testname, level=level
compile_opt strictarr
indent = level eq 0L ? '' : string(bytarr(2 * level) + 32B)
msg = string(indent, testname, format='(%"%s ")')
self->_print, self.lun, msg
end
;+
; Report the result of a single test.
;
; :Params:
; msg : in, required, type=string
; message to display when test fails
;
; :Keywords:
; passed : in, required, type=boolean
; whether the test passed
; skipped : in, required, type=boolean
; indicates whether the test should be counted in the results
; time : in, required, type=float
; time for the test to run
; level : in, required, type=integer
; level of test case
;-
pro mgutxmlrunner::reportTestResult, msg, passed=passed, skipped=skipped, $
time=time, level=level
compile_opt strictarr
indent = level eq 0L ? '' : string(bytarr(2 * level) + 32B)
case 1 of
keyword_set(skipped): begin
_msg = string(indent, msg, format='(%"%s %s")')
self->_print, self.lun, _msg
end
~keyword_set(passed): begin
_msg = string(indent, msg, format='(%"%s %s")')
self->_print, self.lun, _msg
end
else:
endcase
self->_print, self.lun, string(indent, format='(%"%s ")')
end
;+
; Prints a message to a LUN.
;
; :Params:
; lun : in, required, type=long
; logical unit number to print to
; text : in, required, type=string
; text to print
;
; :Keywords:
; _extra : in, optional, type=keywords
; keywords to `MG_ANSICODE`, i.e., `RED` or `GREEN`
;-
pro mgutxmlrunner::_print, lun, text, _extra=e
compile_opt strictarr
printf, lun, text, _extra=e
if (lun gt 0L) then flush, lun
end
;+
; Free resources.
;-
pro mgutxmlrunner::cleanup
compile_opt strictarr
if (self.lun gt 0) then free_lun, self.lun
self->mguttestrunner::cleanup
end
;+
; Initialize the test runner.
;
; :Returns:
; 1 for success, 0 for failure
;
; :Keywords:
; filename : in, optional, type=string
; if present, output is sent that file, otherwise output is sent to
; `stdout`
; color : in, optional, type=boolean
; unused for `MGutXMLRunner`
; _extra : in, optional, type=keywords
; keywords to `MGutTestRunner::init`
;-
function mgutxmlrunner::init, filename=filename, color=color, _extra=e
compile_opt strictarr
if (~self->mguttestrunner::init(_extra=e)) then return, 0B
; make the directory the output file is in if it doesn't exist
if (n_elements(filename) gt 0) then begin
dir = file_dirname(filename)
if (~file_test(dir)) then file_mkdir, dir
endif
; setup the LUN for the output
if (n_elements(filename) gt 0) then begin
openw, lun, filename, /get_lun
self.lun = lun
endif else begin
self.lun = -1L
endelse
return, 1B
end
;+
; Define member variables.
;
; :Fields:
; lun
; the logical unit number to send output to (-1L by default)
;-
pro mgutxmlrunner__define
compile_opt strictarr
define = { MGutXmlRunner, inherits MGutTestRunner, $
lun: 0L $
}
end