python (3.11.7)

(root)/
lib/
python3.11/
unittest/
test/
test_skipping.py
       1  import unittest
       2  
       3  from unittest.test.support import LoggingResult
       4  
       5  
       6  class ESC[4;38;5;81mTest_TestSkipping(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
       7  
       8      def test_skipping(self):
       9          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      10              def defaultTestResult(self):
      11                  return LoggingResult(events)
      12              def test_skip_me(self):
      13                  self.skipTest("skip")
      14          events = []
      15          result = LoggingResult(events)
      16          test = Foo("test_skip_me")
      17          self.assertIs(test.run(result), result)
      18          self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
      19          self.assertEqual(result.skipped, [(test, "skip")])
      20  
      21          events = []
      22          result = test.run()
      23          self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
      24                                    'stopTest', 'stopTestRun'])
      25          self.assertEqual(result.skipped, [(test, "skip")])
      26          self.assertEqual(result.testsRun, 1)
      27  
      28          # Try letting setUp skip the test now.
      29          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      30              def defaultTestResult(self):
      31                  return LoggingResult(events)
      32              def setUp(self):
      33                  self.skipTest("testing")
      34              def test_nothing(self): pass
      35          events = []
      36          result = LoggingResult(events)
      37          test = Foo("test_nothing")
      38          self.assertIs(test.run(result), result)
      39          self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
      40          self.assertEqual(result.skipped, [(test, "testing")])
      41          self.assertEqual(result.testsRun, 1)
      42  
      43          events = []
      44          result = test.run()
      45          self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
      46                                    'stopTest', 'stopTestRun'])
      47          self.assertEqual(result.skipped, [(test, "testing")])
      48          self.assertEqual(result.testsRun, 1)
      49  
      50      def test_skipping_subtests(self):
      51          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      52              def defaultTestResult(self):
      53                  return LoggingResult(events)
      54              def test_skip_me(self):
      55                  with self.subTest(a=1):
      56                      with self.subTest(b=2):
      57                          self.skipTest("skip 1")
      58                      self.skipTest("skip 2")
      59                  self.skipTest("skip 3")
      60          events = []
      61          result = LoggingResult(events)
      62          test = Foo("test_skip_me")
      63          self.assertIs(test.run(result), result)
      64          self.assertEqual(events, ['startTest', 'addSkip', 'addSkip',
      65                                    'addSkip', 'stopTest'])
      66          self.assertEqual(len(result.skipped), 3)
      67          subtest, msg = result.skipped[0]
      68          self.assertEqual(msg, "skip 1")
      69          self.assertIsInstance(subtest, unittest.TestCase)
      70          self.assertIsNot(subtest, test)
      71          subtest, msg = result.skipped[1]
      72          self.assertEqual(msg, "skip 2")
      73          self.assertIsInstance(subtest, unittest.TestCase)
      74          self.assertIsNot(subtest, test)
      75          self.assertEqual(result.skipped[2], (test, "skip 3"))
      76  
      77          events = []
      78          result = test.run()
      79          self.assertEqual(events,
      80                           ['startTestRun', 'startTest', 'addSkip', 'addSkip',
      81                            'addSkip', 'stopTest', 'stopTestRun'])
      82          self.assertEqual([msg for subtest, msg in result.skipped],
      83                           ['skip 1', 'skip 2', 'skip 3'])
      84  
      85      def test_skipping_decorators(self):
      86          op_table = ((unittest.skipUnless, False, True),
      87                      (unittest.skipIf, True, False))
      88          for deco, do_skip, dont_skip in op_table:
      89              class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
      90                  def defaultTestResult(self):
      91                      return LoggingResult(events)
      92  
      93                  @deco(do_skip, "testing")
      94                  def test_skip(self): pass
      95  
      96                  @deco(dont_skip, "testing")
      97                  def test_dont_skip(self): pass
      98              test_do_skip = Foo("test_skip")
      99              test_dont_skip = Foo("test_dont_skip")
     100  
     101              suite = unittest.TestSuite([test_do_skip, test_dont_skip])
     102              events = []
     103              result = LoggingResult(events)
     104              self.assertIs(suite.run(result), result)
     105              self.assertEqual(len(result.skipped), 1)
     106              expected = ['startTest', 'addSkip', 'stopTest',
     107                          'startTest', 'addSuccess', 'stopTest']
     108              self.assertEqual(events, expected)
     109              self.assertEqual(result.testsRun, 2)
     110              self.assertEqual(result.skipped, [(test_do_skip, "testing")])
     111              self.assertTrue(result.wasSuccessful())
     112  
     113              events = []
     114              result = test_do_skip.run()
     115              self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
     116                                        'stopTest', 'stopTestRun'])
     117              self.assertEqual(result.skipped, [(test_do_skip, "testing")])
     118  
     119              events = []
     120              result = test_dont_skip.run()
     121              self.assertEqual(events, ['startTestRun', 'startTest', 'addSuccess',
     122                                        'stopTest', 'stopTestRun'])
     123              self.assertEqual(result.skipped, [])
     124  
     125      def test_skip_class(self):
     126          @unittest.skip("testing")
     127          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     128              def defaultTestResult(self):
     129                  return LoggingResult(events)
     130              def test_1(self):
     131                  record.append(1)
     132          events = []
     133          record = []
     134          result = LoggingResult(events)
     135          test = Foo("test_1")
     136          suite = unittest.TestSuite([test])
     137          self.assertIs(suite.run(result), result)
     138          self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
     139          self.assertEqual(result.skipped, [(test, "testing")])
     140          self.assertEqual(record, [])
     141  
     142          events = []
     143          result = test.run()
     144          self.assertEqual(events, ['startTestRun', 'startTest', 'addSkip',
     145                                    'stopTest', 'stopTestRun'])
     146          self.assertEqual(result.skipped, [(test, "testing")])
     147          self.assertEqual(record, [])
     148  
     149      def test_skip_non_unittest_class(self):
     150          @unittest.skip("testing")
     151          class ESC[4;38;5;81mMixin:
     152              def test_1(self):
     153                  record.append(1)
     154          class ESC[4;38;5;81mFoo(ESC[4;38;5;149mMixin, ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     155              pass
     156          record = []
     157          result = unittest.TestResult()
     158          test = Foo("test_1")
     159          suite = unittest.TestSuite([test])
     160          self.assertIs(suite.run(result), result)
     161          self.assertEqual(result.skipped, [(test, "testing")])
     162          self.assertEqual(record, [])
     163  
     164      def test_skip_in_setup(self):
     165          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     166              def setUp(self):
     167                  self.skipTest("skip")
     168              def test_skip_me(self):
     169                  self.fail("shouldn't come here")
     170          events = []
     171          result = LoggingResult(events)
     172          test = Foo("test_skip_me")
     173          self.assertIs(test.run(result), result)
     174          self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
     175          self.assertEqual(result.skipped, [(test, "skip")])
     176  
     177      def test_skip_in_cleanup(self):
     178          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     179              def test_skip_me(self):
     180                  pass
     181              def tearDown(self):
     182                  self.skipTest("skip")
     183          events = []
     184          result = LoggingResult(events)
     185          test = Foo("test_skip_me")
     186          self.assertIs(test.run(result), result)
     187          self.assertEqual(events, ['startTest', 'addSkip', 'stopTest'])
     188          self.assertEqual(result.skipped, [(test, "skip")])
     189  
     190      def test_failure_and_skip_in_cleanup(self):
     191          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     192              def test_skip_me(self):
     193                  self.fail("fail")
     194              def tearDown(self):
     195                  self.skipTest("skip")
     196          events = []
     197          result = LoggingResult(events)
     198          test = Foo("test_skip_me")
     199          self.assertIs(test.run(result), result)
     200          self.assertEqual(events, ['startTest', 'addFailure', 'addSkip', 'stopTest'])
     201          self.assertEqual(result.skipped, [(test, "skip")])
     202  
     203      def test_skipping_and_fail_in_cleanup(self):
     204          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     205              def test_skip_me(self):
     206                  self.skipTest("skip")
     207              def tearDown(self):
     208                  self.fail("fail")
     209          events = []
     210          result = LoggingResult(events)
     211          test = Foo("test_skip_me")
     212          self.assertIs(test.run(result), result)
     213          self.assertEqual(events, ['startTest', 'addSkip', 'addFailure', 'stopTest'])
     214          self.assertEqual(result.skipped, [(test, "skip")])
     215  
     216      def test_expected_failure(self):
     217          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     218              @unittest.expectedFailure
     219              def test_die(self):
     220                  self.fail("help me!")
     221          events = []
     222          result = LoggingResult(events)
     223          test = Foo("test_die")
     224          self.assertIs(test.run(result), result)
     225          self.assertEqual(events,
     226                           ['startTest', 'addExpectedFailure', 'stopTest'])
     227          self.assertFalse(result.failures)
     228          self.assertEqual(result.expectedFailures[0][0], test)
     229          self.assertFalse(result.unexpectedSuccesses)
     230          self.assertTrue(result.wasSuccessful())
     231  
     232      def test_expected_failure_with_wrapped_class(self):
     233          @unittest.expectedFailure
     234          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     235              def test_1(self):
     236                  self.assertTrue(False)
     237  
     238          events = []
     239          result = LoggingResult(events)
     240          test = Foo("test_1")
     241          self.assertIs(test.run(result), result)
     242          self.assertEqual(events,
     243                           ['startTest', 'addExpectedFailure', 'stopTest'])
     244          self.assertFalse(result.failures)
     245          self.assertEqual(result.expectedFailures[0][0], test)
     246          self.assertFalse(result.unexpectedSuccesses)
     247          self.assertTrue(result.wasSuccessful())
     248  
     249      def test_expected_failure_with_wrapped_subclass(self):
     250          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     251              def test_1(self):
     252                  self.assertTrue(False)
     253  
     254          @unittest.expectedFailure
     255          class ESC[4;38;5;81mBar(ESC[4;38;5;149mFoo):
     256              pass
     257  
     258          events = []
     259          result = LoggingResult(events)
     260          test = Bar("test_1")
     261          self.assertIs(test.run(result), result)
     262          self.assertEqual(events,
     263                           ['startTest', 'addExpectedFailure', 'stopTest'])
     264          self.assertFalse(result.failures)
     265          self.assertEqual(result.expectedFailures[0][0], test)
     266          self.assertFalse(result.unexpectedSuccesses)
     267          self.assertTrue(result.wasSuccessful())
     268  
     269      def test_expected_failure_subtests(self):
     270          # A failure in any subtest counts as the expected failure of the
     271          # whole test.
     272          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     273              @unittest.expectedFailure
     274              def test_die(self):
     275                  with self.subTest():
     276                      # This one succeeds
     277                      pass
     278                  with self.subTest():
     279                      self.fail("help me!")
     280                  with self.subTest():
     281                      # This one doesn't get executed
     282                      self.fail("shouldn't come here")
     283          events = []
     284          result = LoggingResult(events)
     285          test = Foo("test_die")
     286          self.assertIs(test.run(result), result)
     287          self.assertEqual(events,
     288                           ['startTest', 'addSubTestSuccess',
     289                            'addExpectedFailure', 'stopTest'])
     290          self.assertFalse(result.failures)
     291          self.assertEqual(len(result.expectedFailures), 1)
     292          self.assertIs(result.expectedFailures[0][0], test)
     293          self.assertFalse(result.unexpectedSuccesses)
     294          self.assertTrue(result.wasSuccessful())
     295  
     296      def test_expected_failure_and_fail_in_cleanup(self):
     297          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     298              @unittest.expectedFailure
     299              def test_die(self):
     300                  self.fail("help me!")
     301              def tearDown(self):
     302                  self.fail("bad tearDown")
     303          events = []
     304          result = LoggingResult(events)
     305          test = Foo("test_die")
     306          self.assertIs(test.run(result), result)
     307          self.assertEqual(events,
     308                           ['startTest', 'addFailure', 'stopTest'])
     309          self.assertEqual(len(result.failures), 1)
     310          self.assertIn('AssertionError: bad tearDown', result.failures[0][1])
     311          self.assertFalse(result.expectedFailures)
     312          self.assertFalse(result.unexpectedSuccesses)
     313          self.assertFalse(result.wasSuccessful())
     314  
     315      def test_expected_failure_and_skip_in_cleanup(self):
     316          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     317              @unittest.expectedFailure
     318              def test_die(self):
     319                  self.fail("help me!")
     320              def tearDown(self):
     321                  self.skipTest("skip")
     322          events = []
     323          result = LoggingResult(events)
     324          test = Foo("test_die")
     325          self.assertIs(test.run(result), result)
     326          self.assertEqual(events,
     327                           ['startTest', 'addSkip', 'stopTest'])
     328          self.assertFalse(result.failures)
     329          self.assertFalse(result.expectedFailures)
     330          self.assertFalse(result.unexpectedSuccesses)
     331          self.assertEqual(result.skipped, [(test, "skip")])
     332          self.assertTrue(result.wasSuccessful())
     333  
     334      def test_unexpected_success(self):
     335          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     336              @unittest.expectedFailure
     337              def test_die(self):
     338                  pass
     339          events = []
     340          result = LoggingResult(events)
     341          test = Foo("test_die")
     342          self.assertIs(test.run(result), result)
     343          self.assertEqual(events,
     344                           ['startTest', 'addUnexpectedSuccess', 'stopTest'])
     345          self.assertFalse(result.failures)
     346          self.assertFalse(result.expectedFailures)
     347          self.assertEqual(result.unexpectedSuccesses, [test])
     348          self.assertFalse(result.wasSuccessful())
     349  
     350      def test_unexpected_success_subtests(self):
     351          # Success in all subtests counts as the unexpected success of
     352          # the whole test.
     353          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     354              @unittest.expectedFailure
     355              def test_die(self):
     356                  with self.subTest():
     357                      # This one succeeds
     358                      pass
     359                  with self.subTest():
     360                      # So does this one
     361                      pass
     362          events = []
     363          result = LoggingResult(events)
     364          test = Foo("test_die")
     365          self.assertIs(test.run(result), result)
     366          self.assertEqual(events,
     367                           ['startTest',
     368                            'addSubTestSuccess', 'addSubTestSuccess',
     369                            'addUnexpectedSuccess', 'stopTest'])
     370          self.assertFalse(result.failures)
     371          self.assertFalse(result.expectedFailures)
     372          self.assertEqual(result.unexpectedSuccesses, [test])
     373          self.assertFalse(result.wasSuccessful())
     374  
     375      def test_unexpected_success_and_fail_in_cleanup(self):
     376          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     377              @unittest.expectedFailure
     378              def test_die(self):
     379                  pass
     380              def tearDown(self):
     381                  self.fail("bad tearDown")
     382          events = []
     383          result = LoggingResult(events)
     384          test = Foo("test_die")
     385          self.assertIs(test.run(result), result)
     386          self.assertEqual(events,
     387                           ['startTest', 'addFailure', 'stopTest'])
     388          self.assertEqual(len(result.failures), 1)
     389          self.assertIn('AssertionError: bad tearDown', result.failures[0][1])
     390          self.assertFalse(result.expectedFailures)
     391          self.assertFalse(result.unexpectedSuccesses)
     392          self.assertFalse(result.wasSuccessful())
     393  
     394      def test_unexpected_success_and_skip_in_cleanup(self):
     395          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     396              @unittest.expectedFailure
     397              def test_die(self):
     398                  pass
     399              def tearDown(self):
     400                  self.skipTest("skip")
     401          events = []
     402          result = LoggingResult(events)
     403          test = Foo("test_die")
     404          self.assertIs(test.run(result), result)
     405          self.assertEqual(events,
     406                           ['startTest', 'addSkip', 'stopTest'])
     407          self.assertFalse(result.failures)
     408          self.assertFalse(result.expectedFailures)
     409          self.assertFalse(result.unexpectedSuccesses)
     410          self.assertEqual(result.skipped, [(test, "skip")])
     411          self.assertTrue(result.wasSuccessful())
     412  
     413      def test_skip_doesnt_run_setup(self):
     414          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     415              wasSetUp = False
     416              wasTornDown = False
     417              def setUp(self):
     418                  Foo.wasSetUp = True
     419              def tornDown(self):
     420                  Foo.wasTornDown = True
     421              @unittest.skip('testing')
     422              def test_1(self):
     423                  pass
     424  
     425          result = unittest.TestResult()
     426          test = Foo("test_1")
     427          suite = unittest.TestSuite([test])
     428          self.assertIs(suite.run(result), result)
     429          self.assertEqual(result.skipped, [(test, "testing")])
     430          self.assertFalse(Foo.wasSetUp)
     431          self.assertFalse(Foo.wasTornDown)
     432  
     433      def test_decorated_skip(self):
     434          def decorator(func):
     435              def inner(*a):
     436                  return func(*a)
     437              return inner
     438  
     439          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     440              @decorator
     441              @unittest.skip('testing')
     442              def test_1(self):
     443                  pass
     444  
     445          result = unittest.TestResult()
     446          test = Foo("test_1")
     447          suite = unittest.TestSuite([test])
     448          self.assertIs(suite.run(result), result)
     449          self.assertEqual(result.skipped, [(test, "testing")])
     450  
     451      def test_skip_without_reason(self):
     452          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     453              @unittest.skip
     454              def test_1(self):
     455                  pass
     456  
     457          result = unittest.TestResult()
     458          test = Foo("test_1")
     459          suite = unittest.TestSuite([test])
     460          self.assertIs(suite.run(result), result)
     461          self.assertEqual(result.skipped, [(test, "")])
     462  
     463      def test_debug_skipping(self):
     464          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     465              def setUp(self):
     466                  events.append("setUp")
     467              def tearDown(self):
     468                  events.append("tearDown")
     469              def test1(self):
     470                  self.skipTest('skipping exception')
     471                  events.append("test1")
     472              @unittest.skip("skipping decorator")
     473              def test2(self):
     474                  events.append("test2")
     475  
     476          events = []
     477          test = Foo("test1")
     478          with self.assertRaises(unittest.SkipTest) as cm:
     479              test.debug()
     480          self.assertIn("skipping exception", str(cm.exception))
     481          self.assertEqual(events, ["setUp"])
     482  
     483          events = []
     484          test = Foo("test2")
     485          with self.assertRaises(unittest.SkipTest) as cm:
     486              test.debug()
     487          self.assertIn("skipping decorator", str(cm.exception))
     488          self.assertEqual(events, [])
     489  
     490      def test_debug_skipping_class(self):
     491          @unittest.skip("testing")
     492          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     493              def setUp(self):
     494                  events.append("setUp")
     495              def tearDown(self):
     496                  events.append("tearDown")
     497              def test(self):
     498                  events.append("test")
     499  
     500          events = []
     501          test = Foo("test")
     502          with self.assertRaises(unittest.SkipTest) as cm:
     503              test.debug()
     504          self.assertIn("testing", str(cm.exception))
     505          self.assertEqual(events, [])
     506  
     507      def test_debug_skipping_subtests(self):
     508          class ESC[4;38;5;81mFoo(ESC[4;38;5;149munittestESC[4;38;5;149m.ESC[4;38;5;149mTestCase):
     509              def setUp(self):
     510                  events.append("setUp")
     511              def tearDown(self):
     512                  events.append("tearDown")
     513              def test(self):
     514                  with self.subTest(a=1):
     515                      events.append('subtest')
     516                      self.skipTest("skip subtest")
     517                      events.append('end subtest')
     518                  events.append('end test')
     519  
     520          events = []
     521          result = LoggingResult(events)
     522          test = Foo("test")
     523          with self.assertRaises(unittest.SkipTest) as cm:
     524              test.debug()
     525          self.assertIn("skip subtest", str(cm.exception))
     526          self.assertEqual(events, ['setUp', 'subtest'])
     527  
     528  
     529  if __name__ == "__main__":
     530      unittest.main()