Esempio n. 1
0
    def run(self, test):
        """Run tests.

        :param test: A unittest TestSuite or TestClass.
        :returns: Test result

        Fires :func:`startTestRun` and :func:`stopTestRun` hooks.

        """
        result = self._makeResult()
        executor = lambda suite, result: suite(result)
        startTime = time.time()
        event = events.StartTestRunEvent(self, test, result, startTime,
                                         executor)
        self.session.hooks.startTestRun(event)

        # allows startTestRun to modify test suite
        test = event.suite
        # ... and test execution
        executor = event.executeTests
        try:
            if not event.handled:
                executor(test, result)
        finally:
            stopTime = time.time()
            timeTaken = stopTime - startTime
            event = events.StopTestRunEvent(self, result, stopTime, timeTaken)
            self.session.hooks.stopTestRun(event)
            self.session.hooks.afterTestRun(event)
        return result
Esempio n. 2
0
    def test_mixed_layers_no_layers(self):
        class L1(object):
            pass

        class L2(L1):
            pass

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T2(unittest.TestCase):
            layer = L2

            def test(self):
                pass

        class T3(unittest.TestCase):
            def test(self):
                pass

        suite = unittest.TestSuite([T2('test'), T1('test'), T3('test')])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = self._listset([
            'test (nose2.tests.unit.test_layers_plugin.T3)',
            [
                'test (nose2.tests.unit.test_layers_plugin.T1)',
                ['test (nose2.tests.unit.test_layers_plugin.T2)']
            ]
        ])
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 3
0
    def test_simple_layer_inheritance(self):
        class L1(object):
            pass

        class L2(L1):
            pass

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T2(unittest.TestCase):
            layer = L2

            def test(self):
                pass

        suite = unittest.TestSuite([T2('test'), T1('test')])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [[
            'test (nose2.tests.unit.test_layers_plugin.T1)',
            ['test (nose2.tests.unit.test_layers_plugin.T2)']
        ]]
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 4
0
    def test_mixin_in_inner_layer(self):
        class M1(object):
            pass

        class L1(object):
            pass

        class L2(L1):
            mixins = (M1,)

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T2(unittest.TestCase):
            layer = L2

            def test(self):
                pass

        suite = unittest.TestSuite([T1("test"), T2("test")])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [  # L1
            [
                "test (nose2.tests.unit.test_layers_plugin.T1)",
                # M1
                [["test (nose2.tests.unit.test_layers_plugin.T2)"]],  # L2
            ]
        ]
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 5
0
    def test_mixed_layers_no_layers(self):
        class L1(object):
            pass

        class L2(L1):
            pass

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T2(unittest.TestCase):
            layer = L2

            def test(self):
                pass

        class T3(unittest.TestCase):
            def test(self):
                pass

        suite = unittest.TestSuite([T2("test"), T1("test"), T3("test")])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [
            "test (nose2.tests.unit.test_layers_plugin.T3)",
            [
                "test (nose2.tests.unit.test_layers_plugin.T1)",
                ["test (nose2.tests.unit.test_layers_plugin.T2)"],
            ],
        ]
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 6
0
 def test_start_test_run_filters_suite(self):
     self.plugin.attribs = ['a']
     suite = unittest.TestSuite()
     suite.addTest(self.TC_1('test_a'))
     suite.addTest(self.TC_1('test_b'))
     event = events.StartTestRunEvent(None, suite, None, 1, None)
     self.session.hooks.startTestRun(event)
     self.assertEqual(len(event.suite._tests), 1)
     self.assertEqual(event.suite._tests[0]._testMethodName, 'test_a')
Esempio n. 7
0
    def test_mixin_in_top_layer(self):
        class M1(object):
            pass

        class L1(object):
            mixins = (M1,)

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        suite = unittest.TestSuite([T1("test")])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [[["test (nose2.tests.unit.test_layers_plugin.T1)"]]]  # M1  # L1  # T1
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 8
0
    def test_invalid_top_layer(self):

        if sys.version_info >= (3, 0):
            # in python 3, L1 will automatically have `object` has base, so
            # this test does not make sense, and will actually fail.
            return

        class L1:
            pass

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        suite = unittest.TestSuite([T1("test")])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        with self.assertRaises(exceptions.LoadTestsFailure):
            self.plugin.startTestRun(event)
Esempio n. 9
0
    def test_deep_inheritance(self):
        class L1(object):
            pass

        class L2(L1):
            pass

        class L3(L1):
            pass

        class L4(L2, L1):
            pass

        class L5(L4):
            pass

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T2(unittest.TestCase):
            layer = L2

            def test(self):
                pass

        class T3(unittest.TestCase):
            layer = L3

            def test(self):
                pass

        class T4(unittest.TestCase):
            layer = L4

            def test(self):
                pass

        class T5(unittest.TestCase):
            layer = L5

            def test(self):
                pass

        suite = unittest.TestSuite(
            [T2('test'),
             T1('test'),
             T3('test'),
             T4('test'),
             T5('test')])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [[
            'test (nose2.tests.unit.test_layers_plugin.T1)',
            [
                'test (nose2.tests.unit.test_layers_plugin.T2)',
                [
                    'test (nose2.tests.unit.test_layers_plugin.T4)',
                    ['test (nose2.tests.unit.test_layers_plugin.T5)']
                ]
            ], ['test (nose2.tests.unit.test_layers_plugin.T3)']
        ]]
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 10
0
    def test_mixin_inheritance(self):
        class L1(object):
            pass

        class L2(object):  # a mixin, doesn't share a base w/L1
            pass

        class L3(L1):
            pass

        class L4(L3):
            pass

        class L5(L4):
            pass

        class L6(L2):
            mixins = (L4, )

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T3(unittest.TestCase):
            layer = L3

            def test(self):
                pass

        class T4(unittest.TestCase):
            layer = L4

            def test(self):
                pass

        class T5(unittest.TestCase):
            layer = L5

            def test(self):
                pass

        class T6(unittest.TestCase):
            layer = L6

            def test(self):
                pass

        suite = unittest.TestSuite(
            [T6('test'),
             T1('test'),
             T3('test'),
             T4('test'),
             T5('test')])
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [[
            'test (nose2.tests.unit.test_layers_plugin.T1)',
            [
                'test (nose2.tests.unit.test_layers_plugin.T3)',
                [
                    'test (nose2.tests.unit.test_layers_plugin.T4)',
                    [['test (nose2.tests.unit.test_layers_plugin.T6)']],
                    [
                        'test (nose2.tests.unit.test_layers_plugin.T5)',
                    ]
                ]
            ]
        ]]
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 11
0
    def test_mixin_inheritance(self):
        # without mixin
        # L1
        #  -> L3
        #   -> L4
        #    -> L5
        # L2
        #  -> L6
        #
        # with mixin new behavior:
        #   the mixin (L4, which comes with L3 and L1)
        #   is inserted after the parent layer (L2).
        # L2
        #  -> L1
        #   -> L3
        #    -> L4
        #     -> L6
        #     -> L5
        #
        # with mixin old behavior
        #   the mixin (L4, which comes with L3 and L1)
        #   is inserted before the parent layer (L2).
        # L1
        #  -> L3
        #   -> L4
        #    -> L2
        #     -> L6
        #    -> L5
        class L1(object):
            pass

        class L2(object):  # a mixin, doesn't share a base w/L1
            pass

        class L3(L1):
            pass

        class L4(L3):
            pass

        class L5(L4):
            pass

        class L6(L2):
            mixins = (L4,)

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T3(unittest.TestCase):
            layer = L3

            def test(self):
                pass

        class T4(unittest.TestCase):
            layer = L4

            def test(self):
                pass

        class T5(unittest.TestCase):
            layer = L5

            def test(self):
                pass

        class T6(unittest.TestCase):
            layer = L6

            def test(self):
                pass

        suite = unittest.TestSuite(
            [T6("test"), T1("test"), T3("test"), T4("test"), T5("test")]
        )
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [  # L2
            [  # L1
                [
                    "test (nose2.tests.unit.test_layers_plugin.T1)",  # T1
                    # L3
                    [
                        "test (nose2.tests.unit.test_layers_plugin.T3)",  # T3
                        # L4
                        [
                            "test (nose2.tests.unit.test_layers_plugin.T4)",  # T4
                            # L5
                            ["test (nose2.tests.unit.test_layers_plugin.T5)"],
                            # L6
                            ["test (nose2.tests.unit.test_layers_plugin.T6)"],
                        ],
                    ],
                ]
            ]
        ]
        self.assertEqual(self.names(event.suite), expect)
Esempio n. 12
0
    def test_ordered_layers(self):
        class L1(object):
            pass

        class L2(L1):
            position = 1

        class L3(L1):
            position = 2

        class L4(L1):
            position = 3

        class L5(L2):
            position = 4

        class T1(unittest.TestCase):
            layer = L1

            def test(self):
                pass

        class T2(unittest.TestCase):
            layer = L2

            def test(self):
                pass

        class T3(unittest.TestCase):
            layer = L3

            def test(self):
                pass

        class T4(unittest.TestCase):
            layer = L4

            def test(self):
                pass

        class T5(unittest.TestCase):
            layer = L5

            def test(self):
                pass

        suite = unittest.TestSuite(
            [T2("test"), T1("test"), T3("test"), T4("test"), T5("test")]
        )
        event = events.StartTestRunEvent(None, suite, None, 0, None)
        self.plugin.startTestRun(event)
        expect = [
            [
                "test (nose2.tests.unit.test_layers_plugin.T1)",
                [
                    "test (nose2.tests.unit.test_layers_plugin.T2)",
                    ["test (nose2.tests.unit.test_layers_plugin.T5)"],
                ],
                ["test (nose2.tests.unit.test_layers_plugin.T3)"],
                ["test (nose2.tests.unit.test_layers_plugin.T4)"],
            ]
        ]
        self.assertEqual(self.names(event.suite), expect)