# HG changeset patch # User Daniele Nicolodi # Date 1325011844 -3600 # Node ID 33654ef5c7ea194002636f15eae6517884374e83 Import diff -r 000000000000 -r 33654ef5c7ea TestCase.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestCase.m Tue Dec 27 19:50:44 2011 +0100 @@ -0,0 +1,53 @@ +classdef TestCase < handle + + properties + + end % properties + + methods + + function tests = listTests(self) + tests = {}; + m = methods(self); + for kk = 1:numel(m) + if strncmp(m{kk}, 'test_', 5) + tests = [ tests m(kk) ]; + end + end + end + + function setUpClass(self) + + end + + function tearDownClass(self) + + end + + function setUp(self) + + end + + function tearDown(self) + + end + + function test_foo(self) + true; + end + + function test_aaa(self) + true; + end + + function test_bbb(self) + true; + end + + function test_bar(self) + assert(false, 'bar'); + end + + end % methods + +end \ No newline at end of file diff -r 000000000000 -r 33654ef5c7ea TestRunner.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestRunner.m Tue Dec 27 19:50:44 2011 +0100 @@ -0,0 +1,69 @@ +classdef TestRunner < handle + + properties + + testcases = {}; + + end % properties + + methods + + function self = TestRunner(testcases) + self.testcases = testcases; + end + + function results = run(self) + + failures = {}; + + for kk = 1:numel(self.testcases) + + % instance + t = feval(self.testcases{kk}); + + % setup class + t.setUpClass(); + cleanclass = onCleanup(@()t.tearDownClass()); + + for m = t.listTests() + + try + % setup test + t.setUp() + clean = onCleanup(@()t.tearDown()); + catch ex + % something went wrong in test setup code + fprintf('E'); + end + + try + % run test + feval(m{1}, t); + fprintf('.'); + catch ex + % test failure + fprintf('F'); + failures = [ failures { {self.testcases{kk} m{1} ex } }]; + end + % explicitly call cleanup handler + clear clean; + end + % explicitly call class cleanup handler + clear cleanclass; + end + fprintf('\n'); + + self.reportFailures(failures) + + end + + function reportFailures(self, failures) + for kk = 1:numel(failures) + f = failures{kk}; + fprintf(2, '%s: %s: %s\n%s', which(f{1}), f{1}, f{2}, f{3}.getReport()); + end + end + + end % methods + +end diff -r 000000000000 -r 33654ef5c7ea test.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test.m Tue Dec 27 19:50:44 2011 +0100 @@ -0,0 +1,2 @@ +runner = TestRunner({ 'TestCase' }); +runner.run();