~testing-cabal/testtools/trunk

« back to all changes in this revision

Viewing changes to testtools/tests/test_testresult.py

  • Committer: GitHub
  • Author(s): Free Ekanayaka
  • Date: 2017-04-11 13:13:10 UTC
  • Revision ID: git-v1:01d4a9b59ecb93701838b8df5ee8fbbd3d22b0f4
Add ResourcedToStreamDecorator test result decorator for testresources integration (#243)

This new decorator implements the TestResult protocol extension supported by test resources. For example, tt makes it possible to easily have resource-related events streamed to subunit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
import tempfile
16
16
import threading
17
17
from unittest import TestSuite
18
 
 
19
 
from extras import safe_hasattr, try_imports
 
18
from extras import safe_hasattr, try_imports, try_import
20
19
 
21
20
Queue = try_imports(['Queue.Queue', 'queue.Queue'])
22
21
 
 
22
testresources = try_import('testresources')
 
23
 
23
24
from testtools import (
24
25
    CopyStreamResult,
25
26
    ExtendedToOriginalDecorator,
26
27
    ExtendedToStreamDecorator,
27
28
    MultiTestResult,
28
29
    PlaceHolder,
 
30
    ResourcedToStreamDecorator,
29
31
    StreamFailFast,
30
32
    StreamResult,
31
33
    StreamResultRouter,
590
592
        return ExtendedToStreamDecorator(StreamResult())
591
593
 
592
594
 
 
595
class TestResourcedToStreamDecoratorContract(TestCase, TestStreamResultContract):
 
596
 
 
597
    def _make_result(self):
 
598
        return ResourcedToStreamDecorator(StreamResult())
 
599
 
 
600
 
593
601
class TestStreamSummaryResultContract(TestCase, TestStreamResultContract):
594
602
 
595
603
    def _make_result(self):
932
940
             ('stopTestRun',)], log._events)
933
941
 
934
942
 
 
943
class TestResourcedToStreamDecorator(TestCase):
 
944
 
 
945
    def setUp(self):
 
946
        super(TestResourcedToStreamDecorator, self).setUp()
 
947
        if testresources is None:
 
948
            self.skipTest('Need testresources')
 
949
 
 
950
    def test_startMakeResource(self):
 
951
        log = LoggingStreamResult()
 
952
        result = ResourcedToStreamDecorator(log)
 
953
        timestamp = datetime.datetime.utcfromtimestamp(3.476)
 
954
        result.startTestRun()
 
955
        result.time(timestamp)
 
956
        resource = testresources.TestResourceManager()
 
957
        result.startMakeResource(resource)
 
958
        [_, event] = log._events
 
959
        self.assertEqual(
 
960
            'testresources.TestResourceManager.make', event.test_id)
 
961
        self.assertEqual('inprogress', event.test_status)
 
962
        self.assertFalse(event.runnable)
 
963
        self.assertEqual(timestamp, event.timestamp)
 
964
 
 
965
    def test_startMakeResource_with_custom_id_method(self):
 
966
        log = LoggingStreamResult()
 
967
        result = ResourcedToStreamDecorator(log)
 
968
        resource = testresources.TestResourceManager()
 
969
        resource.id = lambda: 'nice.resource'
 
970
        result.startTestRun()
 
971
        result.startMakeResource(resource)
 
972
        self.assertEqual('nice.resource.make', log._events[1].test_id)
 
973
 
 
974
    def test_stopMakeResource(self):
 
975
        log = LoggingStreamResult()
 
976
        result = ResourcedToStreamDecorator(log)
 
977
        resource = testresources.TestResourceManager()
 
978
        result.startTestRun()
 
979
        result.stopMakeResource(resource)
 
980
        [_, event] = log._events
 
981
        self.assertEqual(
 
982
            'testresources.TestResourceManager.make', event.test_id)
 
983
        self.assertEqual('success', event.test_status)
 
984
 
 
985
    def test_startCleanResource(self):
 
986
        log = LoggingStreamResult()
 
987
        result = ResourcedToStreamDecorator(log)
 
988
        resource = testresources.TestResourceManager()
 
989
        result.startTestRun()
 
990
        result.startCleanResource(resource)
 
991
        [_, event] = log._events
 
992
        self.assertEqual(
 
993
            'testresources.TestResourceManager.clean', event.test_id)
 
994
        self.assertEqual('inprogress', event.test_status)
 
995
 
 
996
    def test_stopCleanResource(self):
 
997
        log = LoggingStreamResult()
 
998
        result = ResourcedToStreamDecorator(log)
 
999
        resource = testresources.TestResourceManager()
 
1000
        result.startTestRun()
 
1001
        result.stopCleanResource(resource)
 
1002
        [_, event] = log._events
 
1003
        self.assertEqual(
 
1004
            'testresources.TestResourceManager.clean', event.test_id)
 
1005
        self.assertEqual('success', event.test_status)
 
1006
 
 
1007
 
935
1008
class TestStreamFailFast(TestCase):
936
1009
 
937
1010
    def test_inprogress(self):