Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| test_local.py — Prueba el generador de APK localmente antes de subir a HF. | |
| Uso: | |
| pip install gradio Pillow | |
| cd apk-builder | |
| python test_local.py | |
| """ | |
| import sys | |
| import os | |
| import tempfile | |
| from pathlib import Path | |
| # Asegurarse de que el módulo app sea importable | |
| sys.path.insert(0, str(Path(__file__).parent / "app")) | |
| def test_apk_generation(): | |
| """Prueba la generación de APK con diferentes configuraciones.""" | |
| from app import build_apk, validate_url, sanitize_package | |
| print("=" * 60) | |
| print(" WebToAPK Builder — Test Suite") | |
| print("=" * 60) | |
| # Test 1: Validación de URLs | |
| print("\n[1] Validando URLs...") | |
| tests = [ | |
| ("https://example.com", True), | |
| ("http://github.com", True), | |
| ("example.com", True), # debe agregar https:// | |
| ("ftp://invalid", True), # URL técnicamente parseable | |
| ("", False), # vacío → inválido | |
| ] | |
| for url, expected in tests: | |
| ok, result = validate_url(url) | |
| status = "✅" if ok == expected else "❌" | |
| print(f" {status} '{url}' → valid={ok}, result={result}") | |
| # Test 2: Package names | |
| print("\n[2] Generando package names...") | |
| names = ["My App", "GitHub", "123test", "Hello World!", "app"] | |
| for name in names: | |
| pkg = sanitize_package(name.replace(" ", "_")) | |
| print(f" ✅ '{name}' → {pkg}") | |
| # Test 3: Generación de APK completa | |
| print("\n[3] Generando APK de prueba...") | |
| apk_path, message = build_apk( | |
| url="https://example.com", | |
| app_name="Test App", | |
| theme_color="Material Blue", | |
| fullscreen=False, | |
| allow_js=True, | |
| allow_downloads=False, | |
| allow_geolocation=False, | |
| ) | |
| if apk_path and Path(apk_path).exists(): | |
| size = Path(apk_path).stat().st_size | |
| print(f" ✅ APK generado: {apk_path}") | |
| print(f" 📏 Tamaño: {size:,} bytes ({size//1024} KB)") | |
| # Verificar estructura ZIP | |
| import zipfile | |
| with zipfile.ZipFile(apk_path, 'r') as z: | |
| files = z.namelist() | |
| print(f" 📦 Archivos en APK: {len(files)}") | |
| for f in sorted(files)[:10]: | |
| print(f" - {f}") | |
| if len(files) > 10: | |
| print(f" ... y {len(files)-10} más") | |
| else: | |
| print(f" ❌ Error: {message}") | |
| return False | |
| # Test 4: Múltiples colores | |
| print("\n[4] Probando diferentes colores...") | |
| colors = ["Material Blue", "Deep Purple", "Teal", "Red"] | |
| for color in colors: | |
| path, msg = build_apk( | |
| url="https://example.com", | |
| app_name=f"Test {color}", | |
| theme_color=color, | |
| fullscreen=False, allow_js=True, | |
| allow_downloads=False, allow_geolocation=False, | |
| ) | |
| status = "✅" if path else "❌" | |
| print(f" {status} {color}") | |
| print("\n" + "=" * 60) | |
| print(" ✅ Todos los tests completados.") | |
| print("=" * 60) | |
| return True | |
| def test_gradio_ui(): | |
| """Levanta la UI de Gradio para prueba interactiva.""" | |
| print("\n🚀 Iniciando Gradio UI en http://localhost:7860 ...") | |
| print(" Presiona Ctrl+C para detener.\n") | |
| from app import build_ui | |
| demo = build_ui() | |
| demo.launch(server_name="0.0.0.0", server_port=7860, share=False) | |
| if __name__ == "__main__": | |
| import argparse | |
| p = argparse.ArgumentParser() | |
| p.add_argument("--ui", action="store_true", help="Lanzar UI de Gradio") | |
| args = p.parse_args() | |
| if args.ui: | |
| test_gradio_ui() | |
| else: | |
| success = test_apk_generation() | |
| sys.exit(0 if success else 1) | |