diff --git a/app/src/androidTest/java/org/libremediaconverter/FailsOnEmulatorApi37.kt b/app/src/androidTest/java/org/libremediaconverter/FailsOnEmulatorApi37.kt index 7ff9511..8db3c5a 100644 --- a/app/src/androidTest/java/org/libremediaconverter/FailsOnEmulatorApi37.kt +++ b/app/src/androidTest/java/org/libremediaconverter/FailsOnEmulatorApi37.kt @@ -54,10 +54,13 @@ annotation class FailsOnEmulatorApi37 * **The fourth carrier is the one to read that sentence carefully for.** * `pickingAFileThroughTheSystemPickerFillsInTheFileCard` was marked on 2026-09-05 for aborting * `system_server` rather than for failing (#108), and on the gating leg it passed two runs of - * four. On the advisory leg it runs after the rotation test has already taken the framework down, - * which is why the count still holds there — measured, not assumed, and the measurement is the - * reason this line did not have to become two numbers. If it ever starts reporting three failures - * out of four, read that as this test having got lucky rather than as an image that improved. + * four. The count still holds on the advisory leg, and that was **measured rather than assumed**: + * `api37-debug.yml` run 34008889182, dispatched with this annotation as its filter, reports + * `expected: 4, received: 4, failed: 4` (and `completed cleanly: no`, which is this job's normal). + * It fails there because it runs alongside the rotation test, which takes the framework down first + * — so the reason this line did not have to become two numbers is a property of the advisory leg, + * not of the test. If it ever reports three failures out of four, read that as this test having + * got lucky rather than as an image that improved. * * So: adding or removing a [FailsOnEmulatorApi37] means changing this number, in this file, in * the same diff. The report says so on the run itself if you forget — it prints the tree's own diff --git a/docs/api-37-emulator-crash.md b/docs/api-37-emulator-crash.md index d8905a3..911043a 100644 --- a/docs/api-37-emulator-crash.md +++ b/docs/api-37-emulator-crash.md @@ -492,6 +492,18 @@ input entirely, so the picker's process can be removed from a task no key press `pickTheFixture`'s whole-picker retry — which exists for exactly this — becomes reachable again. That is a fix to the test on every level, not to API 37. +**It was made to bite before it was believed.** On a local API 36 emulator, with the walk cut short +so the picker is left open and in front and with `device.pressBack()` removed, so that nothing but +the force-stop can close it: + +| | result | +|---|---| +| with `forceStopThePicker()` | **passes** — `ActivityManager: Force stopping com.google.android.documentsui ... from pid 5334`, `Killing 5269:com.google.android.documentsui (adj 0)`, a second `PickActivity` opens, the retry completes the pick | +| with the one call removed | **fails** — `the system picker would not close: after 4 back presses ... com.google.android.documentsui is in front`, which is the API 37 failure verbatim | + +The unmutated class passes on that emulator either way, which is the point of running the mutation +at all: the recovery path is unreachable on a healthy device, so a green suite says nothing about it. + #### The correction that produced that table **The first version of this section said both tests failed, and put the marker on the class.** The