diff --git a/CHANGELOG.md b/CHANGELOG.md
index fae56cb..058ac04 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,14 +6,20 @@ This project adheres to [Semantic Versioning](http://semver.org/) and http://kee
### Added
- CHANGELOG.md from @dash0002
+## [1.0.0]
### Changed
- Moved license content from python file to LICENSE
- Updated README to reflect current state of project
- Upgraded to support Python 3.4.3
-### Changed v1.0.1
+## [1.0.1]
+### Changed
- Imported select functions only rather than the entire module.
- remove unused variables.
- Remove string slice and use a datetime function instead.
- Now compatible with python 3.5.2
- Added Contributor Dark-Passenger to Readme
+
+## [1.0.2]
+### Added
+- Added support for skip tests.
diff --git a/HTMLTestRunner.py b/HTMLTestRunner.py
index b0b0a8d..59f6680 100644
--- a/HTMLTestRunner.py
+++ b/HTMLTestRunner.py
@@ -1,4 +1,4 @@
-__version__ = "1.0.1"
+__version__ = "1.0.2"
from datetime import datetime
from io import StringIO
@@ -92,6 +92,7 @@ class Template_mixin(object):
0: 'pass',
1: 'fail',
2: 'error',
+ 3: 'skip',
}
DEFAULT_TITLE = 'Unit Test Report'
@@ -293,8 +294,10 @@ class Template_mixin(object):
.passClass { background-color: #6c6; }
.failClass { background-color: #c60; }
.errorClass { background-color: #c00; }
+.skipClass { background-color: #ff0; }
.passCase { color: #6c6; }
.failCase { color: #c60; font-weight: bold; }
+.skipCase { color: #ff0; font-weight: bold; }
.errorCase { color: #c00; font-weight: bold; }
.hiddenRow { display: none; }
.testcase { margin-left: 2em; }
@@ -349,6 +352,7 @@ class Template_mixin(object):
Test Group/Test case |
Count |
Pass |
+ Skip |
Fail |
Error |
View |
@@ -358,6 +362,7 @@ class Template_mixin(object):
Total |
%(count)s |
%(Pass)s |
+ %(skip)s |
%(fail)s |
%(error)s |
|
@@ -370,6 +375,7 @@ class Template_mixin(object):
%(desc)s |
%(count)s |
%(Pass)s |
+ %(skip)s |
%(fail)s |
%(error)s |
Detail |
@@ -435,6 +441,7 @@ def __init__(self, verbosity=1):
self.stdout0 = None
self.stderr0 = None
self.success_count = 0
+ self.skip_count = 0
self.failure_count = 0
self.error_count = 0
self.verbosity = verbosity
@@ -518,6 +525,19 @@ def addFailure(self, test, err):
else:
sys.stderr.write('F')
+ def addSkip(self, test, err):
+ self.skip_count += 1
+ TestResult.addSkip(self, test, err)
+ _exc_str = self.skipped[-1][1]
+ output = self.complete_output()
+ self.result.append((3, test, output, _exc_str))
+ if self.verbosity > 1:
+ sys.stderr.write('S ')
+ sys.stderr.write(str(test))
+ sys.stderr.write('\n')
+ else:
+ sys.stderr.write('S')
+
class HTMLTestRunner(Template_mixin):
"""
@@ -571,6 +591,7 @@ def getReportAttributes(self, result):
duration = str(self.stopTime - self.startTime)
status = []
if result.success_count: status.append('Pass %s' % result.success_count)
+ if result.skip_count: status.append('Skip %s' % result.skip_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:
@@ -627,11 +648,12 @@ def _generate_report(self, result):
sortedResult = self.sortResult(result.result)
for cid, (cls, cls_results) in enumerate(sortedResult):
# subtotal for a class
- np = nf = ne = 0
+ np = ns = nf = ne = 0
for n,t,o,e in cls_results:
if n == 0: np += 1
elif n == 1: nf += 1
- else: ne += 1
+ elif n == 2: ne += 1
+ elif n == 3: ns += 1
# format class description
if cls.__module__ == "__main__":
@@ -642,9 +664,9 @@ def _generate_report(self, result):
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',
+ style = ne > 0 and 'errorClass' or nf > 0 and 'failClass' or ns > 0 and 'skipClass' or 'passClass',
desc = desc,
- count = np+nf+ne,
+ count = np+ns+nf+ne,
Pass = np,
fail = nf,
error = ne,
@@ -657,8 +679,9 @@ def _generate_report(self, result):
report = self.REPORT_TMPL % dict(
test_list = ''.join(rows),
- count = str(result.success_count+result.failure_count+result.error_count),
+ count = str(result.success_count+result.failure_count+result.error_count+result.skip_count),
Pass = str(result.success_count),
+ skip = str(result.skip_count),
fail = str(result.failure_count),
error = str(result.error_count),
)
diff --git a/README.md b/README.md
index 12802a8..173ceaf 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,7 @@ by dash0002. In it's current iteration and maintenance, our goals are still the
to be able to quickly generate an HTML test report.
## Installation
-Supporting Python 3.4.3
+Supporting Python 3 - 3.5
### PIP (recommended)
@@ -57,9 +57,10 @@ as-is.
## Contributors
-Way Yip Tung - https://github.com/tungwaiyip
-Asish Dash - https://github.com/dash0002
-Dhruv Paranjape - https://github.com/dark-passenger
+- Way Yip Tung - https://github.com/tungwaiyip
+- Asish Dash - https://github.com/dash0002
+- Dhruv Paranjape - https://github.com/dark-passenger
+- Ethan Estrada - https://github.com/eestrada
Contributions are gladly accepted as this is a side project at best. Please, also
consider this when looking at feedback cycles, issues, pull requests, etc.
diff --git a/test_HTMLTestRunner.py b/test_HTMLTestRunner.py
index 61eaa48..0cc77cc 100644
--- a/test_HTMLTestRunner.py
+++ b/test_HTMLTestRunner.py
@@ -1,34 +1,37 @@
# -*- coding: utf-8 -*-
-import io as StringIO
-import sys
-import unittest
-import HTMLTestRunner
+from io import StringIO
+from unittest import TestSuite, TestLoader, skip, TextTestRunner, TestCase
+from HTMLTestRunner import HTMLTestRunner
import tests
from tests.SampleTestPass import SampleTestPass
from tests.SampleTestFail import SampleTestFail
from tests.SampleTestBasic import SampleTestBasic
-class TestHTMLTestRunner(unittest.TestCase):
+class TestHTMLTestRunner(TestCase):
def setUp(self):
- self.suite = unittest.TestSuite()
- self.loader = unittest.TestLoader()
+ self.suite = TestSuite()
+ self.loader = TestLoader()
self.suite.addTests(self.loader.loadTestsFromModule(tests.SampleTestPass))
self.suite.addTests(self.loader.loadTestsFromModule(tests.SampleTestFail))
self.suite.addTests(self.loader.loadTestsFromModule(tests.SampleTestBasic))
- self.results_output_buffer = StringIO.StringIO()
- HTMLTestRunner.HTMLTestRunner(stream=self.results_output_buffer).run(self.suite)
+ self.results_output_buffer = StringIO()
+ HTMLTestRunner(stream=self.results_output_buffer).run(self.suite)
self.byte_output = self.results_output_buffer.getvalue()
def test_SampleTestPass(self):
output1="".join(self.byte_output.split())
output2="".join(SampleTestPass.EXPECTED_RESULT.split())
self.assertGreater(output1.find(output2),0)
+
+ @skip("Test Skipping")
+ def test_SampleTestSkip(self):
+ self.fail("This error should never be displayed")
def test_SampleTestFail(self):
output1="".join(self.byte_output.split())
@@ -42,8 +45,8 @@ def test_SampleTestBasic(self):
def main():
- suite = unittest.TestLoader().loadTestsFromTestCase(TestHTMLTestRunner)
- unittest.TextTestRunner().run(suite)
+ suite = TestLoader().loadTestsFromTestCase(TestHTMLTestRunner)
+ TextTestRunner().run(suite)
if __name__ == "__main__":
main()