blob: f48c1bebb12444d32b01f6fe77931a1b5274e14f [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_testsuite
Base class for the unit test suite
*/
class svunit_testsuite extends svunit_base;
/*
Array: list_of_testcases
Queue list of Unit Testcases to include for this Test Suite
*/
local svunit_testcase list_of_testcases[$];
/*
Interface
*/
extern function new(string name);
extern function void add_testcase(svunit_testcase svunit);
extern task run();
extern function void report();
function junit_xml::TestSuite as_junit_test_suite();
junit_xml::TestSuite result = new(get_name());
foreach (list_of_testcases[i]) begin
junit_xml::TestCase junit_test_cases[] = list_of_testcases[i].as_junit_test_cases();
foreach (junit_test_cases[i])
result.add_test_case(junit_test_cases[i]);
end
return result;
endfunction
endclass
/*
Constructor: new
Initializes the test suite
Parameters:
name - instance name of the unit test suite
*/
function svunit_testsuite::new(string name);
super.new(name);
endfunction
/*
Method: add_testcase
Adds a testcase to list of tests
Parameters:
svunit - unit test to add to the list of unit tests
*/
function void svunit_testsuite::add_testcase(svunit_testcase svunit);
`INFO($sformatf("Registering Unit Test Case %s", svunit.get_name()));
list_of_testcases.push_back(svunit);
endfunction
/*
Method: run
Main Run Task of the Test Suite
*/
task svunit_testsuite::run();
`INFO("RUNNING");
endtask
/*
Method: report
This task reports the results for the unit tests
*/
function void svunit_testsuite::report();
int pass_cnt;
string success_str;
foreach(list_of_testcases[i])
list_of_testcases[i].report();
begin
svunit_testcase match[$] = list_of_testcases.find() with (item.get_results() == PASS);
pass_cnt = match.size();
end
if (pass_cnt == list_of_testcases.size()) begin
success_str = "PASSED";
success = PASS;
end else begin
success_str = "FAILED";
success = FAIL;
end
`LF;
`INFO($sformatf("%0s (%0d of %0d testcases passing)",
success_str,
pass_cnt,
list_of_testcases.size()));
endfunction