From 7f660b4fb35531cc38068b1e921bb1e224370f3e Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Sat, 13 Aug 2016 09:45:55 +0530 Subject: [PATCH 1/7] Reduce namespace polution by only importing specific functions. --- HTMLTestRunner.py | 72 +++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/HTMLTestRunner.py b/HTMLTestRunner.py index 1d40c83..43c21af 100644 --- a/HTMLTestRunner.py +++ b/HTMLTestRunner.py @@ -1,17 +1,17 @@ -__version__ = "1.0.0" +__version__ = "1.0.1" -import datetime -import io as StringIO -import sys -import time -import unittest +from datetime import datetime +from io import StringIO +from sys import stdout, stderr +from unittest import TestResult +from unittest import TestProgram as Tp from xml.sax import saxutils # ------------------------------------------------------------------------ # The redirectors below are used to capture output during testing. Output -# sent to sys.stdout and sys.stderr are automatically captured. However -# in some cases sys.stdout is already cached before HTMLTestRunner is +# sent to stdout and stderr are automatically captured. However +# in some cases stdout is already cached before HTMLTestRunner is # invoked (e.g. calling logging.basicConfig). In order to capture those # output, use the redirectors for the cached stream. # @@ -41,8 +41,8 @@ def writelines(self, lines): def flush(self): self.fp.flush() -stdout_redirector = OutputRedirector(sys.stdout) -stderr_redirector = OutputRedirector(sys.stderr) +stdout_redirector = OutputRedirector(stdout) +stderr_redirector = OutputRedirector(stderr) @@ -426,15 +426,13 @@ class Template_mixin(object): # -------------------- 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.outputBuffer = StringIO.StringIO() + self.outputBuffer = StringIO() self.stdout0 = None self.stderr0 = None self.success_count = 0 @@ -457,10 +455,10 @@ def startTest(self, test): # just one buffer for both stdout and stderr 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 + self.stdout0 = stdout + self.stderr0 = stderr + stdout = stdout_redirector + stderr = stderr_redirector def complete_output(self): @@ -469,8 +467,8 @@ def complete_output(self): Safe to call multiple times. """ if self.stdout0: - sys.stdout = self.stdout0 - sys.stderr = self.stderr0 + stdout = self.stdout0 + stderr = self.stderr0 self.stdout0 = None self.stderr0 = None return self.outputBuffer.getvalue() @@ -489,11 +487,11 @@ def 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') + stderr.write('ok ') + stderr.write(str(test)) + stderr.write('\n') else: - sys.stderr.write('.') + stderr.write('.') def addError(self, test, err): self.error_count += 1 @@ -502,11 +500,11 @@ def addError(self, test, err): 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') + stderr.write('E ') + stderr.write(str(test)) + stderr.write('\n') else: - sys.stderr.write('E') + stderr.write('E') def addFailure(self, test, err): self.failure_count += 1 @@ -515,17 +513,17 @@ def addFailure(self, test, err): 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') + stderr.write('F ') + stderr.write(str(test)) + stderr.write('\n') else: - sys.stderr.write('F') + stderr.write('F') class HTMLTestRunner(Template_mixin): """ """ - def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None): + def __init__(self, stream=stdout, verbosity=1, title=None, description=None): self.stream = stream self.verbosity = verbosity if title is None: @@ -537,16 +535,16 @@ def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None) else: self.description = description - self.startTime = datetime.datetime.now() + self.startTime = 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.stopTime = datetime.now() self.generateReport(test, result) - print('Time Elapsed: {}'.format((self.stopTime-self.startTime)), file=sys.stderr) + print('Time Elapsed: {}'.format((self.stopTime-self.startTime)), file=stderr) return result @@ -719,7 +717,7 @@ def _generate_ending(self): # 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): +class TestProgram(Tp): """ A variation of the unittest.TestProgram. Please refer to the base class for command line parameters. @@ -730,7 +728,7 @@ def runTests(self): # 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) + Tp.runTests(self) main = TestProgram From 31e5b3ea4bf7b5bb167b255c5c032ef185273ce5 Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Sat, 13 Aug 2016 19:42:16 +0530 Subject: [PATCH 2/7] Fix sys.stdout and sys.stderr import derp --- HTMLTestRunner.py | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/HTMLTestRunner.py b/HTMLTestRunner.py index 43c21af..0abaf7a 100644 --- a/HTMLTestRunner.py +++ b/HTMLTestRunner.py @@ -2,10 +2,9 @@ from datetime import datetime from io import StringIO -from sys import stdout, stderr -from unittest import TestResult -from unittest import TestProgram as Tp +from unittest import TestResult, TestProgram from xml.sax import saxutils +import sys # ------------------------------------------------------------------------ @@ -41,8 +40,8 @@ def writelines(self, lines): def flush(self): self.fp.flush() -stdout_redirector = OutputRedirector(stdout) -stderr_redirector = OutputRedirector(stderr) +stdout_redirector = OutputRedirector(sys.stdout) +stderr_redirector = OutputRedirector(sys.stderr) @@ -455,8 +454,8 @@ def startTest(self, test): # just one buffer for both stdout and stderr stdout_redirector.fp = self.outputBuffer stderr_redirector.fp = self.outputBuffer - self.stdout0 = stdout - self.stderr0 = stderr + self.stdout0 = sys.stdout + self.stderr0 = sys.stderr stdout = stdout_redirector stderr = stderr_redirector @@ -487,11 +486,11 @@ def addSuccess(self, test): output = self.complete_output() self.result.append((0, test, output, '')) if self.verbosity > 1: - stderr.write('ok ') - stderr.write(str(test)) - stderr.write('\n') + sys.stderr.write('ok ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') else: - stderr.write('.') + sys.stderr.write('.') def addError(self, test, err): self.error_count += 1 @@ -500,11 +499,11 @@ def addError(self, test, err): output = self.complete_output() self.result.append((2, test, output, _exc_str)) if self.verbosity > 1: - stderr.write('E ') - stderr.write(str(test)) - stderr.write('\n') + sys.stderr.write('E ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') else: - stderr.write('E') + sys.stderr.write('E') def addFailure(self, test, err): self.failure_count += 1 @@ -513,17 +512,17 @@ def addFailure(self, test, err): output = self.complete_output() self.result.append((1, test, output, _exc_str)) if self.verbosity > 1: - stderr.write('F ') - stderr.write(str(test)) - stderr.write('\n') + sys.stderr.write('F ') + sys.stderr.write(str(test)) + sys.stderr.write('\n') else: - stderr.write('F') + sys.stderr.write('F') class HTMLTestRunner(Template_mixin): """ """ - def __init__(self, stream=stdout, verbosity=1, title=None, description=None): + def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None): self.stream = stream self.verbosity = verbosity if title is None: @@ -544,7 +543,7 @@ def run(self, test): test(result) self.stopTime = datetime.now() self.generateReport(test, result) - print('Time Elapsed: {}'.format((self.stopTime-self.startTime)), file=stderr) + print('Time Elapsed: {}'.format((self.stopTime-self.startTime)), file=sys.stderr) return result @@ -717,7 +716,7 @@ def _generate_ending(self): # 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(Tp): +class _TestProgram(TestProgram): """ A variation of the unittest.TestProgram. Please refer to the base class for command line parameters. @@ -728,9 +727,9 @@ def runTests(self): # we have to instantiate HTMLTestRunner before we know self.verbosity. if self.testRunner is None: self.testRunner = HTMLTestRunner(verbosity=self.verbosity) - Tp.runTests(self) + TestProgram.runTests(self) -main = TestProgram +main = _TestProgram ############################################################################## # Executing this module from the command line From 57e24358811877f6484f2ee7c5e96bbb55660dcc Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Sat, 13 Aug 2016 19:45:09 +0530 Subject: [PATCH 3/7] fix remaining sys import derp --- HTMLTestRunner.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/HTMLTestRunner.py b/HTMLTestRunner.py index 0abaf7a..31d3f41 100644 --- a/HTMLTestRunner.py +++ b/HTMLTestRunner.py @@ -456,8 +456,8 @@ def startTest(self, test): stderr_redirector.fp = self.outputBuffer self.stdout0 = sys.stdout self.stderr0 = sys.stderr - stdout = stdout_redirector - stderr = stderr_redirector + sys.stdout = stdout_redirector + sys.stderr = stderr_redirector def complete_output(self): @@ -466,8 +466,8 @@ def complete_output(self): Safe to call multiple times. """ if self.stdout0: - stdout = self.stdout0 - stderr = self.stderr0 + sys.stdout = self.stdout0 + sys.stderr = self.stderr0 self.stdout0 = None self.stderr0 = None return self.outputBuffer.getvalue() From 5b451287ce70f64e4d0e89c50e9f62bf600c3743 Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Tue, 16 Aug 2016 15:21:33 +0530 Subject: [PATCH 4/7] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f2083ab..dd13f06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,3 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/) and http://kee - Moved license content from python file to LICENSE - Updated README to reflect current state of project - Upgraded to support Python 3.4.3 + +### Changed +- Imported select functions only rather than the entire module. +- Added Contributor Dark-Passenger to Readme From fefec8eb8cdf45cd4db01259f92a636c8e4da632 Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Tue, 16 Aug 2016 15:22:04 +0530 Subject: [PATCH 5/7] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 36ebd58..12802a8 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ as-is. Way Yip Tung - https://github.com/tungwaiyip Asish Dash - https://github.com/dash0002 +Dhruv Paranjape - https://github.com/dark-passenger 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. From 4e495bcb699b68709769751460662b9c301adfbd Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Wed, 17 Aug 2016 07:57:44 +0530 Subject: [PATCH 6/7] remove unused _ variable assignment and remove unessary string slice removed the _ that was assigned but never used and the string slice is now remove by using datetime function --- HTMLTestRunner.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/HTMLTestRunner.py b/HTMLTestRunner.py index 31d3f41..b0b0a8d 100644 --- a/HTMLTestRunner.py +++ b/HTMLTestRunner.py @@ -495,7 +495,7 @@ def addSuccess(self, test): def addError(self, test, err): self.error_count += 1 TestResult.addError(self, test, err) - _, _exc_str = self.errors[-1] + _exc_str = self.errors[-1][1] output = self.complete_output() self.result.append((2, test, output, _exc_str)) if self.verbosity > 1: @@ -508,7 +508,7 @@ def addError(self, test, err): def addFailure(self, test, err): self.failure_count += 1 TestResult.addFailure(self, test, err) - _, _exc_str = self.failures[-1] + _exc_str = self.failures[-1][1] output = self.complete_output() self.result.append((1, test, output, _exc_str)) if self.verbosity > 1: @@ -534,14 +534,14 @@ def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None) else: self.description = description - self.startTime = datetime.now() + self.startTime = datetime.now().replace(microsecond=0) def run(self, test): "Run the given test case or test suite." result = _TestResult(self.verbosity) test(result) - self.stopTime = datetime.now() + self.stopTime = datetime.now().replace(microsecond=0) self.generateReport(test, result) print('Time Elapsed: {}'.format((self.stopTime-self.startTime)), file=sys.stderr) return result @@ -567,7 +567,7 @@ def getReportAttributes(self, result): Return report attributes as a list of (name, value). Override this to add custom attributes. """ - startTime = str(self.startTime)[:19] + startTime = str(self.startTime) duration = str(self.stopTime - self.startTime) status = [] if result.success_count: status.append('Pass %s' % result.success_count) From 1a55050f5701479cf3664960f488c69c809b5527 Mon Sep 17 00:00:00 2001 From: Dhruv Paranjape Date: Wed, 17 Aug 2016 07:59:47 +0530 Subject: [PATCH 7/7] Update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd13f06..99345e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,4 +13,7 @@ This project adheres to [Semantic Versioning](http://semver.org/) and http://kee ### 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