test_formatter.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # Licensed under the Apache License, Version 2.0 (the "License"); you may
  2. # not use this file except in compliance with the License. You may obtain
  3. # a copy of the License at
  4. #
  5. # http://www.apache.org/licenses/LICENSE-2.0
  6. #
  7. # Unless required by applicable law or agreed to in writing, software
  8. # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  9. # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  10. # License for the specific language governing permissions and limitations
  11. # under the License.
  12. import logging
  13. import unittest
  14. import six
  15. import daiquiri
  16. class TestColorExtrasFormatter(unittest.TestCase):
  17. @classmethod
  18. def setUpClass(cls):
  19. cls.logger = daiquiri.getLogger('my_module')
  20. cls.logger.setLevel(logging.INFO)
  21. cls.stream = six.moves.StringIO()
  22. cls.handler = daiquiri.handlers.TTYDetectorStreamHandler(cls.stream)
  23. cls.logger.logger.addHandler(cls.handler)
  24. super(TestColorExtrasFormatter, cls).setUpClass()
  25. def setUp(self):
  26. # Couldn't get readline() to return anything no matter what I tried, so
  27. # getvalue() is the only way to see what's in the stream. However this
  28. # requires the stream to be reset every time.
  29. self.stream.close()
  30. self.stream = six.moves.StringIO()
  31. self.handler.stream = self.stream
  32. super(TestColorExtrasFormatter, self).setUp()
  33. def test_no_keywords(self):
  34. format_string = '%(levelname)s %(name)s%(extras)s: %(message)s'
  35. formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string)
  36. self.handler.setFormatter(formatter)
  37. self.logger.info('test message')
  38. self.assertEqual(self.stream.getvalue(),
  39. 'INFO my_module: test message\n')
  40. def test_no_keywords_with_extras(self):
  41. format_string = '%(levelname)s %(name)s%(extras)s: %(message)s'
  42. formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string)
  43. self.handler.setFormatter(formatter)
  44. self.logger.info('test message', test="a")
  45. self.assertEqual(self.stream.getvalue(),
  46. 'INFO my_module [test: a]: test message\n')
  47. def test_empty_keywords(self):
  48. format_string = '%(levelname)s %(name)s%(extras)s: %(message)s'
  49. formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string,
  50. keywords=[])
  51. self.handler.setFormatter(formatter)
  52. self.logger.info('test message', test="a")
  53. self.assertEqual(self.stream.getvalue(),
  54. 'INFO my_module [test: a]: test message\n')
  55. def test_keywords_no_extras(self):
  56. format_string = ('%(levelname)s %(name)s'
  57. ' %(test)s%(extras)s: %(message)s')
  58. formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string,
  59. keywords=["test"])
  60. self.handler.setFormatter(formatter)
  61. self.logger.info('test message', test="a")
  62. self.assertEqual(self.stream.getvalue(),
  63. 'INFO my_module a: test message\n')
  64. def test_keywords_with_extras(self):
  65. format_string = ('%(levelname)s %(name)s'
  66. ' %(test)s%(extras)s: %(message)s')
  67. formatter = daiquiri.formatter.ColorExtrasFormatter(fmt=format_string,
  68. keywords=["test"])
  69. self.handler.setFormatter(formatter)
  70. self.logger.info('test message', test="a", test2="b")
  71. self.assertEqual(self.stream.getvalue(),
  72. 'INFO my_module a [test2: b]: test message\n')