sinhala-subtitle-hardcoder / test_environment.py
000x's picture
add : all
51e419e
Raw History Blame Contribute Delete
5.78 kB
#!/usr/bin/env python3
"""
Test script for Sinhala Subtitle Hardcoder
Run this to test functionality before deploying to Hugging Face
"""
import os
import sys
def test_imports():
"""Test if all required packages are installed"""
print("Testing imports...")
try:
import gradio as gr
print("✅ Gradio imported successfully")
except ImportError:
print("❌ Gradio not found. Run: pip install gradio")
return False
try:
import requests
print("✅ Requests imported successfully")
except ImportError:
print("❌ Requests not found. Run: pip install requests")
return False
return True
def test_ffmpeg():
"""Test if FFmpeg is installed"""
print("\nTesting FFmpeg...")
import subprocess
try:
result = subprocess.run(['ffmpeg', '-version'],
capture_output=True,
text=True,
timeout=5)
if result.returncode == 0:
version = result.stdout.split('\n')[0]
print(f"✅ FFmpeg found: {version}")
return True
else:
print("❌ FFmpeg found but returned error")
return False
except FileNotFoundError:
print("❌ FFmpeg not found. Install it:")
print(" Ubuntu/Debian: sudo apt-get install ffmpeg")
print(" macOS: brew install ffmpeg")
print(" Windows: Download from https://ffmpeg.org/")
return False
except Exception as e:
print(f"❌ Error testing FFmpeg: {e}")
return False
def test_fonts():
"""Test if Sinhala fonts are available"""
print("\nTesting Sinhala fonts...")
import subprocess
try:
# Check for common Sinhala fonts
result = subprocess.run(['fc-list', ':lang=si'],
capture_output=True,
text=True,
timeout=5)
if 'Noto' in result.stdout or 'Sinhala' in result.stdout:
print("✅ Sinhala fonts found")
fonts = [line for line in result.stdout.split('\n') if 'Sinhala' in line or 'Noto' in line]
for font in fonts[:3]:
print(f" - {font[:80]}...")
return True
else:
print("⚠️ No Sinhala fonts found. Install Noto fonts:")
print(" Ubuntu/Debian: sudo apt-get install fonts-noto-core fonts-noto-extra")
print(" macOS: brew install font-noto-sans")
return False
except FileNotFoundError:
print("⚠️ fontconfig not found, cannot check fonts")
return False
except Exception as e:
print(f"⚠️ Error checking fonts: {e}")
return False
def test_subtitle_encoding():
"""Test subtitle encoding handling"""
print("\nTesting subtitle encoding...")
test_content = """1
00:00:01,000 --> 00:00:04,000
හෙලෝ, මෙය සිංහල උපසිරැසි පරීක්ෂණයකි
2
00:00:05,000 --> 00:00:08,000
Unicode test: \u0D9A\u0DCA\u200D\u0DBB\u0DD2\u0DBA\u0DCF
"""
import tempfile
try:
# Create test file
with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8',
suffix='.srt', delete=False) as f:
f.write(test_content)
test_file = f.name
# Try to read it back
with open(test_file, 'r', encoding='utf-8') as f:
content = f.read()
# Check for Sinhala characters
if '\u0D80' <= content[50] <= '\u0DFF': # Check if Sinhala unicode present
print("✅ Subtitle encoding test passed")
os.unlink(test_file)
return True
else:
print("❌ Subtitle encoding test failed")
os.unlink(test_file)
return False
except Exception as e:
print(f"❌ Subtitle encoding test failed: {e}")
return False
def test_app_import():
"""Test if app.py can be imported"""
print("\nTesting app.py import...")
try:
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import app
print("✅ app.py imported successfully")
return True
except Exception as e:
print(f"❌ Failed to import app.py: {e}")
return False
def main():
"""Run all tests"""
print("=" * 60)
print("Sinhala Subtitle Hardcoder - Environment Test")
print("=" * 60)
tests = [
("Imports", test_imports),
("FFmpeg", test_ffmpeg),
("Sinhala Fonts", test_fonts),
("Subtitle Encoding", test_subtitle_encoding),
("App Import", test_app_import),
]
results = {}
for name, test_func in tests:
results[name] = test_func()
print("\n" + "=" * 60)
print("Test Results Summary")
print("=" * 60)
for name, passed in results.items():
status = "✅ PASS" if passed else "❌ FAIL"
print(f"{name:20s}: {status}")
print("=" * 60)
if all(results.values()):
print("\n🎉 All tests passed! Ready to deploy to Hugging Face.")
print("\nNext steps:")
print("1. Create a new Space on Hugging Face")
print("2. Upload app.py, requirements.txt, packages.txt, README.md")
print("3. Wait for build to complete")
print("4. Test with real videos!")
return 0
else:
print("\n⚠️ Some tests failed. Fix the issues above before deploying.")
failed = [name for name, passed in results.items() if not passed]
print(f"\nFailed tests: {', '.join(failed)}")
return 1
if __name__ == "__main__":
sys.exit(main())