blob: 073519ace96d48df6f33bbd6917530242e37b63a [file] [log] [blame]
//###########################################################################
//
// Copyright 2011 The SVUnit Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//###########################################################################
/*
Class: svunit_testrunner
Base class for the test runner
*/
class svunit_testrunner extends svunit_base;
/*
Array: list_of_svunits
Queue List of Test Suites to include in the Test Runner
*/
local svunit_testsuite list_of_suites[$];
/*
Interface
*/
extern function new(string name);
extern function void add_testsuite(svunit_testsuite suite);
extern function void report();
local function void write_xml();
int xml = $fopen("tests.xml", "w");
junit_xml::TestSuite test_suites[$];
foreach (list_of_suites[i]) begin
test_suites.push_back(list_of_suites[i].as_junit_test_suite());
end
$fwrite(xml, junit_xml::to_xml_report_string(test_suites));
$fwrite(xml, "\n");
endfunction
endclass
/*
Constructor: name
Initializes the test runner
Parameters:
name - instance name of the unit test runner
*/
function svunit_testrunner::new(string name);
super.new(name);
endfunction
/*
Method: add_testsuite
Adds single testsuite to list of suites
Parameters:
suite - test suite to add to the list of test suites
*/
function void svunit_testrunner::add_testsuite(svunit_testsuite suite);
`INFO($sformatf("Registering Test Suite %0s", suite.get_name()));
list_of_suites.push_back(suite);
endfunction
/*
Method: report
This task reports the results for the test suites
*/
function void svunit_testrunner::report();
int pass_cnt;
string success_str;
begin
svunit_testsuite match[$] = list_of_suites.find() with (item.get_results() == PASS);
pass_cnt = match.size();
end
if (pass_cnt == list_of_suites.size()) begin
success_str = "PASSED";
success = PASS;
end else begin
success_str = "FAILED";
success = FAIL;
end
`LF;
`INFO($sformatf("%0s (%0d of %0d suites passing) [%s]",
success_str,
pass_cnt,
list_of_suites.size(),
svunit_version));
write_xml();
endfunction