blob: 6467dc9914954897f45e6eb2c446a68775243ed4 [file] [log] [blame]
Tim Hammerquist545ba4e2017-12-12 02:36:17 +00001#!/usr/bin/env python -tt
2
3"""
4unittests.test_ansi
5"""
6
7try:
8 import unittest2 as unittest
9except ImportError:
10 import unittest
11
12import mock
13import re
14import StringIO
15import sys
16
17import dbsign.ansi as A
18
19
20class TestAnsi(unittest.TestCase):
21 def setUp(self):
22 self.test_text = "The quick brown fox, etc."
23 self.codes = A._ANSI_CODES
24 re_ansi = r"\033\[.*?m"
25 ansi_msg_pattern = r'(?P<begin>{0})(?P<middle>.*?)(?P<end>{0})'
26 self.re_ansi_msg = re.compile(ansi_msg_pattern.format(re_ansi))
27
28 @unittest.skipUnless(sys.stdout.isatty(), A.WARN("requires tty"))
29 def test_ansi_tty(self):
30 msg = self.test_text
31
32 for color in self.codes:
33 with self.subTest(color):
34 ansi_msg = A.ANSI(color, msg)
35 self.assertTrue(ansi_msg.startswith(self.codes[color]))
36 self.assertTrue(ansi_msg.endswith(self.codes['clear']))
37
38 @unittest.skipUnless(sys.stdout.isatty(), A.WARN("requires tty"))
39 def test_ansi_convenience_tty(self):
40 msg = self.test_text
41 funcs = [A.OK, A.INFO, A.WARN, A.ERROR]
42
43 for func in funcs:
44 with self.subTest(func=func.func_name):
45 ansi_msg = func(msg)
46 m = self.re_ansi_msg.match(ansi_msg)
47 self.assertTrue(m)
48 self.assertIn(m.group('begin'), self.codes.values())
49 self.assertEqual(m.group('middle'), msg)
50 self.assertEqual(m.group('end'), self.codes['clear'])
51
52 @mock.patch('sys.stdout', new_callable=StringIO.StringIO)
53 def test_ansi_notty(self, mock_stdout):
54 msg = self.test_text
55
56 for color in self.codes:
57 with self.subTest(color):
58 ansi_msg = A.ANSI(color, msg)
59 self.assertEqual(msg, ansi_msg)
60
61 @mock.patch('sys.stdout', new_callable=StringIO.StringIO)
62 def test_ansi_convenience_notty(self, mock_stdout):
63 msg = self.test_text
64 funcs = [A.OK, A.INFO, A.WARN, A.ERROR]
65
66 for func in funcs:
67 with self.subTest(func=func.func_name):
68 self.assertEqual(msg, func(msg))