test_keyboard.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # Copyright (c) Twisted Matrix Laboratories.
  2. # See LICENSE for details.
  3. """
  4. Tests for interrupting tests with Control-C.
  5. """
  6. from __future__ import absolute_import, division
  7. from twisted.python.compat import NativeStringIO
  8. from twisted.trial import unittest
  9. from twisted.trial import reporter, runner
  10. class TrialTest(unittest.SynchronousTestCase):
  11. def setUp(self):
  12. self.output = NativeStringIO()
  13. self.reporter = reporter.TestResult()
  14. self.loader = runner.TestLoader()
  15. class InterruptInTestTests(TrialTest):
  16. class InterruptedTest(unittest.TestCase):
  17. def test_02_raiseInterrupt(self):
  18. raise KeyboardInterrupt
  19. def test_01_doNothing(self):
  20. pass
  21. def test_03_doNothing(self):
  22. InterruptInTestTests.test_03_doNothing_run = True
  23. def setUp(self):
  24. super(InterruptInTestTests, self).setUp()
  25. self.suite = self.loader.loadClass(InterruptInTestTests.InterruptedTest)
  26. InterruptInTestTests.test_03_doNothing_run = None
  27. def test_setUpOK(self):
  28. self.assertEqual(3, self.suite.countTestCases())
  29. self.assertEqual(0, self.reporter.testsRun)
  30. self.assertFalse(self.reporter.shouldStop)
  31. def test_interruptInTest(self):
  32. runner.TrialSuite([self.suite]).run(self.reporter)
  33. self.assertTrue(self.reporter.shouldStop)
  34. self.assertEqual(2, self.reporter.testsRun)
  35. self.assertFalse(InterruptInTestTests.test_03_doNothing_run,
  36. "test_03_doNothing ran.")
  37. class InterruptInSetUpTests(TrialTest):
  38. testsRun = 0
  39. class InterruptedTest(unittest.TestCase):
  40. def setUp(self):
  41. if InterruptInSetUpTests.testsRun > 0:
  42. raise KeyboardInterrupt
  43. def test_01(self):
  44. InterruptInSetUpTests.testsRun += 1
  45. def test_02(self):
  46. InterruptInSetUpTests.testsRun += 1
  47. InterruptInSetUpTests.test_02_run = True
  48. def setUp(self):
  49. super(InterruptInSetUpTests, self).setUp()
  50. self.suite = self.loader.loadClass(
  51. InterruptInSetUpTests.InterruptedTest)
  52. InterruptInSetUpTests.test_02_run = False
  53. InterruptInSetUpTests.testsRun = 0
  54. def test_setUpOK(self):
  55. self.assertEqual(0, InterruptInSetUpTests.testsRun)
  56. self.assertEqual(2, self.suite.countTestCases())
  57. self.assertEqual(0, self.reporter.testsRun)
  58. self.assertFalse(self.reporter.shouldStop)
  59. def test_interruptInSetUp(self):
  60. runner.TrialSuite([self.suite]).run(self.reporter)
  61. self.assertTrue(self.reporter.shouldStop)
  62. self.assertEqual(2, self.reporter.testsRun)
  63. self.assertFalse(InterruptInSetUpTests.test_02_run,
  64. "test_02 ran")
  65. class InterruptInTearDownTests(TrialTest):
  66. testsRun = 0
  67. class InterruptedTest(unittest.TestCase):
  68. def tearDown(self):
  69. if InterruptInTearDownTests.testsRun > 0:
  70. raise KeyboardInterrupt
  71. def test_01(self):
  72. InterruptInTearDownTests.testsRun += 1
  73. def test_02(self):
  74. InterruptInTearDownTests.testsRun += 1
  75. InterruptInTearDownTests.test_02_run = True
  76. def setUp(self):
  77. super(InterruptInTearDownTests, self).setUp()
  78. self.suite = self.loader.loadClass(
  79. InterruptInTearDownTests.InterruptedTest)
  80. InterruptInTearDownTests.testsRun = 0
  81. InterruptInTearDownTests.test_02_run = False
  82. def test_setUpOK(self):
  83. self.assertEqual(0, InterruptInTearDownTests.testsRun)
  84. self.assertEqual(2, self.suite.countTestCases())
  85. self.assertEqual(0, self.reporter.testsRun)
  86. self.assertFalse(self.reporter.shouldStop)
  87. def test_interruptInTearDown(self):
  88. runner.TrialSuite([self.suite]).run(self.reporter)
  89. self.assertEqual(1, self.reporter.testsRun)
  90. self.assertTrue(self.reporter.shouldStop)
  91. self.assertFalse(InterruptInTearDownTests.test_02_run,
  92. "test_02 ran")