157 lines
4.6 KiB
Python
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()
|