skip_unittest.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Copyright (C) 2010 Apple Inc. All rights reserved.
  2. #
  3. # Redistribution and use in source and binary forms, with or without
  4. # modification, are permitted provided that the following conditions
  5. # are met:
  6. # 1. Redistributions of source code must retain the above copyright
  7. # notice, this list of conditions and the following disclaimer.
  8. # 2. Redistributions in binary form must reproduce the above copyright
  9. # notice, this list of conditions and the following disclaimer in the
  10. # documentation and/or other materials provided with the distribution.
  11. #
  12. # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
  13. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  14. # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  15. # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
  16. # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  17. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  18. # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  19. # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  20. # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  21. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22. import StringIO
  23. import logging
  24. import unittest2 as unittest
  25. from webkitpy.test.skip import skip_if
  26. class SkipTest(unittest.TestCase):
  27. def setUp(self):
  28. self.logger = logging.getLogger(__name__)
  29. self.old_level = self.logger.level
  30. self.logger.setLevel(logging.INFO)
  31. self.old_propagate = self.logger.propagate
  32. self.logger.propagate = False
  33. self.log_stream = StringIO.StringIO()
  34. self.handler = logging.StreamHandler(self.log_stream)
  35. self.logger.addHandler(self.handler)
  36. self.foo_was_called = False
  37. def tearDown(self):
  38. self.logger.removeHandler(self.handler)
  39. self.propagate = self.old_propagate
  40. self.logger.setLevel(self.old_level)
  41. def create_fixture_class(self):
  42. class TestSkipFixture(object):
  43. def __init__(self, callback):
  44. self.callback = callback
  45. def test_foo(self):
  46. self.callback()
  47. return TestSkipFixture
  48. def foo_callback(self):
  49. self.foo_was_called = True
  50. def test_skip_if_false(self):
  51. klass = skip_if(self.create_fixture_class(), False, 'Should not see this message.', logger=self.logger)
  52. klass(self.foo_callback).test_foo()
  53. self.assertEqual(self.log_stream.getvalue(), '')
  54. self.assertTrue(self.foo_was_called)
  55. def test_skip_if_true(self):
  56. klass = skip_if(self.create_fixture_class(), True, 'Should see this message.', logger=self.logger)
  57. klass(self.foo_callback).test_foo()
  58. self.assertEqual(self.log_stream.getvalue(), 'Skipping webkitpy.test.skip_unittest.TestSkipFixture: Should see this message.\n')
  59. self.assertFalse(self.foo_was_called)