From ebf8f23abcd16b9a671dd5bfa6c54ec511f1b82d Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Tue, 5 Nov 2013 15:43:16 -0800 Subject: [PATCH] Document the Test results --- SimPEG/tests/HTMLTestRunner.py | 824 +++++++++ SimPEG/tests/api_TestResults.rst | 355 ++++ SimPEG/tests/report.html | 2870 ++++++++++++++++++++++++++++++ SimPEG/tests/runTests.py | 38 +- docs/api_TestResults.rst | 2862 +++++++++++++++++++++++++++++ docs/index.rst | 1 + 6 files changed, 6949 insertions(+), 1 deletion(-) create mode 100644 SimPEG/tests/HTMLTestRunner.py create mode 100644 SimPEG/tests/api_TestResults.rst create mode 100644 SimPEG/tests/report.html create mode 100644 docs/api_TestResults.rst diff --git a/SimPEG/tests/HTMLTestRunner.py b/SimPEG/tests/HTMLTestRunner.py new file mode 100644 index 00000000..af384971 --- /dev/null +++ b/SimPEG/tests/HTMLTestRunner.py @@ -0,0 +1,824 @@ +""" +A TestRunner for use with the Python unit testing framework. It +generates a HTML report to show the result at a glance. + +The simplest way to use this is to invoke its main method. E.g. + + import unittest + import HTMLTestRunner + + ... define your tests ... + + if __name__ == '__main__': + HTMLTestRunner.main() + + +For more customization options, instantiates a HTMLTestRunner object. +HTMLTestRunner is a counterpart to unittest's TextTestRunner. E.g. + + # output to a file + fp = file('my_report.html', 'wb') + runner = HTMLTestRunner.HTMLTestRunner( + stream=fp, + title='My unit test', + description='This demonstrates the report output by HTMLTestRunner.' + ) + + # Use an external stylesheet. + # See the Template_mixin class for more customizable options + runner.STYLESHEET_TMPL = '' + + # run the test + runner.run(my_test_suite) + + +------------------------------------------------------------------------ +Copyright (c) 2004-2007, Wai Yip Tung +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +* Neither the name Wai Yip Tung nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" + +# URL: http://tungwaiyip.info/software/HTMLTestRunner.html + +__author__ = "Wai Yip Tung" +__version__ = "0.8.2" + + +""" +Change History + +Version 0.8.2 +* Show output inline instead of popup window (Viorel Lupu). + +Version in 0.8.1 +* Validated XHTML (Wolfgang Borgert). +* Added description of test classes and test cases. + +Version in 0.8.0 +* Define Template_mixin class for customization. +* Workaround a IE 6 bug that it does not treat + +%(heading)s +%(report)s +%(ending)s + + + +""" + # variables: (title, generator, stylesheet, heading, report, ending) + + + # ------------------------------------------------------------------------ + # Stylesheet + # + # alternatively use a for external style sheet, e.g. + # + + STYLESHEET_TMPL = """ + +""" + + + + # ------------------------------------------------------------------------ + # Heading + # + + HEADING_TMPL = """
+

%(title)s

+%(parameters)s +

%(description)s

+
+ +""" # variables: (title, parameters, description) + + HEADING_ATTRIBUTE_TMPL = """

%(name)s: %(value)s

+""" # variables: (name, value) + + + + # ------------------------------------------------------------------------ + # Report + # + + REPORT_TMPL = """ +

Show +Summary +Failed +All +

+ ++++++++ + + + + + + + + +%(test_list)s + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
Total%(count)s%(Pass)s%(fail)s%(error)s 
+""" # variables: (test_list, count, Pass, fail, error) + + REPORT_CLASS_TMPL = r""" + + %(desc)s + %(count)s + %(Pass)s + %(fail)s + %(error)s + Detail + +""" # variables: (style, desc, count, Pass, fail, error, cid) + + + REPORT_TEST_WITH_OUTPUT_TMPL = r""" + +
%(desc)s
+ + + + + %(status)s + + + + + + +""" # variables: (tid, Class, style, desc, status) + + + REPORT_TEST_NO_OUTPUT_TMPL = r""" + +
%(desc)s
+ %(status)s + +""" # variables: (tid, Class, style, desc, status) + + + REPORT_TEST_OUTPUT_TMPL = r""" +%(id)s: %(output)s +""" # variables: (id, output) + + + + # ------------------------------------------------------------------------ + # ENDING + # + + ENDING_TMPL = """
 
""" + +# -------------------- The end of the Template class ------------------- + + +TestResult = unittest.TestResult + +class _TestResult(TestResult): + # note: _TestResult is a pure representation of results. + # It lacks the output and reporting ability compares to unittest._TextTestResult. + + def __init__(self, verbosity=1): + TestResult.__init__(self) + self.stdout0 = None + self.stderr0 = None + self.success_count = 0 + self.failure_count = 0 + self.error_count = 0 + self.verbosity = verbosity + + # result is a list of result in 4 tuple + # ( + # result code (0: success; 1: fail; 2: error), + # TestCase object, + # Test output (byte string), + # stack trace, + # ) + self.result = [] + + + def startTest(self, test): + TestResult.startTest(self, test) + # just one buffer for both stdout and stderr + self.outputBuffer = StringIO.StringIO() + stdout_redirector.fp = self.outputBuffer + stderr_redirector.fp = self.outputBuffer + self.stdout0 = sys.stdout + self.stderr0 = sys.stderr + sys.stdout = stdout_redirector + sys.stderr = stderr_redirector + + + def complete_output(self): + """ + Disconnect output redirection and return buffer. + Safe to call multiple times. + """ + if self.stdout0: + sys.stdout = self.stdout0 + sys.stderr = self.stderr0 + self.stdout0 = None + self.stderr0 = None + return self.outputBuffer.getvalue() + + + def stopTest(self, test): + # Usually one of addSuccess, addError or addFailure would have been called. + # But there are some path in unittest that would bypass this. + # We must disconnect stdout in stopTest(), which is guaranteed to be called. + self.complete_output() + + + def addSuccess(self, test): + self.success_count += 1 + TestResult.addSuccess(self, test) + output = self.complete_output() + self.result.append((0, test, output, '')) + if self.verbosity > 1: + sys.stderr.write('ok ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') + else: + sys.stderr.write('.') + + def addError(self, test, err): + self.error_count += 1 + TestResult.addError(self, test, err) + _, _exc_str = self.errors[-1] + output = self.complete_output() + self.result.append((2, test, output, _exc_str)) + if self.verbosity > 1: + sys.stderr.write('E ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') + else: + sys.stderr.write('E') + + def addFailure(self, test, err): + self.failure_count += 1 + TestResult.addFailure(self, test, err) + _, _exc_str = self.failures[-1] + output = self.complete_output() + self.result.append((1, test, output, _exc_str)) + if self.verbosity > 1: + sys.stderr.write('F ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') + else: + sys.stderr.write('F') + + +class HTMLTestRunner(Template_mixin): + """ + """ + def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None): + self.stream = stream + self.verbosity = verbosity + if title is None: + self.title = self.DEFAULT_TITLE + else: + self.title = title + if description is None: + self.description = self.DEFAULT_DESCRIPTION + else: + self.description = description + + self.startTime = datetime.datetime.now() + + + def run(self, test): + "Run the given test case or test suite." + result = _TestResult(self.verbosity) + test(result) + self.stopTime = datetime.datetime.now() + self.generateReport(test, result) + print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime) + return result + + + def sortResult(self, result_list): + # unittest does not seems to run in any particular order. + # Here at least we want to group them together by class. + rmap = {} + classes = [] + for n,t,o,e in result_list: + cls = t.__class__ + if not rmap.has_key(cls): + rmap[cls] = [] + classes.append(cls) + rmap[cls].append((n,t,o,e)) + r = [(cls, rmap[cls]) for cls in classes] + return r + + + def getReportAttributes(self, result): + """ + Return report attributes as a list of (name, value). + Override this to add custom attributes. + """ + startTime = str(self.startTime)[:19] + duration = str(self.stopTime - self.startTime) + status = [] + if result.success_count: status.append('Pass %s' % result.success_count) + if result.failure_count: status.append('Failure %s' % result.failure_count) + if result.error_count: status.append('Error %s' % result.error_count ) + if status: + status = ' '.join(status) + else: + status = 'none' + return [ + ('Start Time', startTime), + ('Duration', duration), + ('Status', status), + ] + + + def generateReport(self, test, result): + report_attrs = self.getReportAttributes(result) + generator = 'HTMLTestRunner %s' % __version__ + stylesheet = self._generate_stylesheet() + heading = self._generate_heading(report_attrs) + report = self._generate_report(result) + ending = self._generate_ending() + output = self.HTML_TMPL % dict( + title = saxutils.escape(self.title), + generator = generator, + stylesheet = stylesheet, + heading = heading, + report = report, + ending = ending, + ) + self.stream.write(output.encode('utf8')) + + + def _generate_stylesheet(self): + return self.STYLESHEET_TMPL + + + def _generate_heading(self, report_attrs): + a_lines = [] + for name, value in report_attrs: + line = self.HEADING_ATTRIBUTE_TMPL % dict( + name = saxutils.escape(name), + value = saxutils.escape(value), + ) + a_lines.append(line) + heading = self.HEADING_TMPL % dict( + title = saxutils.escape(self.title), + parameters = ''.join(a_lines), + description = saxutils.escape(self.description), + ) + return heading + + + def _generate_report(self, result): + rows = [] + sortedResult = self.sortResult(result.result) + for cid, (cls, cls_results) in enumerate(sortedResult): + # subtotal for a class + np = nf = ne = 0 + for n,t,o,e in cls_results: + if n == 0: np += 1 + elif n == 1: nf += 1 + else: ne += 1 + + # format class description + if cls.__module__ == "__main__": + name = cls.__name__ + else: + name = "%s.%s" % (cls.__module__, cls.__name__) + doc = cls.__doc__ and cls.__doc__.split("\n")[0] or "" + desc = doc and '%s: %s' % (name, doc) or name + + row = self.REPORT_CLASS_TMPL % dict( + style = ne > 0 and 'errorClass' or nf > 0 and 'failClass' or 'passClass', + desc = desc, + count = np+nf+ne, + Pass = np, + fail = nf, + error = ne, + cid = 'c%s' % (cid+1), + ) + rows.append(row) + + for tid, (n,t,o,e) in enumerate(cls_results): + self._generate_report_test(rows, cid, tid, n, t, o, e) + + report = self.REPORT_TMPL % dict( + test_list = ''.join(rows), + count = str(result.success_count+result.failure_count+result.error_count), + Pass = str(result.success_count), + fail = str(result.failure_count), + error = str(result.error_count), + ) + return report + + + def _generate_report_test(self, rows, cid, tid, n, t, o, e): + # e.g. 'pt1.1', 'ft1.1', etc + has_output = bool(o or e) + tid = (n == 0 and 'p' or 'f') + 't%s.%s' % (cid+1,tid+1) + name = t.id().split('.')[-1] + doc = t.shortDescription() or "" + desc = doc and ('%s: %s' % (name, doc)) or name + tmpl = has_output and self.REPORT_TEST_WITH_OUTPUT_TMPL or self.REPORT_TEST_NO_OUTPUT_TMPL + + # o and e should be byte string because they are collected from stdout and stderr? + if isinstance(o,str): + # TODO: some problem with 'string_escape': it escape \n and mess up formating + # uo = unicode(o.encode('string_escape')) + uo = o.decode('latin-1') + else: + uo = o + if isinstance(e,str): + # TODO: some problem with 'string_escape': it escape \n and mess up formating + # ue = unicode(e.encode('string_escape')) + ue = e.decode('latin-1') + else: + ue = e + + script = self.REPORT_TEST_OUTPUT_TMPL % dict( + id = tid, + output = saxutils.escape(uo+ue), + ) + + row = tmpl % dict( + tid = tid, + Class = (n == 0 and 'hiddenRow' or 'none'), + style = n == 2 and 'errorCase' or (n == 1 and 'failCase' or 'none'), + desc = desc, + script = script, + status = self.STATUS[n], + ) + rows.append(row) + if not has_output: + return + + def _generate_ending(self): + return self.ENDING_TMPL + + +############################################################################## +# Facilities for running tests from the command line +############################################################################## + +# Note: Reuse unittest.TestProgram to launch test. In the future we may +# build our own launcher to support more specific command line +# parameters like test title, CSS, etc. +class TestProgram(unittest.TestProgram): + """ + A variation of the unittest.TestProgram. Please refer to the base + class for command line parameters. + """ + def runTests(self): + # Pick HTMLTestRunner as the default test runner. + # base class's testRunner parameter is not useful because it means + # we have to instantiate HTMLTestRunner before we know self.verbosity. + if self.testRunner is None: + self.testRunner = HTMLTestRunner(verbosity=self.verbosity) + unittest.TestProgram.runTests(self) + +main = TestProgram + +############################################################################## +# Executing this module from the command line +############################################################################## + +if __name__ == "__main__": + main(module=None) diff --git a/SimPEG/tests/api_TestResults.rst b/SimPEG/tests/api_TestResults.rst new file mode 100644 index 00000000..0d63a328 --- /dev/null +++ b/SimPEG/tests/api_TestResults.rst @@ -0,0 +1,355 @@ +.. _api_TestResults: + +.. raw:: html + + + + + +
+

Test Report

+

Start Time: 2013-11-05 15:24:44

+

Duration: 0:00:00.007500

+

Status: Pass 22

+ +

This demonstrates the report output by Prasanna.Yelsangikar.

+
+ + + +

Show + Summary + Failed + All +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
Total222200 
+ diff --git a/SimPEG/tests/report.html b/SimPEG/tests/report.html new file mode 100644 index 00000000..be98c935 --- /dev/null +++ b/SimPEG/tests/report.html @@ -0,0 +1,2870 @@ + + + + + Test Results + + + + + + + + + +
+

Test Results

+

Start Time: 2013-11-05 15:38:27

+

Duration: 0:00:32.112639

+

Status: Pass 96 Error 3

+ +

SimPEG Test Report was automatically generated.

+
+ + + +

Show +Summary +Failed +All +

+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_forward_DCproblem.DCProblemTests4103Detail
test_adjoint
+ + + + error + + + + +
test_dataObj
+ + + + error + + + + +
test_misfit
+ + + + error + + + + +
test_modelObj
+ + + + pass + + + + +
test_forward_problem.ProblemTests2200Detail
test_modelTransform
+ + + + pass + + + + +
test_regularization
+ + + + pass + + + + +
test_interpolation.TestInterpolation1D2200Detail
test_orderCC
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation2d6600Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation3D8800Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderEz
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderFz
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_LogicallyOrthogonalMesh.BasicLOMTests8800Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_grid
pass
test_normals
pass
test_tangents
pass
test_vol_2D
pass
test_vol_3D
pass
test_massMatrices.TestInnerProducts: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_order6_faces
+ + + + pass + + + + +
test_massMatrices.TestInnerProducts2D: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order2_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_operators.TestCurl1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv2D1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad2D1100Detail
test_order
+ + + + pass + + + + +
test_Solver.TestSolver101000Detail
test_directDiagonal_1
pass
test_directDiagonal_M
pass
test_directFactored_1
pass
test_directFactored_M
pass
test_directLower_1
pass
test_directLower_M
pass
test_directSpsolve_1
pass
test_directSpsolve_M
pass
test_directUpper_1
pass
test_directUpper_M
pass
test_tensorMesh.BasicTensorMeshTests7700Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_vectorCC_2D
pass
test_vectorN_2D
pass
test_vol_2D
pass
test_vol_3D
pass
test_tensorMesh.TestPoissonEqn2200Detail
test_orderBackward
+ + + + pass + + + + +
test_orderForward
+ + + + pass + + + + +
test_utils.TestCheckDerivative3300Detail
test_simpleFail
+ + + + pass + + + + +
test_simpleFunction
+ + + + pass + + + + +
test_simplePass
+ + + + pass + + + + +
test_utils.TestSequenceFunctions8800Detail
test_indexCube_2D
pass
test_indexCube_3D
pass
test_invXXXBlockDiagonal
pass
test_mkvc1
pass
test_mkvc2
pass
test_mkvc3
pass
test_ndgrid_2D
pass
test_ndgrid_3D
pass
Total999603 
+ +
 
+ + + diff --git a/SimPEG/tests/runTests.py b/SimPEG/tests/runTests.py index b6662f00..d671324e 100644 --- a/SimPEG/tests/runTests.py +++ b/SimPEG/tests/runTests.py @@ -1,11 +1,47 @@ import glob import unittest +import HTMLTestRunner # This code will run all tests in directory named test_*.py +TITLE = 'Test Results' test_file_strings = glob.glob('test_*.py') module_strings = [str[0:len(str)-3] for str in test_file_strings] suites = [unittest.defaultTestLoader.loadTestsFromName(str) for str in module_strings] testSuite = unittest.TestSuite(suites) -text_runner = unittest.TextTestRunner().run(testSuite) +unittest.TextTestRunner(verbosity=2).run(testSuite) + + +outfile = open("report.html", "w") +runner = HTMLTestRunner.HTMLTestRunner( + stream=outfile, + title=TITLE, + description='SimPEG Test Report was automatically generated.' + ) + +runner.run(testSuite) +outfile.close() + +reader = open("report.html", "r") +writer = open("../../docs/api_TestResults.rst", "w") + +writer.write('.. _api_TestResults:\n\nTest Results\n============\n\n.. raw:: html\n\n') + +go = False +for line in reader: + skip = False + if line == ' + + + +
+

Start Time: 2013-11-05 15:38:27

+

Duration: 0:00:32.112639

+

Status: Pass 96 Error 3

+ +

SimPEG Test Report was automatically generated.

+
+ + + +

Show + Summary + Failed + All +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Group/Test caseCountPassFailErrorView
test_basemesh.TestBaseMesh111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_basemesh.TestMeshNumbers2D111100Detail
test_meshDimensions
pass
test_mesh_nc
pass
test_mesh_nc_xyz
pass
test_mesh_ne
pass
test_mesh_nf
pass
test_mesh_numbers
pass
test_mesh_r_CC_M
pass
test_mesh_r_E_M
pass
test_mesh_r_E_V
pass
test_mesh_r_F_M
pass
test_mesh_r_F_V
pass
test_forward_DCproblem.DCProblemTests4103Detail
test_adjoint
+ + + + error + + + + +
test_dataObj
+ + + + error + + + + +
test_misfit
+ + + + error + + + + +
test_modelObj
+ + + + pass + + + + +
test_forward_problem.ProblemTests2200Detail
test_modelTransform
+ + + + pass + + + + +
test_regularization
+ + + + pass + + + + +
test_interpolation.TestInterpolation1D2200Detail
test_orderCC
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation2d6600Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_interpolation.TestInterpolation3D8800Detail
test_orderCC
+ + + + pass + + + + +
test_orderEx
+ + + + pass + + + + +
test_orderEy
+ + + + pass + + + + +
test_orderEz
+ + + + pass + + + + +
test_orderFx
+ + + + pass + + + + +
test_orderFy
+ + + + pass + + + + +
test_orderFz
+ + + + pass + + + + +
test_orderN
+ + + + pass + + + + +
test_LogicallyOrthogonalMesh.BasicLOMTests8800Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_grid
pass
test_normals
pass
test_tangents
pass
test_vol_2D
pass
test_vol_3D
pass
test_massMatrices.TestInnerProducts: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_order6_faces
+ + + + pass + + + + +
test_massMatrices.TestInnerProducts2D: Integrate an function over a unit cube domain using edgeInnerProducts and faceInnerProducts.6600Detail
test_order1_edges
+ + + + pass + + + + +
test_order1_faces
+ + + + pass + + + + +
test_order2_faces
+ + + + pass + + + + +
test_order3_edges
+ + + + pass + + + + +
test_order3_faces
+ + + + pass + + + + +
test_order6_edges
+ + + + pass + + + + +
test_operators.TestCurl1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestFaceDiv2D1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad1100Detail
test_order
+ + + + pass + + + + +
test_operators.TestNodalGrad2D1100Detail
test_order
+ + + + pass + + + + +
test_Solver.TestSolver101000Detail
test_directDiagonal_1
pass
test_directDiagonal_M
pass
test_directFactored_1
pass
test_directFactored_M
pass
test_directLower_1
pass
test_directLower_M
pass
test_directSpsolve_1
pass
test_directSpsolve_M
pass
test_directUpper_1
pass
test_directUpper_M
pass
test_tensorMesh.BasicTensorMeshTests7700Detail
test_area_3D
pass
test_edge_2D
pass
test_edge_3D
pass
test_vectorCC_2D
pass
test_vectorN_2D
pass
test_vol_2D
pass
test_vol_3D
pass
test_tensorMesh.TestPoissonEqn2200Detail
test_orderBackward
+ + + + pass + + + + +
test_orderForward
+ + + + pass + + + + +
test_utils.TestCheckDerivative3300Detail
test_simpleFail
+ + + + pass + + + + +
test_simpleFunction
+ + + + pass + + + + +
test_simplePass
+ + + + pass + + + + +
test_utils.TestSequenceFunctions8800Detail
test_indexCube_2D
pass
test_indexCube_3D
pass
test_invXXXBlockDiagonal
pass
test_mkvc1
pass
test_mkvc2
pass
test_mkvc3
pass
test_ndgrid_2D
pass
test_ndgrid_3D
pass
Total999603 
+ diff --git a/docs/index.rst b/docs/index.rst index 981e5ddc..12db6f97 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -47,6 +47,7 @@ Testing SimPEG :maxdepth: 2 api_Tests + api_TestResults Utility Codes