blob: 6467dc9914954897f45e6eb2c446a68775243ed4 [file] [log] [blame]
#!/usr/bin/env python -tt
"""
unittests.test_ansi
"""
try:
import unittest2 as unittest
except ImportError:
import unittest
import mock
import re
import StringIO
import sys
import dbsign.ansi as A
class TestAnsi(unittest.TestCase):
def setUp(self):
self.test_text = "The quick brown fox, etc."
self.codes = A._ANSI_CODES
re_ansi = r"\033\[.*?m"
ansi_msg_pattern = r'(?P<begin>{0})(?P<middle>.*?)(?P<end>{0})'
self.re_ansi_msg = re.compile(ansi_msg_pattern.format(re_ansi))
@unittest.skipUnless(sys.stdout.isatty(), A.WARN("requires tty"))
def test_ansi_tty(self):
msg = self.test_text
for color in self.codes:
with self.subTest(color):
ansi_msg = A.ANSI(color, msg)
self.assertTrue(ansi_msg.startswith(self.codes[color]))
self.assertTrue(ansi_msg.endswith(self.codes['clear']))
@unittest.skipUnless(sys.stdout.isatty(), A.WARN("requires tty"))
def test_ansi_convenience_tty(self):
msg = self.test_text
funcs = [A.OK, A.INFO, A.WARN, A.ERROR]
for func in funcs:
with self.subTest(func=func.func_name):
ansi_msg = func(msg)
m = self.re_ansi_msg.match(ansi_msg)
self.assertTrue(m)
self.assertIn(m.group('begin'), self.codes.values())
self.assertEqual(m.group('middle'), msg)
self.assertEqual(m.group('end'), self.codes['clear'])
@mock.patch('sys.stdout', new_callable=StringIO.StringIO)
def test_ansi_notty(self, mock_stdout):
msg = self.test_text
for color in self.codes:
with self.subTest(color):
ansi_msg = A.ANSI(color, msg)
self.assertEqual(msg, ansi_msg)
@mock.patch('sys.stdout', new_callable=StringIO.StringIO)
def test_ansi_convenience_notty(self, mock_stdout):
msg = self.test_text
funcs = [A.OK, A.INFO, A.WARN, A.ERROR]
for func in funcs:
with self.subTest(func=func.func_name):
self.assertEqual(msg, func(msg))