log_printer_test.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from __future__ import absolute_import
  2. from __future__ import unicode_literals
  3. import os
  4. from .. import unittest
  5. from compose.cli.log_printer import LogPrinter
  6. class LogPrinterTest(unittest.TestCase):
  7. def get_default_output(self, monochrome=False):
  8. def reader(*args, **kwargs):
  9. yield "hello\nworld"
  10. container = MockContainer(reader)
  11. output = run_log_printer([container], monochrome=monochrome)
  12. return output
  13. def test_single_container(self):
  14. output = self.get_default_output()
  15. self.assertIn('hello', output)
  16. self.assertIn('world', output)
  17. def test_monochrome(self):
  18. output = self.get_default_output(monochrome=True)
  19. self.assertNotIn('\033[', output)
  20. def test_polychrome(self):
  21. output = self.get_default_output()
  22. self.assertIn('\033[', output)
  23. def test_unicode(self):
  24. glyph = u'\u2022'.encode('utf-8')
  25. def reader(*args, **kwargs):
  26. yield glyph + b'\n'
  27. container = MockContainer(reader)
  28. output = run_log_printer([container])
  29. self.assertIn(glyph, output)
  30. def run_log_printer(containers, monochrome=False):
  31. r, w = os.pipe()
  32. reader, writer = os.fdopen(r, 'r'), os.fdopen(w, 'w')
  33. printer = LogPrinter(containers, output=writer, monochrome=monochrome)
  34. printer.run()
  35. writer.close()
  36. return reader.read()
  37. class MockContainer(object):
  38. def __init__(self, reader):
  39. self._reader = reader
  40. @property
  41. def name(self):
  42. return 'myapp_web_1'
  43. @property
  44. def name_without_project(self):
  45. return 'web_1'
  46. def attach(self, *args, **kwargs):
  47. return self._reader()
  48. def wait(self, *args, **kwargs):
  49. return 0