Pruebas reproducibles

La compilación y las pruebas Go básicas no necesitan SDK, Java, Node ni Python:

go test ./...
go vet ./...
go test -race ./...

Cliente JavaScript: node --test packages/javascript/core.test.cjs (protocolo nativo y modo web).

Flujo de desarrollo (sin red ni dispositivo): internal/templates genera ambas plantillas, internal/devserver prueba estáticos, SPA, SSE, vigilancia y proxy con httptest, e internal/adb usa el servidor adb falso de internal/adb/adbtest. cmd/koru encadena create → build → verify, dev y run contra ese servidor falso. Ninguna de estas pruebas sustituye una instalación real en Android.

Sitio de documentación (Bun): cd website && bun test y CHROME_PATH=/ruta/chrome bun run test:browser, que incluye la landing page. JNI: make native-test prueba propiedad de referencias/hilos con una tabla JNI controlada; no sustituye la ejecución real del ejemplo en Android.

En esta página

Comparación externa opcional

Estas herramientas solo verifican el artefacto ya generado por Go. No se incluyen en la entrega ni participan en koru build.

export KORU_TEST_DEXDUMP=/ruta/dexdump
export KORU_TEST_AAPT=/ruta/aapt
export KORU_TEST_JAVA=/ruta/java
export KORU_TEST_APKSIGNER_JAR=/ruta/apksigner.jar
go test -tags android_external -v ./tests/external

El entorno debe resolver las bibliotecas compartidas de dexdump/aapt cuando el prebuilt oficial las requiera.

Ejecución Android

Instalar un APK debug con los seis plugins y el ejemplo native.info configurado según docs/plugins.md. Para la muestra usada por android-smoke.py, el identificador es com.example.koru, y webDir contiene examples/web más tests/fixtures/sw.js copiado como sw.js. Ese service worker debe responder a /sw-probe con koru-worker-offline y reclamar sus clientes. El APK de entrega koru-demo.apk es release y no expone DevTools.

export KORU_TEST_ADB=/ruta/adb
"$KORU_TEST_ADB" install -r app-debug.apk
"$KORU_TEST_ADB" shell svc wifi disable
"$KORU_TEST_ADB" shell svc data disable
"$KORU_TEST_ADB" shell am start -W -n com.example.koru/com.koru.runtime.MainActivity
pid=$("$KORU_TEST_ADB" shell pidof com.example.koru | tr -d '\r')
"$KORU_TEST_ADB" forward tcp:9223 "localabstract:webview_devtools_remote_$pid"
python3 tests/android-smoke.py
python3 tests/android-navigation.py
python3 tests/android-worker.py
python3 tests/android-keyboard.py
python3 tests/android-share.py

Python requiere websockets para estas pruebas de QA. El puerto predeterminado es 9223; el script smoke admite --port y --output. Ejecutar secuencialmente y volver a abrir index.html antes de smoke si el contador fue usado. Un force-stop y nuevo arranque entre smoke y navigation permite comprobar persistencia de storage.

El teclado/navegación usan la pantalla 720×1280, densidad 320 y barra de estado 24dp del emulador de referencia. Adaptar coordenadas a otra pantalla. Ningún test controla aplicaciones ajenas ni envía el contenido del chooser a un destinatario.

Resultados y matriz comprobada: docs/results/full/README.md. La ejecución en API 30 no prueba el diálogo de permisos de notificaciones introducido en API 33.

App de autodiagnóstico

examples/selftest es una app koru que, al abrirse, ejecuta 37 comprobaciones automáticas del puente, de cada plugin integrado, del plugin propio toast y del WebView, y deja botones para lo interactivo (compartir, permiso de notificaciones). Instrucciones en examples/selftest/README.md. En Android se lee el resultado con koru logs | grep KORU_SELFTEST o evaluando window.__KORU_SELFTEST__ por CDP. scripts/ci.sh comprueba que el APK se construye y pasa koru verify; cada release lo publica como selftest.apk y cada ejecución del CI lo guarda como artefacto. No se ha ejecutado aún en un dispositivo.

Formato antes de commit

gofmt -w cmd internal pkg plugins runtime/dex examples/dex tests/external
black tests/*.py
clang-format -i runtime/native/koru_plugin.c runtime/native/koru_plugin.h runtime/native/scope_test.c

Los archivos JS/HTML/CSS/JSON se formatearon con Prettier 3.6.2. Los headers JNI de AOSP conservan su formato y licencia original. Los formateadores son herramientas de desarrollo, no requisitos para ejecutar Koru.