diff --git a/IPython/testing/iptestcontroller.py b/IPython/testing/iptestcontroller.py index 6db274dc0..0000a3854 100644 --- a/IPython/testing/iptestcontroller.py +++ b/IPython/testing/iptestcontroller.py @@ -218,6 +218,8 @@ def all_js_groups(): class JSController(TestController): """Run CasperJS tests """ requirements = ['zmq', 'tornado', 'jinja2', 'casperjs', 'sqlite3'] + display_slimer_output = False + def __init__(self, section, enabled=True, engine='phantomjs'): """Create new test runner.""" TestController.__init__(self) @@ -249,10 +251,13 @@ class JSController(TestController): def launch(self, buffer_output): # If the engine is SlimerJS, we need to buffer the output because - # SlimerJS does not support exit codes, therefor CasperJS always returns - # 0 which is a false positive. - buffer_output = (self.engine == 'slimerjs') or buffer_output - super(JSController, self).launch(buffer_output=buffer_output) + # SlimerJS does not support exit codes, so CasperJS always returns 0. + if self.engine == 'slimerjs' and not buffer_output: + self.display_slimer_output = True + return super(JSController, self).launch(buffer_output=True) + + else: + return super(JSController, self).launch(buffer_output=buffer_output) def wait(self, *pargs, **kwargs): """Wait for the JSController to finish""" @@ -261,8 +266,12 @@ class JSController(TestController): # errors. Otherwise, just return the return code. if self.engine == 'slimerjs': stdout = bytes_to_str(self.stdout) - print(stdout) - return self.slimer_failure.search(strip_ansi(stdout)) + if self.display_slimer_output: + print(stdout) + if ret != 0: + # This could still happen e.g. if it's stopped by SIGINT + return ret + return bool(self.slimer_failure.search(strip_ansi(stdout))) else: return ret