"""Tests for syntax highlighting module.""" from mudlib.render.highlight import highlight def test_highlight_python_returns_ansi_codes(): """Test that Python code returns string with ANSI escape codes.""" code = "def foo():\n return 42" result = highlight(code, language="python") # Should contain ANSI escape codes assert "\033[" in result # Should contain the original code somewhere assert "def" in result assert "foo" in result def test_highlight_toml_returns_ansi_codes(): """Test that TOML code returns string with ANSI escape codes.""" code = '[section]\nkey = "value"' result = highlight(code, language="toml") # Should contain ANSI escape codes assert "\033[" in result # Should contain the original code somewhere assert "section" in result assert "key" in result def test_highlight_truecolor_depth(): """Test with color_depth=truecolor uses appropriate formatter.""" code = "x = 1" result = highlight(code, language="python", color_depth="truecolor") # Should contain ANSI codes (either 256-color or truecolor format) assert "\033[" in result # Should contain the code assert "x" in result def test_highlight_256_depth(): """Test with color_depth=256 uses 256-color formatter.""" code = "x = 1" result = highlight(code, language="python", color_depth="256") # Should contain ANSI codes assert "\033[" in result # Should contain the code assert "x" in result def test_highlight_16_depth(): """Test with color_depth=16 uses basic terminal formatter.""" code = "x = 1" result = highlight(code, language="python", color_depth="16") # Should contain ANSI codes assert "\033[" in result # Should contain the code assert "x" in result def test_highlight_unknown_language_returns_original(): """Test unknown language returns original text unmodified (no crash).""" code = "some random text" result = highlight(code, language="unknown_language_xyz") # Should return original text unchanged assert result == code # Should not contain ANSI codes assert "\033[" not in result def test_highlight_empty_string(): """Test empty string input returns empty string.""" result = highlight("", language="python") assert result == "" def test_highlight_no_extra_trailing_newlines(): """Test that output doesn't end with extra newlines.""" code = "x = 1" result = highlight(code, language="python") # Pygments tends to add a trailing newline, we should strip it # The original code has no trailing newline, so neither should the result assert not result.endswith("\n\n") # A single trailing newline might be ok if original had one, # but our test input doesn't, so result shouldn't either assert not result.endswith("\n") def test_highlight_with_line_numbers(): """Test highlighting with line numbers enabled.""" code = "def foo():\n return 42\n return 99" result = highlight(code, language="python", line_numbers=True) # Should contain line numbers assert "1" in result assert "2" in result assert "3" in result # Should still contain ANSI codes assert "\033[" in result # Should contain the code (split by ANSI codes, so check separately) assert "def" in result assert "foo" in result assert "return" in result assert "42" in result def test_highlight_line_numbers_use_ansi_dim(): """Test that line numbers use ANSI dim/gray styling.""" code = "x = 1\ny = 2" result = highlight(code, language="python", line_numbers=True) # Line numbers should have some ANSI styling # We'll check that there are escape codes before the digits assert "\033[" in result # This is a bit fragile, but we can check that the result # starts with an escape code (for line number 1) lines = result.split("\n") # First line should start with escape code or digit assert lines[0][0] in ("\033", "1", " ") def test_highlight_preserves_code_with_trailing_newline(): """Test code with trailing newline is handled correctly.""" code = "x = 1\n" result = highlight(code, language="python") # Should contain the code assert "x" in result # Should not accumulate extra newlines beyond what Pygments naturally adds # We strip the trailing newline, so even input with \n shouldn't get extra assert not result.endswith("\n\n")