load_entry_point('autopilot==1.5.0', 'console_scripts', 'au...">

Hard to tell what went wrong when a text content object is broken · Issue #111 · testing-cabal/testtools (original) (raw)

Traceback

Traceback (most recent call last):
  File "/usr/bin/autopilot3", line 9, in <module>
    load_entry_point('autopilot==1.5.0', 'console_scripts', 'autopilot3')()
  File "/usr/lib/python3/dist-packages/autopilot/run.py", line 729, in main
    test_app.run()
  File "/usr/lib/python3/dist-packages/autopilot/run.py", line 617, in run
    action()
  File "/usr/lib/python3/dist-packages/autopilot/run.py", line 681, in run_tests
    test_result = test_suite.run(result)
  File "/usr/lib/python3.4/unittest/suite.py", line 125, in run
    test(result)
  File "/usr/lib/python3.4/unittest/case.py", line 625, in __call__
    return self.run(*args, **kwds)
  File "/usr/lib/python3/dist-packages/testscenarios/testcase.py", line 62, in run
    test.run(result)
  File "/usr/lib/python3/dist-packages/testscenarios/testcase.py", line 65, in run
    return super(WithScenarios, self).run(result)
  File "/usr/lib/python3/dist-packages/testtools/testcase.py", line 585, in run
    return self.__RunTest(self, self.exception_handlers).run(result)
  File "/usr/lib/python3/dist-packages/testtools/runtest.py", line 74, in run
    return self._run_one(actual_result)
  File "/usr/lib/python3/dist-packages/testtools/runtest.py", line 88, in _run_one
    return self._run_prepared_result(ExtendedToOriginalDecorator(result))
  File "/usr/lib/python3/dist-packages/testtools/runtest.py", line 107, in _run_prepared_result
    handler(self.case, self.result, e)
  File "/usr/lib/python3/dist-packages/testtools/testcase.py", line 558, in _report_failure
    result.addFailure(self, details=self.getDetails())
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 1149, in addFailure
    return self.decorated.addFailure(test, err)
  File "/usr/lib/python3/dist-packages/autopilot/testresult.py", line 78, in addFailure
    return super(type(self), self).addFailure(test, err, details)
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 1546, in addFailure
    return self.decorated.addFailure(test, err, details=details)
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 1322, in addError
    self._convert(test, err, details, 'fail')
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 1350, in _convert
    test_tags=self.current_tags, timestamp=now)
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 408, in status
    super(CopyStreamResult, self).status(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 649, in status
    self.on_test(self._inprogress.pop(key))
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 742, in _gather_test
    self._handle_status[test_dict['status']](case)
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 761, in _fail
    message = _details_to_str(case._details, special="traceback")
  File "/usr/lib/python3/dist-packages/testtools/testresult/real.py", line 1752, in _details_to_str
    text = content.as_text().strip()
  File "/usr/lib/python3/dist-packages/testtools/content.py", line 94, in as_text
    return _u('').join(self.iter_text())
  File "/usr/lib/python3/dist-packages/testtools/content.py", line 118, in _iter_text
    yield decoder.decode(bytes)
  File "/usr/lib/python3.4/encodings/latin_1.py", line 26, in decode
    return codecs.latin_1_decode(input,self.errors)[0]
TypeError: 'NoneType' does not support the buffer interface

... where testtools attempts to convert a content object to a string, only to find that even though the content type of the content object is 'text', the content object returns something other than text.

This has been partially fixed in a separate PR that makes the text_content function more picky about what it accepts, but I think we should also catch the raised exception, and re-raise with the name of the content object being processed.