Delivers the following enhancements:
- wires the manual tests to the main gradle build
https://bugs.openjdk.org/browse/JDK-8296441
- removes the limitation of single source file for manual tests
- provides the `ManualTestWindow` base class for manual tests with pass/fail
buttons and instruction text area
- modified EmojiTest to showcase the new `ManualTestWindow`
- provides the manual test runner `TestRunnerApp` which allows for running
manual tests in sequence or any order
At the moment, the new code is placed in the `tests/manual2` directory (we
might decide to move it back to tests/manual once all the tests are migrated
and placed in their own packages).
The `gradle manualApps` builds the classes in the `tests/manual2/build/classes`
dir and generates a jar file containing all the tests, `ManualTestWindow`,
`TestRunnerApp`, and the related test infrastructure (utilities etc.) in the
`tests/manual2/dist/ManualTests.jar`.
## Gradle Build
`gradle clean manualApps`
## ManualTestWindow
This class simplifies writing manual tests. Example:
public class ManualTestExample extends ManualTestWindow {
public ManualTestExample() {
super(
"Manual Test Example",
"""
Instructions:
1. you will see a button named "Test"
2. press the button
3. verify that the button can be pressed""",
400, 250
);
}
@Override
protected Node createContent() {
return new Button("Test");
}
}

## TestRunnerApp
<img width="890" height="456" alt="Screenshot 2026-04-20 at 13 24 41"
src="https://github.com/user-attachments/assets/1bd6b694-83cc-43b5-8b09-703f5f3b9d68"
/>
Features:
- loads default test plan
- allows to load a test plan from file
Possible improvements:
- execute single test within tests/manual2 without writing a test plan
- generating report
## Migrating Manual Tests
Migrating existing tests is simple:
- the tests must not use the default package
- `TestRunnerApp` allows to drop the `main()` method.
- FQCN of the test added to the default test plan
- the test can optionally extend the `ManualTestWindow`
---------
- [x] I confirm that I make this contribution in accordance with the [OpenJDK
Interim AI Policy](https://openjdk.org/legal/ai).
-------------
Commit messages:
- ws
- ws
- manual2
Changes: https://git.openjdk.org/jfx/pull/2156/files
Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2156&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8319555
Stats: 812 lines in 13 files changed: 803 ins; 1 del; 8 mod
Patch: https://git.openjdk.org/jfx/pull/2156.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/2156/head:pull/2156
PR: https://git.openjdk.org/jfx/pull/2156