summaryrefslogtreecommitdiffstats
path: root/tests/test_highlighter.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_highlighter.py')
-rw-r--r--tests/test_highlighter.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/test_highlighter.py b/tests/test_highlighter.py
new file mode 100644
index 0000000..da5fc9b
--- /dev/null
+++ b/tests/test_highlighter.py
@@ -0,0 +1,83 @@
+"""Tests for the higlighter classes."""
+import pytest
+from typing import List
+
+from rich.highlighter import NullHighlighter, ReprHighlighter
+from rich.text import Span, Text
+
+
+def test_wrong_type():
+ highlighter = NullHighlighter()
+ with pytest.raises(TypeError):
+ highlighter([])
+
+
+highlight_tests = [
+ ("", []),
+ (" ", []),
+ (
+ "<foo>",
+ [
+ Span(0, 1, "repr.tag_start"),
+ Span(1, 4, "repr.tag_name"),
+ Span(4, 5, "repr.tag_end"),
+ ],
+ ),
+ (
+ "False True None",
+ [
+ Span(0, 5, "repr.bool_false"),
+ Span(6, 10, "repr.bool_true"),
+ Span(11, 15, "repr.none"),
+ ],
+ ),
+ ("foo=bar", [Span(0, 3, "repr.attrib_name"), Span(4, 7, "repr.attrib_value")]),
+ (
+ 'foo="bar"',
+ [
+ Span(0, 3, "repr.attrib_name"),
+ Span(4, 9, "repr.attrib_value"),
+ Span(4, 9, "repr.str"),
+ ],
+ ),
+ ("( )", [Span(0, 1, "repr.brace"), Span(2, 3, "repr.brace")]),
+ ("[ ]", [Span(0, 1, "repr.brace"), Span(2, 3, "repr.brace")]),
+ ("{ }", [Span(0, 1, "repr.brace"), Span(2, 3, "repr.brace")]),
+ (" 1 ", [Span(1, 2, "repr.number")]),
+ (" 1.2 ", [Span(1, 4, "repr.number")]),
+ (" 0xff ", [Span(1, 5, "repr.number")]),
+ (" 1e10 ", [Span(1, 5, "repr.number")]),
+ (" /foo ", [Span(1, 2, "repr.path"), Span(2, 5, "repr.filename")]),
+ (" /foo/bar.html ", [Span(1, 6, "repr.path"), Span(6, 14, "repr.filename")]),
+ ("01-23-45-67-89-AB", [Span(0, 17, "repr.eui48")]), # 6x2 hyphen
+ ("01-23-45-FF-FE-67-89-AB", [Span(0, 23, "repr.eui64")]), # 8x2 hyphen
+ ("01:23:45:67:89:AB", [Span(0, 17, "repr.ipv6")]), # 6x2 colon
+ ("01:23:45:FF:FE:67:89:AB", [Span(0, 23, "repr.ipv6")]), # 8x2 colon
+ ("0123.4567.89AB", [Span(0, 14, "repr.eui48")]), # 3x4 dot
+ ("0123.45FF.FE67.89AB", [Span(0, 19, "repr.eui64")]), # 4x4 dot
+ ("ed-ed-ed-ed-ed-ed", [Span(0, 17, "repr.eui48")]), # lowercase
+ ("ED-ED-ED-ED-ED-ED", [Span(0, 17, "repr.eui48")]), # uppercase
+ ("Ed-Ed-Ed-Ed-Ed-Ed", [Span(0, 17, "repr.eui48")]), # mixed case
+ ("0-00-1-01-2-02", [Span(0, 14, "repr.eui48")]), # dropped zero
+ (" https://example.org ", [Span(1, 20, "repr.url")]),
+ (" http://example.org ", [Span(1, 19, "repr.url")]),
+ (" http://example.org/index.html ", [Span(1, 30, "repr.url")]),
+ ("No place like 127.0.0.1", [Span(14, 23, "repr.ipv4")]),
+ ("''", [Span(0, 2, "repr.str")]),
+ ("'hello'", [Span(0, 7, "repr.str")]),
+ ("'''hello'''", [Span(0, 11, "repr.str")]),
+ ('""', [Span(0, 2, "repr.str")]),
+ ('"hello"', [Span(0, 7, "repr.str")]),
+ ('"""hello"""', [Span(0, 11, "repr.str")]),
+ ("\\'foo'", []),
+]
+
+
+@pytest.mark.parametrize("test, spans", highlight_tests)
+def test_highlight_regex(test: str, spans: List[Span]):
+ """Tests for the regular expressions used in ReprHighlighter."""
+ text = Text(test)
+ highlighter = ReprHighlighter()
+ highlighter.highlight(text)
+ print(text.spans)
+ assert text.spans == spans