""" Tests for engine.render module. """ import pytest from engine import config, render class TestDefaultGradients: """Tests for default gradient fallback functions.""" def test_default_green_gradient_length(self): """_default_green_gradient returns 12 colors.""" gradient = render._default_green_gradient() assert len(gradient) == 12 def test_default_green_gradient_is_list(self): """_default_green_gradient returns a list.""" gradient = render._default_green_gradient() assert isinstance(gradient, list) def test_default_green_gradient_all_strings(self): """_default_green_gradient returns list of ANSI code strings.""" gradient = render._default_green_gradient() assert all(isinstance(code, str) for code in gradient) def test_default_magenta_gradient_length(self): """_default_magenta_gradient returns 12 colors.""" gradient = render._default_magenta_gradient() assert len(gradient) == 12 def test_default_magenta_gradient_is_list(self): """_default_magenta_gradient returns a list.""" gradient = render._default_magenta_gradient() assert isinstance(gradient, list) def test_default_magenta_gradient_all_strings(self): """_default_magenta_gradient returns list of ANSI code strings.""" gradient = render._default_magenta_gradient() assert all(isinstance(code, str) for code in gradient) class TestLrGradientUsesActiveTheme: """Tests for lr_gradient using active theme.""" def test_lr_gradient_uses_active_theme_when_cols_none(self): """lr_gradient uses ACTIVE_THEME.main_gradient when cols=None.""" # Save original state original_theme = config.ACTIVE_THEME try: # Set a theme config.set_active_theme("green") # Create simple test data rows = ["text"] # Call without cols parameter (cols=None) result = render.lr_gradient(rows, offset=0.0) # Should not raise and should return colored output assert isinstance(result, list) assert len(result) == 1 # Should have ANSI codes (no plain "text") assert result[0] != "text" finally: # Restore original state config.ACTIVE_THEME = original_theme def test_lr_gradient_fallback_when_no_theme(self): """lr_gradient uses fallback green when ACTIVE_THEME is None.""" # Save original state original_theme = config.ACTIVE_THEME try: # Clear the theme config.ACTIVE_THEME = None # Create simple test data rows = ["text"] # Call without cols parameter (should use fallback) result = render.lr_gradient(rows, offset=0.0) # Should not raise and should return colored output assert isinstance(result, list) assert len(result) == 1 # Should have ANSI codes (no plain "text") assert result[0] != "text" finally: # Restore original state config.ACTIVE_THEME = original_theme def test_lr_gradient_explicit_cols_parameter_still_works(self): """lr_gradient with explicit cols parameter overrides theme.""" # Custom gradient custom_cols = ["\033[38;5;1m", "\033[38;5;2m"] * 6 rows = ["xy"] result = render.lr_gradient(rows, offset=0.0, cols=custom_cols) # Should use the provided cols assert isinstance(result, list) assert len(result) == 1 def test_lr_gradient_respects_cols_parameter_name(self): """lr_gradient accepts cols as keyword argument.""" custom_cols = ["\033[38;5;1m", "\033[38;5;2m"] * 6 rows = ["xy"] # Call with cols as keyword result = render.lr_gradient(rows, offset=0.0, cols=custom_cols) assert isinstance(result, list) class TestLrGradientBasicFunctionality: """Tests to ensure lr_gradient basic functionality still works.""" def test_lr_gradient_colors_non_space_chars(self): """lr_gradient colors non-space characters.""" rows = ["hello"] # Set a theme for the test original_theme = config.ACTIVE_THEME try: config.set_active_theme("green") result = render.lr_gradient(rows, offset=0.0) # Result should have ANSI codes assert any("\033[" in r for r in result), "Expected ANSI codes in result" finally: config.ACTIVE_THEME = original_theme def test_lr_gradient_preserves_spaces(self): """lr_gradient preserves spaces in output.""" rows = ["a b c"] original_theme = config.ACTIVE_THEME try: config.set_active_theme("green") result = render.lr_gradient(rows, offset=0.0) # Spaces should be preserved (not colored) assert " " in result[0] finally: config.ACTIVE_THEME = original_theme def test_lr_gradient_empty_rows(self): """lr_gradient handles empty rows correctly.""" rows = [""] original_theme = config.ACTIVE_THEME try: config.set_active_theme("green") result = render.lr_gradient(rows, offset=0.0) assert result == [""] finally: config.ACTIVE_THEME = original_theme def test_lr_gradient_multiple_rows(self): """lr_gradient handles multiple rows.""" rows = ["row1", "row2", "row3"] original_theme = config.ACTIVE_THEME try: config.set_active_theme("green") result = render.lr_gradient(rows, offset=0.0) assert len(result) == 3 finally: config.ACTIVE_THEME = original_theme