From de5481550894baae20d84c0a3bea433a98933681 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 20 May 2016 14:41:52 -0400 Subject: [PATCH] nitunit: new class UnitTest to factorize TestCase and DocUnit Signed-off-by: Jean Privat --- src/testing/testing_base.nit | 42 +++++++++++++++++++++++++++++++++++++++++ src/testing/testing_suite.nit | 32 +++++++------------------------ 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/src/testing/testing_base.nit b/src/testing/testing_base.nit index 414de9a..4249df5 100644 --- a/src/testing/testing_base.nit +++ b/src/testing/testing_base.nit @@ -17,6 +17,7 @@ module testing_base import modelize private import parser_util +import html redef class ToolContext # opt --full @@ -94,6 +95,47 @@ ulimit -t {{{ulimit_usertime}}} 2> /dev/null var ulimit_usertime = 600 is writable end +# A unit test is an elementary test discovered, run and reported bu nitunit. +# +# This class factorizes `DocUnit` and `TestCase`. +abstract class UnitTest + + # Error occurred during test-case execution. + var error: nullable String = null is writable + + # Was the test case executed at least once? + var was_exec = false is writable + + # Return the `TestCase` in XML format compatible with Jenkins. + # + # See to_xml + fun to_xml: HTMLTag do + var tc = new HTMLTag("testcase") + tc.attr("classname", xml_classname) + tc.attr("name", xml_name) + var error = self.error + if error != null then + if was_exec then + tc.open("error").append("Runtime Error") + else + tc.open("failure").append("Compilation Error") + end + tc.open("system-err").append(error.trunc(8192).filter_nonprintable) + end + return tc + end + + # The `classname` attribute of the XML format. + # + # NOTE: jenkins expects a '.' in the classname attr + fun xml_classname: String is abstract + + # The `name` attribute of the XML format. + # + # See to_xml + fun xml_name: String is abstract +end + redef class String # If needed, truncate `self` at `max_length` characters and append an informative `message`. # diff --git a/src/testing/testing_suite.nit b/src/testing/testing_suite.nit index ae1f4a2..ee2701f 100644 --- a/src/testing/testing_suite.nit +++ b/src/testing/testing_suite.nit @@ -214,6 +214,7 @@ end # A test case is a unit test considering only a `MMethodDef`. class TestCase + super UnitTest # Test suite wich `self` belongs to. var test_suite: TestSuite @@ -282,32 +283,13 @@ class TestCase toolcontext.check_errors end - # Error occured during test-case execution. - var error: nullable String = null - - # Was the test case executed at least one? - var was_exec = false - - # Return the `TestCase` in XML format compatible with Jenkins. - fun to_xml: HTMLTag do + redef fun xml_classname do var mclassdef = test_method.mclassdef - var tc = new HTMLTag("testcase") - # NOTE: jenkins expects a '.' in the classname attr - tc.attr("classname", "nitunit." + mclassdef.mmodule.full_name + "." + mclassdef.mclass.full_name) - tc.attr("name", test_method.mproperty.full_name) - if was_exec then - tc.add new HTMLTag("system-out") - var n = new HTMLTag("system-err") - tc.add n - var error = self.error - if error != null then - n.append error.trunc(8192).filter_nonprintable - n = new HTMLTag("error") - n.attr("message", "Runtime Error") - tc.add n - end - end - return tc + return "nitunit." + mclassdef.mmodule.full_name + "." + mclassdef.mclass.full_name + end + + redef fun xml_name do + return test_method.mproperty.full_name end end -- 1.7.9.5