changeset 0:33654ef5c7ea

Import
author Daniele Nicolodi <nicolodi@science.unitn.it>
date Tue, 27 Dec 2011 19:50:44 +0100
parents
children 0712aa679900
files TestCase.m TestRunner.m test.m
diffstat 3 files changed, 124 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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
--- /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
--- /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();