SXXXXXXX_MarkdownConverter/test_improvements.py
2025-12-03 10:07:33 +01:00

157 lines
4.6 KiB
Python

"""
Test script for the improvements made to markdownconverter.
Tests the new features and enhancements.
"""
import os
import sys
from pathlib import Path
# Add the project root to the path
sys.path.insert(0, str(Path(__file__).parent))
from markdownconverter.utils.error_handler import (
classify_error,
get_user_friendly_message,
ErrorCategory,
)
from markdownconverter.core.core import ConverterNotFoundError, TemplatePlaceholderError
def test_error_classification():
"""Test that errors are classified correctly."""
print("Testing error classification...")
# Test FileNotFoundError
err = FileNotFoundError("test.txt not found")
category = classify_error(err)
assert (
category == ErrorCategory.FILE_NOT_FOUND
), f"Expected FILE_NOT_FOUND, got {category}"
print("✅ FileNotFoundError classified correctly")
# Test TemplatePlaceholderError
err = TemplatePlaceholderError("Missing placeholder")
category = classify_error(err)
assert (
category == ErrorCategory.TEMPLATE_ERROR
), f"Expected TEMPLATE_ERROR, got {category}"
print("✅ TemplatePlaceholderError classified correctly")
# Test ConverterNotFoundError
err = ConverterNotFoundError("No converter found")
category = classify_error(err)
assert (
category == ErrorCategory.CONVERTER_MISSING
), f"Expected CONVERTER_MISSING, got {category}"
print("✅ ConverterNotFoundError classified correctly")
# Test PermissionError
err = PermissionError("Access denied")
category = classify_error(err)
assert (
category == ErrorCategory.PERMISSION_ERROR
), f"Expected PERMISSION_ERROR, got {category}"
print("✅ PermissionError classified correctly")
# Test timeout
err = RuntimeError("Operation timed out")
category = classify_error(err)
assert (
category == ErrorCategory.TIMEOUT_ERROR
), f"Expected TIMEOUT_ERROR, got {category}"
print("✅ Timeout error classified correctly")
print("\n✅ All error classification tests passed!\n")
def test_user_friendly_messages():
"""Test that user-friendly messages are generated correctly."""
print("Testing user-friendly messages...")
categories = [
ErrorCategory.FILE_NOT_FOUND,
ErrorCategory.TEMPLATE_ERROR,
ErrorCategory.CONVERTER_MISSING,
ErrorCategory.CONVERSION_FAILED,
ErrorCategory.PERMISSION_ERROR,
ErrorCategory.TIMEOUT_ERROR,
ErrorCategory.UNKNOWN,
]
for category in categories:
err = Exception(f"Test error for {category}")
title, message = get_user_friendly_message(category, err)
assert title, f"Title should not be empty for {category}"
assert message, f"Message should not be empty for {category}"
assert (
"Test error" in message
), f"Original error should be in message for {category}"
print(f"{category}: '{title}' message generated")
print("\n✅ All message generation tests passed!\n")
def test_imports():
"""Test that all new imports work correctly."""
print("Testing imports...")
try:
from markdownconverter.core.core import (
combine_markdown_files,
convert_markdown_to_docx_with_pandoc,
)
print("✅ Core functions imported successfully")
from markdownconverter.utils.error_handler import (
handle_conversion_error,
safe_conversion,
)
print("✅ Error handler functions imported successfully")
print("\n✅ All imports successful!\n")
except ImportError as e:
print(f"❌ Import failed: {e}")
sys.exit(1)
def main():
print("=" * 60)
print("MARKDOWN CONVERTER - IMPROVEMENTS TEST SUITE")
print("=" * 60)
print()
try:
test_imports()
test_error_classification()
test_user_friendly_messages()
print("=" * 60)
print("✅ ALL TESTS PASSED!")
print("=" * 60)
print()
print("Improvements summary:")
print("1. ✅ nl2br extension added to PDF converter")
print("2. ✅ Pandoc consolidation with pypandoc")
print("3. ✅ LibreOffice retry logic implemented")
print("4. ✅ Unified error handling system created")
print("5. ✅ Batch converter preview and confirmation")
print()
except AssertionError as e:
print(f"\n❌ TEST FAILED: {e}")
sys.exit(1)
except Exception as e:
print(f"\n❌ UNEXPECTED ERROR: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()