|
""" tests of rest reporter backend |
""" |
|
import py |
from py.__.test.rsession.testing.test_reporter import AbstractTestReporter,\ |
DummyChannel |
from py.__.test.rsession import repevent |
from py.__.test.rsession.rest import RestReporter, NoLinkWriter |
from py.__.rest.rst import * |
from py.__.test.rsession.hostmanage import HostInfo |
from py.__.test.rsession.outcome import Outcome |
|
class Container(object): |
def __init__(self, **args): |
for arg, val in args.items(): |
setattr(self, arg, val) |
|
class RestTestReporter(RestReporter): |
def __init__(self, *args, **kwargs): |
if args: |
super(RestReporter, self).__init__(*args, **kwargs) |
|
class TestRestUnits(object): |
def setup_method(self, method): |
config = py.test.config._reparse(["some_sub"]) |
config.option.verbose = False |
self.config = config |
hosts = [HostInfo('localhost')] |
method.im_func.func_globals['ch'] = DummyChannel(hosts[0]) |
method.im_func.func_globals['reporter'] = r = RestReporter(config, |
hosts) |
method.im_func.func_globals['stdout'] = s = py.std.StringIO.StringIO() |
r.out = s |
r.linkwriter = NoLinkWriter() |
|
def test_report_unknown(self): |
self.config.option.verbose = True |
reporter.report_unknown('foo') |
assert stdout.getvalue() == 'Unknown report\\: foo\n\n' |
self.config.option.verbose = False |
|
def test_report_SendItem(self): |
event = repevent.SendItem(item='foo/bar.py', channel=ch) |
reporter.report(event) |
assert stdout.getvalue() == '' |
stdout.seek(0) |
stdout.truncate() |
reporter.config.option.verbose = True |
reporter.report(event) |
assert stdout.getvalue() == ('sending item foo/bar.py to ' |
'localhost\n\n') |
|
def test_report_HostRSyncing(self): |
event = repevent.HostRSyncing(HostInfo('localhost:/foo/bar'), "a", |
"b", False) |
reporter.report(event) |
assert stdout.getvalue() == ('::\n\n localhost: RSYNC ==> ' |
'/foo/bar\n\n') |
|
def test_report_HostRSyncRootReady(self): |
h = HostInfo('localhost') |
reporter.hosts_to_rsync = 1 |
reporter.report(repevent.HostGatewayReady(h, ["a"])) |
event = repevent.HostRSyncRootReady(h, "a") |
reporter.report(event) |
assert stdout.getvalue() == '::\n\n localhost: READY\n\n' |
|
def test_report_TestStarted(self): |
event = repevent.TestStarted([HostInfo('localhost'), |
HostInfo('foo.com')], |
"aa", ["a", "b"]) |
reporter.report(event) |
assert stdout.getvalue() == """\ |
=========================================== |
Running tests on hosts\: localhost, foo.com |
=========================================== |
|
""" |
|
def test_report_ItemStart(self): |
class FakeModule(py.test.collect.Module): |
def __init__(self, parent): |
self.parent = parent |
self.fspath = py.path.local('.') |
def _tryiter(self): |
return ['test_foo', 'test_bar'] |
def listnames(self): |
return ['package', 'foo', 'bar.py'] |
|
parent = Container(parent=None, fspath=py.path.local('.')) |
event = repevent.ItemStart(item=FakeModule(parent)) |
reporter.report(event) |
assert stdout.getvalue() == """\ |
Testing module foo/bar.py (2 items) |
----------------------------------- |
|
""" |
|
def test_print_summary(self): |
reporter.timestart = 10 |
reporter.timeend = 20 |
reporter.timersync = 15 |
reporter.print_summary(10, '', '') |
assert stdout.getvalue() == """\ |
10 tests run in 10.00s (rsync\: 5.00) |
------------------------------------- |
|
""" |
|
def test_ReceivedItemOutcome_PASSED(self): |
outcome = Outcome() |
item = Container(listnames=lambda: ['', 'foo.py', 'bar', '()', 'baz']) |
event = repevent.ReceivedItemOutcome(channel=ch, outcome=outcome, item=item) |
reporter.report(event) |
assert stdout.getvalue() == ('* localhost\\: **PASSED** ' |
'foo.py/bar()/baz\n\n') |
|
def test_ReceivedItemOutcome_SKIPPED(self): |
outcome = Outcome(skipped="reason") |
item = Container(listnames=lambda: ['', 'foo.py', 'bar', '()', 'baz']) |
event = repevent.ReceivedItemOutcome(channel=ch, outcome=outcome, item=item) |
reporter.report(event) |
assert stdout.getvalue() == ('* localhost\\: **SKIPPED** ' |
'foo.py/bar()/baz\n\n') |
|
def test_ReceivedItemOutcome_FAILED(self): |
outcome = Outcome(excinfo="xxx") |
item = Container(listnames=lambda: ['', 'foo.py', 'bar', '()', 'baz']) |
event = repevent.ReceivedItemOutcome(channel=ch, outcome=outcome, item=item) |
reporter.report(event) |
assert stdout.getvalue() == """\ |
* localhost\: **FAILED** `traceback0`_ foo.py/bar()/baz |
|
""" |
|
def test_ReceivedItemOutcome_FAILED_stdout(self): |
excinfo = Container( |
typename='FooError', |
value='A foo has occurred', |
traceback=[ |
Container( |
path='foo/bar.py', |
lineno=1, |
relline=1, |
source='foo()', |
), |
Container( |
path='foo/baz.py', |
lineno=4, |
relline=1, |
source='raise FooError("A foo has occurred")', |
), |
] |
) |
outcome = Outcome(excinfo=excinfo) |
outcome.stdout = '<printed>' |
outcome.stderr = '' |
parent = Container(parent=None, fspath=py.path.local('.')) |
item = Container(listnames=lambda: ['', 'foo.py', 'bar', '()', 'baz'], |
parent=parent, fspath=py.path.local('foo')) |
event = repevent.ReceivedItemOutcome(channel=ch, outcome=outcome, |
item=item) |
reporter.report(event) |
reporter.timestart = 10 |
reporter.timeend = 20 |
reporter.timersync = 15 |
reporter.print_summary(10, '', '') |
|
reporter.print_summary(1, 'skipped', 'failed') |
out = stdout.getvalue() |
assert out.find('<printed>') > -1 |
|
def test_skips(self): |
class FakeOutcome(Container, repevent.ReceivedItemOutcome): |
pass |
|
class FakeTryiter(Container, repevent.SkippedTryiter): |
pass |
|
reporter.skips() |
assert stdout.getvalue() == '' |
reporter.skipped_tests_outcome = [ |
FakeOutcome(outcome=Container(skipped='problem X'), |
item=Container(listnames=lambda: ['foo', 'bar.py'])), |
FakeTryiter(excinfo=Container(value='problem Y'), |
item=Container(listnames=lambda: ['foo', 'baz.py']))] |
reporter.skips() |
assert stdout.getvalue() == """\ |
Reasons for skipped tests\: |
+++++++++++++++++++++++++++ |
|
* foo/bar.py\: problem X |
|
* foo/baz.py\: problem Y |
|
""" |
|
def test_failures(self): |
class FakeOutcome(Container, repevent.ReceivedItemOutcome): |
pass |
|
parent = Container(parent=None, fspath=py.path.local('.')) |
reporter.failed_tests_outcome = [ |
FakeOutcome( |
outcome=Container( |
signal=False, |
excinfo=Container( |
typename='FooError', |
value='A foo has occurred', |
traceback=[ |
Container( |
path='foo/bar.py', |
lineno=1, |
relline=1, |
source='foo()', |
), |
Container( |
path='foo/baz.py', |
lineno=4, |
relline=1, |
source='raise FooError("A foo has occurred")', |
), |
] |
), |
stdout='', |
stderr='', |
), |
item=Container( |
listnames=lambda: ['package', 'foo', 'bar.py', |
'baz', '()'], |
parent=parent, |
fspath=py.path.local('.'), |
), |
channel=ch, |
), |
] |
reporter.config.option.tbstyle = 'no' |
reporter.failures() |
expected = """\ |
Exceptions\: |
++++++++++++ |
|
foo/bar.py/baz() on localhost |
+++++++++++++++++++++++++++++ |
|
.. _`traceback0`: |
|
|
FooError |
++++++++ |
|
:: |
|
A foo has occurred |
|
""" |
assert stdout.getvalue() == expected |
|
reporter.config.option.tbstyle = 'short' |
stdout.seek(0) |
stdout.truncate() |
reporter.failures() |
expected = """\ |
Exceptions\: |
++++++++++++ |
|
foo/bar.py/baz() on localhost |
+++++++++++++++++++++++++++++ |
|
.. _`traceback0`: |
|
|
:: |
|
foo/bar.py line 1 |
foo() |
foo/baz.py line 4 |
raise FooError("A foo has occurred") |
|
FooError |
++++++++ |
|
:: |
|
A foo has occurred |
|
""" |
assert stdout.getvalue() == expected |
|
reporter.config.option.tbstyle = 'long' |
stdout.seek(0) |
stdout.truncate() |
reporter.failures() |
expected = """\ |
Exceptions\: |
++++++++++++ |
|
foo/bar.py/baz() on localhost |
+++++++++++++++++++++++++++++ |
|
.. _`traceback0`: |
|
|
+++++++++++++++++ |
foo/bar.py line 1 |
+++++++++++++++++ |
|
:: |
|
foo() |
|
+++++++++++++++++ |
foo/baz.py line 4 |
+++++++++++++++++ |
|
:: |
|
raise FooError("A foo has occurred") |
|
FooError |
++++++++ |
|
:: |
|
A foo has occurred |
|
""" |
assert stdout.getvalue() == expected |
|
|
class TestRestReporter(AbstractTestReporter): |
reporter = RestReporter |
|
def test_failed_to_load(self): |
py.test.skip("Not implemented") |
|
def test_report_received_item_outcome(self): |
py.test.skip("Relying on exact output matching") |
val = self.report_received_item_outcome() |
expected = """\ |
* localhost\: **FAILED** `traceback0`_\n py/test/rsession/testing/test\_slave.py/funcpass |
|
* localhost\: **SKIPPED** py/test/rsession/testing/test\_slave.py/funcpass |
|
* localhost\: **FAILED** `traceback1`_\n py/test/rsession/testing/test\_slave.py/funcpass |
|
* localhost\: **PASSED** py/test/rsession/testing/test\_slave.py/funcpass |
|
""" |
print val |
assert val == expected |
|
|