summaryrefslogtreecommitdiff
path: root/tests/test_terminal_formatter.py
diff options
context:
space:
mode:
authorTim Hatch <tim@timhatch.com>2015-10-07 06:46:26 -0700
committerTim Hatch <tim@timhatch.com>2015-10-07 06:46:26 -0700
commita8e688ec86fe8258f7095f880b8df3743eb71347 (patch)
tree8da2bab2a4a78cfcbe4962fcb8e62eac4f6ecf86 /tests/test_terminal_formatter.py
parent83704bc3531bcd33c55870cb45284dbc775421bc (diff)
downloadpygments-a8e688ec86fe8258f7095f880b8df3743eb71347.tar.gz
Address problems with linenos in terminal formatter by rewriting
Fixes #1147
Diffstat (limited to 'tests/test_terminal_formatter.py')
-rw-r--r--tests/test_terminal_formatter.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/test_terminal_formatter.py b/tests/test_terminal_formatter.py
new file mode 100644
index 00000000..07337cd5
--- /dev/null
+++ b/tests/test_terminal_formatter.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+"""
+ Pygments terminal formatter tests
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from __future__ import print_function
+
+import unittest
+import re
+
+from pygments.util import StringIO
+from pygments.lexers.sql import PlPgsqlLexer
+from pygments.formatters import TerminalFormatter
+
+DEMO_TEXT = '''\
+-- comment
+select
+* from bar;
+'''
+DEMO_LEXER = PlPgsqlLexer
+DEMO_TOKENS = list(DEMO_LEXER().get_tokens(DEMO_TEXT))
+
+ANSI_RE = re.compile(r'\x1b[\w\W]*?m')
+
+def strip_ansi(x):
+ return ANSI_RE.sub('', x)
+
+class TerminalFormatterTest(unittest.TestCase):
+ def test_reasonable_output(self):
+ out = StringIO()
+ TerminalFormatter().format(DEMO_TOKENS, out)
+ plain = strip_ansi(out.getvalue())
+ self.assertEqual(DEMO_TEXT.count('\n'), plain.count('\n'))
+ print(repr(plain))
+
+ for a, b in zip(DEMO_TEXT.splitlines(), plain.splitlines()):
+ self.assertEqual(a, b)
+
+ def test_reasonable_output_lineno(self):
+ out = StringIO()
+ TerminalFormatter(linenos=True).format(DEMO_TOKENS, out)
+ plain = strip_ansi(out.getvalue())
+ self.assertEqual(DEMO_TEXT.count('\n') + 1, plain.count('\n'))
+ print(repr(plain))
+
+ for a, b in zip(DEMO_TEXT.splitlines(), plain.splitlines()):
+ self.assertTrue(a in b)