mirror of
https://github.com/ndrscalia/asciify-them.git
synced 2026-02-20 07:34:04 -05:00
103 lines
4.1 KiB
Python
103 lines
4.1 KiB
Python
"""Tests for core.asciify() function."""
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from asciify import asciify
|
|
|
|
|
|
class TestAsciify:
|
|
"""Test suite for the main asciify function."""
|
|
|
|
def test_asciify_returns_string(self, test_image_path):
|
|
"""Test that asciify returns a string."""
|
|
result = asciify(str(test_image_path), width=80, height=40)
|
|
assert isinstance(result, str)
|
|
assert len(result) > 0
|
|
|
|
def test_asciify_color_mode(self, small_test_image_path):
|
|
"""Test color mode output contains ANSI color codes."""
|
|
result = asciify(str(small_test_image_path), color_mode="color", width=20, height=10)
|
|
# Check for ANSI color escape sequences
|
|
assert "\033[38;2;" in result
|
|
|
|
def test_asciify_bw_mode(self, small_test_image_path):
|
|
"""Test black and white mode output."""
|
|
result = asciify(str(small_test_image_path), color_mode="bw", width=20, height=10)
|
|
# Should still have ANSI codes but with white color (255;255;255)
|
|
assert "\033[38;2;255;255;255m" in result
|
|
|
|
def test_asciify_with_edges(self, test_image_path):
|
|
"""Test edge detection mode."""
|
|
result = asciify(str(test_image_path), edges_detection=True, width=80, height=40)
|
|
assert isinstance(result, str)
|
|
assert len(result) > 0
|
|
# Edge characters should be present
|
|
edge_chars = ["|", "_", "/", "\\"]
|
|
assert any(char in result for char in edge_chars)
|
|
|
|
def test_asciify_custom_dimensions(self, small_test_image_path):
|
|
"""Test custom width and height parameters."""
|
|
result = asciify(str(small_test_image_path), width=20, height=10)
|
|
lines = result.split("\n")
|
|
# Should have approximately the specified height
|
|
assert len(lines) <= 12 # Allow some margin
|
|
|
|
@pytest.mark.skip(reason="cv2.imread returns None instead of raising, needs implementation fix")
|
|
def test_asciify_invalid_path(self):
|
|
"""Test that invalid path raises error for nonexistent file."""
|
|
# TODO: Add proper error handling for None image in ImgProcessor
|
|
with pytest.raises(AttributeError): # Will raise when trying to access None.shape
|
|
asciify("/nonexistent/path/image.jpg", width=20, height=10)
|
|
|
|
def test_asciify_with_pathlib(self, test_image_path):
|
|
"""Test that Path objects work as input."""
|
|
result = asciify(str(test_image_path), width=80, height=40)
|
|
assert isinstance(result, str)
|
|
assert len(result) > 0
|
|
|
|
def test_asciify_output_has_newlines(self, small_test_image_path):
|
|
"""Test that output contains multiple lines."""
|
|
result = asciify(str(small_test_image_path), width=20, height=10)
|
|
assert "\n" in result
|
|
assert len(result.split("\n")) > 1
|
|
|
|
def test_asciify_different_factor_types(self, small_test_image_path):
|
|
"""Test different downsampling factor types."""
|
|
for f_type in ["in_terminal", "wide", "tall"]:
|
|
result = asciify(str(small_test_image_path), f_type=f_type, height=20, width=40)
|
|
assert isinstance(result, str)
|
|
assert len(result) > 0
|
|
|
|
def test_asciify_custom_blur(self, small_test_image_path):
|
|
"""Test custom blur parameters."""
|
|
result = asciify(
|
|
str(small_test_image_path),
|
|
blur=[(5, 5), 1.0, 1.0],
|
|
edges_detection=True,
|
|
width=20,
|
|
height=10
|
|
)
|
|
assert isinstance(result, str)
|
|
|
|
def test_asciify_custom_canny_threshold(self, small_test_image_path):
|
|
"""Test custom Canny edge detection thresholds."""
|
|
result = asciify(
|
|
str(small_test_image_path),
|
|
canny_thresh=(100, 200),
|
|
edges_detection=True,
|
|
width=20,
|
|
height=10
|
|
)
|
|
assert isinstance(result, str)
|
|
|
|
def test_asciify_no_aspect_ratio(self, small_test_image_path):
|
|
"""Test disabling aspect ratio preservation."""
|
|
result = asciify(
|
|
str(small_test_image_path),
|
|
keep_aspect_ratio=False,
|
|
width=20,
|
|
height=10
|
|
)
|
|
assert isinstance(result, str)
|