---
name: gradle_unit_test
kind: function
lang: bash
domain: infra
version: "1.0.0"
purity: impure
signature: "gradle_unit_test(project_dir: string, module: string, --variant <name>: string) -> int"
description: "Corre unit tests JVM de un modulo Android (no requiere emulador)."
tags: ["android", "gradle", "kotlin", "test", "junit"]
uses_functions: ["gradle_run_bash_infra"]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
tested: false
tests: []
test_file_path: ""
file_path: "bash/functions/infra/gradle_unit_test.sh"
params:
  - name: project_dir
    desc: "Raiz del proyecto Android con settings.gradle[.kts]."
  - name: module
    desc: "Modulo Gradle. Default: app"
  - name: "--variant <name>"
    desc: "Build variant (Debug|Release). Default Debug"
output: "Stdout con resultados JUnit. Linea final 'REPORT: <path_html>'. Exit code = test runner exit (0 OK, 1 fallos)."
notes: |
  JVM only — Compose Composables que necesitan device se testean con
  gradle_instrumented_test. Para tests Compose en JVM usar Roborazzi
  (gradle_screenshot_test).

  La funcion hace source de gradle_run.sh desde el mismo directorio
  (bash/functions/infra/). La dependencia gradle_run_bash_infra debe
  existir junto a este archivo.
---

## Ejemplo

```bash
source bash/functions/infra/gradle_unit_test.sh

# Tests del modulo app con variante Debug (por defecto)
gradle_unit_test /home/lucas/projects/myapp

# Tests del modulo :core con variante Release
gradle_unit_test /home/lucas/projects/myapp core --variant Release

# Verificar que paso
if gradle_unit_test /home/lucas/projects/myapp; then
    echo "Todos los tests pasaron"
else
    echo "Hay tests fallidos — revisar el report HTML"
fi
```

## Notas

JVM only — Compose Composables que necesitan device se testean con
`gradle_instrumented_test`. Para tests Compose en JVM usar Roborazzi
(`gradle_screenshot_test`).

El task ejecutado es `:$module:test${variant}UnitTest` (ej.
`:app:testDebugUnitTest`). El report HTML se imprime al final como
`REPORT: <path>` para facilitar parseo por agentes o scripts upstream.
