/unit_tests/test_skip_plugin.py

https://bitbucket.org/jpellerin/nose/ · Python · 130 lines · 104 code · 24 blank · 2 comment · 3 complexity · dbef33330d540aa31e1c89a31c38b2e3 MD5 · raw file

  1. import unittest
  2. from nose.config import Config
  3. from nose.plugins.skip import Skip, SkipTest
  4. from nose.result import TextTestResult
  5. from StringIO import StringIO
  6. from nose.result import _TextTestResult
  7. from optparse import OptionParser
  8. try:
  9. # 2.7+
  10. from unittest.runner import _WritelnDecorator
  11. except ImportError:
  12. from unittest import _WritelnDecorator
  13. class TestSkipPlugin(unittest.TestCase):
  14. def test_api_present(self):
  15. sk = Skip()
  16. sk.addOptions
  17. sk.configure
  18. sk.prepareTestResult
  19. def test_prepare_patches_result(self):
  20. stream = _WritelnDecorator(StringIO())
  21. res = _TextTestResult(stream, 0, 1)
  22. sk = Skip()
  23. sk.prepareTestResult(res)
  24. res._orig_addError
  25. res._orig_printErrors
  26. res._orig_wasSuccessful
  27. res.skipped
  28. self.assertEqual(res.errorClasses,
  29. {SkipTest: (res.skipped, 'SKIP', False)})
  30. # result w/out print works too
  31. res = unittest.TestResult()
  32. sk = Skip()
  33. sk.prepareTestResult(res)
  34. res._orig_addError
  35. res.skipped
  36. self.assertEqual(res.errorClasses,
  37. {SkipTest: (res.skipped, 'SKIP', False)})
  38. def test_patched_result_handles_skip(self):
  39. res = unittest.TestResult()
  40. sk = Skip()
  41. sk.prepareTestResult(res)
  42. class TC(unittest.TestCase):
  43. def test(self):
  44. raise SkipTest('skip me')
  45. test = TC('test')
  46. test(res)
  47. assert not res.errors, "Skip was not caught: %s" % res.errors
  48. assert res.skipped
  49. assert res.skipped[0][0] is test
  50. def test_patches_only_when_needed(self):
  51. class NoPatch(unittest.TestResult):
  52. def __init__(self):
  53. self.errorClasses = {}
  54. res = NoPatch()
  55. sk = Skip()
  56. sk.prepareTestResult(res)
  57. assert not hasattr(res, '_orig_addError'), \
  58. "Skip patched a result class it didn't need to patch"
  59. def test_skip_output(self):
  60. class TC(unittest.TestCase):
  61. def test(self):
  62. raise SkipTest('skip me')
  63. stream = _WritelnDecorator(StringIO())
  64. res = _TextTestResult(stream, 0, 1)
  65. sk = Skip()
  66. sk.prepareTestResult(res)
  67. test = TC('test')
  68. test(res)
  69. assert not res.errors, "Skip was not caught: %s" % res.errors
  70. assert res.skipped
  71. res.printErrors()
  72. out = stream.getvalue()
  73. print out
  74. assert out
  75. assert out.strip() == "S"
  76. assert res.wasSuccessful()
  77. def test_skip_output_verbose(self):
  78. class TC(unittest.TestCase):
  79. def test(self):
  80. raise SkipTest('skip me too')
  81. stream = _WritelnDecorator(StringIO())
  82. res = _TextTestResult(stream, 0, verbosity=2)
  83. sk = Skip()
  84. sk.prepareTestResult(res)
  85. test = TC('test')
  86. test(res)
  87. assert not res.errors, "Skip was not caught: %s" % res.errors
  88. assert res.skipped
  89. res.printErrors()
  90. out = stream.getvalue()
  91. print out
  92. assert out
  93. assert ' ... SKIP' in out
  94. assert 'skip me too' in out
  95. def test_enabled_by_default(self):
  96. sk = Skip()
  97. assert sk.enabled, "Skip was not enabled by default"
  98. def test_can_be_disabled(self):
  99. parser = OptionParser()
  100. sk = Skip()
  101. sk.addOptions(parser)
  102. options, args = parser.parse_args(['--no-skip'])
  103. sk.configure(options, Config())
  104. assert not sk.enabled, "Skip was not disabled by noSkip option"
  105. if __name__ == '__main__':
  106. unittest.main()