diff --git a/.github/workflows/ant.yml b/.github/workflows/ant.yml index 3d9cd0ae14..ff2edf8d29 100644 --- a/.github/workflows/ant.yml +++ b/.github/workflows/ant.yml @@ -28,6 +28,15 @@ jobs: steps: - uses: actions/checkout@v6 + - name: Free disk space for desktop runtime dependencies + run: | + # This Java-only job does not use the preinstalled Android, .NET, or + # Haskell toolchains. cn1-binaries-javase intentionally resolves large + # cross-platform JCEF and FFmpeg artifacts, then integration tests copy + # them into generated applications, so the stock runner otherwise runs + # out of disk while duplicating those artifacts. + sudo rm -rf /usr/local/lib/android /usr/share/dotnet /opt/ghc + df -h / - name: Set up JDK 8 uses: actions/setup-java@v5 with: diff --git a/.github/workflows/linux-build-run.yml b/.github/workflows/linux-build-run.yml index 6aa66ae4b3..14e59d710e 100644 --- a/.github/workflows/linux-build-run.yml +++ b/.github/workflows/linux-build-run.yml @@ -27,6 +27,8 @@ on: # diff limit, so pull_request triggers stopped firing -- dispatch with # gh workflow run --ref workflow_dispatch: + schedule: + - cron: '45 1 * * *' pull_request: paths: - '.github/workflows/linux-build-run.yml' @@ -355,7 +357,7 @@ jobs: compare-comment: name: screenshot-comment needs: build-run - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest permissions: contents: read @@ -383,6 +385,18 @@ jobs: name: linux-screenshot-raw-arm64 path: artifacts/linux-port/raw-arm64 continue-on-error: true + - name: Download x64 benchmark binary + uses: actions/download-artifact@v4 + with: + name: linux-demo-x64 + path: artifacts/linux-port/demo-x64 + continue-on-error: true + - name: Download arm64 benchmark binary + uses: actions/download-artifact@v4 + with: + name: linux-demo-arm64 + path: artifacts/linux-port/demo-arm64 + continue-on-error: true - name: Post screenshots to PR shell: bash @@ -397,6 +411,7 @@ jobs: # screenshot that has no committed golden (missing_expected). export CN1SS_FAIL_ON_MISMATCH=1 export CN1SS_ALLOWED_MISSING=0 + if [ "${{ github.event_name }}" != "pull_request" ]; then export CN1SS_SKIP_COMMENT=1; fi for arch in x64 arm64; do raw="$ART/raw-$arch" [ -d "$raw" ] || continue @@ -409,6 +424,9 @@ jobs: if [ "$arch" = "arm64" ]; then REF="scripts/linux/screenshots-arm"; else REF="scripts/linux/screenshots"; fi echo "Posting ${#entries[@]} screenshot(s) for $arch (baseline $REF)" mkdir -p "$ART/previews-$arch" + export CN1SS_PORT_ID="linux-$arch" + export CN1SS_SUITE_LOG="$raw/app-output.log" + export CN1SS_BINARY_PATH="$ART/demo-$arch/codenameone-linux-demo-$arch" set +e CN1SS_COMMENT_MARKER="" \ CN1SS_COMMENT_LOG_PREFIX="[linux-gtk-$arch]" \ @@ -434,3 +452,12 @@ jobs: done if [ "$posted" -eq 0 ]; then echo "No screenshots produced; skipping comment."; fi if [ "$fail" -ne 0 ]; then echo "Linux screenshot gate failed."; exit 1; fi + + - name: Upload Linux port status + if: always() + uses: actions/upload-artifact@v4 + with: + name: port-status-linux + path: artifacts/linux-port/port-status-linux-*.json + if-no-files-found: warn + retention-days: 14 diff --git a/.github/workflows/parparvm-tests-windows.yml b/.github/workflows/parparvm-tests-windows.yml index 27818330f0..58acc10900 100644 --- a/.github/workflows/parparvm-tests-windows.yml +++ b/.github/workflows/parparvm-tests-windows.yml @@ -21,11 +21,15 @@ name: ParparVM Java Tests (Windows) # is disabled so the x64 leg always runs to completion. on: + workflow_dispatch: + schedule: + - cron: '5 2 * * *' pull_request: paths: - '.github/workflows/parparvm-tests-windows.yml' - 'vm/**' - 'Ports/WindowsPort/**' + - 'scripts/hellocodenameone/**' - '!vm/**/README.md' - '!vm/**/readme.md' - '!vm/**/docs/**' @@ -35,6 +39,7 @@ on: - '.github/workflows/parparvm-tests-windows.yml' - 'vm/**' - 'Ports/WindowsPort/**' + - 'scripts/hellocodenameone/**' - '!vm/**/README.md' - '!vm/**/readme.md' - '!vm/**/docs/**' @@ -209,12 +214,13 @@ jobs: # mode -- the app paints into an offscreen Direct2D/WIC bitmap (no window) and # writes a PNG. The PNG is uploaded as an artifact; the companion comment job # posts it to the PR. This x64 leg also publishes the compiled core + port - # bytecode for the native arm64 leg (windows-port-screenshot-arm64). PR events - # only (the comment job needs PR context). Separate from the clean-target gate - # so a rendering hiccup never blocks merges. + # bytecode for the native arm64 leg (windows-port-screenshot-arm64). Pull + # requests render review artifacts; master runs also produce the durable + # Windows ARM64 compliance report consumed by the static Port Status page. + # Separate from the clean-target gate so a rendering hiccup never blocks merges. windows-port-screenshot: name: screenshot-capture (x64) - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' runs-on: windows-latest timeout-minutes: 90 steps: @@ -362,6 +368,7 @@ jobs: env: JDK_8_HOME: ${{ env.JDK_8_HOME }} CN1_SHOT_OUTPUT_DIR: ${{ github.workspace }}\artifacts\windows-port\raw + CN1_PERFORMANCE_BINARY_OUT: ${{ github.workspace }}\artifacts\windows-port\raw\benchmark-app.exe run: | mvn -B clean package -pl JavaAPI -am -DskipTests mvn -B test -pl tests -am '-Dtest=CleanTargetIntegrationTest#capturesHelloSuiteOverWebSocket' '-Dsurefire.failIfNoSpecifiedTests=false' @@ -399,7 +406,7 @@ jobs: windows-port-screenshot-arm64: name: screenshot-capture (arm64) needs: windows-port-screenshot - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' runs-on: windows-11-arm continue-on-error: true timeout-minutes: 60 @@ -486,6 +493,8 @@ jobs: shell: pwsh env: CN1_SHOT_OUTPUT_DIR: ${{ github.workspace }}\artifacts\windows-port\raw + CN1_PERFORMANCE_BINARY_OUT: ${{ github.workspace }}\artifacts\windows-port\raw\benchmark-app.exe + CN1_REQUIRE_PERFORMANCE: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} run: | mvn -B clean package -pl JavaAPI -am -DskipTests mvn -B test -pl tests -am '-Dtest=CleanTargetIntegrationTest#capturesHelloSuiteOverWebSocket' '-Dsurefire.failIfNoSpecifiedTests=false' @@ -599,7 +608,7 @@ jobs: windows-port-screenshot-comment-arm64: name: screenshot-comment (arm64) needs: windows-port-screenshot-arm64 - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' continue-on-error: true runs-on: ubuntu-latest permissions: @@ -651,6 +660,10 @@ jobs: # the PR -- but the mismatch is no longer silent. export CN1SS_FAIL_ON_MISMATCH=1 export CN1SS_ALLOWED_MISSING=0 + export CN1SS_PORT_ID=windows-arm64 + export CN1SS_BINARY_PATH="$ART/raw/benchmark-app.exe" + export CN1SS_SUITE_LOG="$ART/raw/app-output.log" + if [ "${{ github.event_name }}" != "pull_request" ]; then export CN1SS_SKIP_COMMENT=1; fi set +e cn1ss_process_and_report \ "Native Windows port (arm64)" \ @@ -669,6 +682,15 @@ jobs: fi if [ "$fail" -ne 0 ]; then echo "Windows arm64 screenshot gate failed."; exit 1; fi + - name: Upload Windows ARM64 port status + if: always() + uses: actions/upload-artifact@v4 + with: + name: port-status-windows-arm64 + path: artifacts/windows-port/port-status-windows-arm64.json + if-no-files-found: warn + retention-days: 14 + # Widgets Board provider compile check: compiles the one nativeSources TU no # other CI leg ever compiles -- cn1_windows_widgetboard.cpp, which is gated # behind CN1_WIDGETBOARD (the default CMake build never defines it and the diff --git a/.github/workflows/port-status-contract.yml b/.github/workflows/port-status-contract.yml new file mode 100644 index 0000000000..18ca04f1c0 --- /dev/null +++ b/.github/workflows/port-status-contract.yml @@ -0,0 +1,70 @@ +name: Validate port status contract + +on: + pull_request: + paths: + - '.github/workflows/port-status-contract.yml' + - 'docs/website/data/port_status.json' + - 'docs/website/data/port_status_supplement.json' + - 'docs/website/data/port_status_support.json' + - 'docs/website/data/port_status_environment.json' + - 'docs/website/data/port_status_reports/**' + - 'scripts/hellocodenameone/common/src/main/**' + - 'scripts/hellocodenameone/conformance/**' + - 'scripts/run-javascript-lifecycle-tests.mjs' + - 'scripts/website/collect_browser_evidence.mjs' + - 'scripts/website/sync_port_status_reports.sh' + - '.github/workflows/port-status-nightly.yml' + - 'scripts/android/screenshots/**' + - 'scripts/ios/screenshots/**' + - 'scripts/ios/screenshots-metal/**' + - 'scripts/ios/screenshots-watch/**' + - 'scripts/ios/screenshots-tv/**' + - 'scripts/mac-native/screenshots/**' + - 'scripts/javascript/screenshots/**' + - 'scripts/linux/screenshots/**' + - 'scripts/linux/screenshots-arm/**' + - 'scripts/windows/screenshots/**' + push: + branches: [master] + paths: + - '.github/workflows/port-status-contract.yml' + - 'docs/website/data/port_status.json' + - 'docs/website/data/port_status_supplement.json' + - 'docs/website/data/port_status_support.json' + - 'docs/website/data/port_status_environment.json' + - 'docs/website/data/port_status_reports/**' + - 'scripts/hellocodenameone/common/src/main/**' + - 'scripts/hellocodenameone/conformance/**' + - 'scripts/run-javascript-lifecycle-tests.mjs' + - 'scripts/website/collect_browser_evidence.mjs' + - 'scripts/website/sync_port_status_reports.sh' + - '.github/workflows/port-status-nightly.yml' + - 'scripts/android/screenshots/**' + - 'scripts/ios/screenshots/**' + - 'scripts/ios/screenshots-metal/**' + - 'scripts/ios/screenshots-watch/**' + - 'scripts/ios/screenshots-tv/**' + - 'scripts/mac-native/screenshots/**' + - 'scripts/javascript/screenshots/**' + - 'scripts/linux/screenshots/**' + - 'scripts/linux/screenshots-arm/**' + - 'scripts/windows/screenshots/**' + workflow_dispatch: + +permissions: + contents: read + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: '3.13' + - name: Validate every test and golden mapping + run: python3 scripts/hellocodenameone/conformance/port_status.py validate + - name: Run normalizer tests + working-directory: scripts/hellocodenameone/conformance + run: python3 -m unittest -v test_port_status.py diff --git a/.github/workflows/port-status-nightly.yml b/.github/workflows/port-status-nightly.yml new file mode 100644 index 0000000000..5652d6fa6b --- /dev/null +++ b/.github/workflows/port-status-nightly.yml @@ -0,0 +1,109 @@ +name: Nightly platform and browser evidence + +on: + workflow_call: + schedule: + - cron: '35 2 * * *' + workflow_dispatch: + +permissions: + actions: write + contents: write + +jobs: + build-javascript-app: + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: '8' + cache: maven + - name: Prepare Codename One binaries + run: | + mkdir -p ~/.codenameone + cp maven/UpdateCodenameOne.jar ~/.codenameone/ + mvn -B -f maven/pom.xml -pl parparvm -am -DskipTests -Dmaven.javadoc.skip=true package + - uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: '17' + cache: maven + - name: Install Xvfb + run: bash scripts/ci/apt-get-update.sh && sudo apt-get install -y --no-install-recommends xvfb + - name: Set up workspace + run: xvfb-run ./scripts/setup-workspace.sh -q -DskipTests + - name: Build compliance application for JavaScript + run: SKIP_PARPARVM_BUILD=1 xvfb-run ./scripts/build-javascript-port-hellocodenameone.sh "${GITHUB_WORKSPACE}/hellocodenameone-javascript-port.zip" + - uses: actions/upload-artifact@v4 + with: + name: nightly-javascript-app + path: hellocodenameone-javascript-port.zip + retention-days: 2 + + browser-lifecycle: + needs: build-javascript-app + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + browser: [chromium, firefox, webkit] + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: '20' + - uses: actions/download-artifact@v4 + with: + name: nightly-javascript-app + - name: Install Playwright browser + working-directory: scripts + run: | + npm init -y 2>/dev/null || true + npm install playwright + npx playwright install --with-deps "${{ matrix.browser }}" + - name: Run lifecycle validation + env: + CN1_PLAYWRIGHT_BROWSER: ${{ matrix.browser }} + CN1_LIFECYCLE_TIMEOUT_SECONDS: '120' + CN1_LIFECYCLE_REPORT_DIR: ${{ github.workspace }}/artifacts/browser-${{ matrix.browser }} + run: node scripts/run-javascript-lifecycle-tests.mjs hellocodenameone-javascript-port.zip + - name: Upload browser evidence + if: always() + uses: actions/upload-artifact@v4 + with: + name: browser-evidence-${{ matrix.browser }} + path: artifacts/browser-${{ matrix.browser }} + retention-days: 14 + if-no-files-found: error + + publish-browser-evidence: + if: always() && needs.build-javascript-app.result == 'success' + needs: [build-javascript-app, browser-lifecycle] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/download-artifact@v4 + with: + pattern: browser-evidence-* + path: artifacts/browser-evidence + - name: Assemble static browser evidence + run: node scripts/website/collect_browser_evidence.mjs artifacts/browser-evidence artifacts/port-status-environment.json + - uses: actions/upload-artifact@v4 + with: + name: port-status-environment + path: artifacts/port-status-environment.json + retention-days: 30 + - name: Publish master evidence to the data branch + if: github.ref == 'refs/heads/master' + env: + GH_TOKEN: ${{ github.token }} + run: scripts/hellocodenameone/conformance/publish_port_status_environment.sh artifacts/port-status-environment.json + - name: Rebuild the static website snapshot + if: github.ref == 'refs/heads/master' + env: + GH_TOKEN: ${{ github.token }} + run: gh workflow run website-docs.yml --ref master diff --git a/.github/workflows/port-status-publish.yml b/.github/workflows/port-status-publish.yml new file mode 100644 index 0000000000..79d456c867 --- /dev/null +++ b/.github/workflows/port-status-publish.yml @@ -0,0 +1,56 @@ +name: Publish port status reports + +on: + workflow_run: + workflows: + - Test Android build scripts + - Test iOS UI build scripts + - Test Mac native UI build scripts + - Test JavaScript screenshot scripts + - Linux native build + run (GTK3, x64 + arm64) + - Windows cross-build + run (Linux build -> Windows run) + - ParparVM Java Tests (Windows) + types: [completed] + +permissions: + actions: write + contents: write + +jobs: + publish: + if: (github.event.workflow_run.event == 'push' || github.event.workflow_run.event == 'schedule') && github.event.workflow_run.head_branch == 'master' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + ref: master + + - name: Download normalized reports + uses: actions/download-artifact@v4 + with: + github-token: ${{ github.token }} + run-id: ${{ github.event.workflow_run.id }} + pattern: port-status-* + path: reports + merge-multiple: true + + - name: Publish reports to the data branch + env: + GH_TOKEN: ${{ github.token }} + PORT_STATUS_PUBLISH: '1' + run: | + set -euo pipefail + found=0 + while IFS= read -r report; do + found=1 + ./scripts/hellocodenameone/conformance/publish_port_status.sh "$report" + done < <(find reports -type f -name 'port-status-*.json' | sort) + if [ "$found" -eq 0 ]; then + echo "No normalized port reports were found in workflow artifacts." >&2 + exit 1 + fi + + - name: Rebuild the static Port Status snapshot + env: + GH_TOKEN: ${{ github.token }} + run: gh workflow run website-docs.yml --ref master diff --git a/.github/workflows/scripts-android.yml b/.github/workflows/scripts-android.yml index 804154dad5..e6274fd53e 100644 --- a/.github/workflows/scripts-android.yml +++ b/.github/workflows/scripts-android.yml @@ -6,6 +6,8 @@ name: Test Android build scripts # diff limit, so pull_request triggers stopped firing -- dispatch with # gh workflow run --ref workflow_dispatch: + schedule: + - cron: '5 1 * * *' pull_request: paths: - '.github/workflows/scripts-android.yml' @@ -196,6 +198,14 @@ jobs: target: google_apis disk-size: 2048M script: ./scripts/run-android-instrumentation-tests.sh "${{ steps.build-android-app.outputs.gradle_project_dir }}" + - name: Upload Android port status + if: always() && matrix.id == 'default' + uses: actions/upload-artifact@v7 + with: + name: port-status-android + path: artifacts/port-status-android.json + if-no-files-found: warn + retention-days: 14 - name: Upload emulator screenshot if: always() && matrix.id == 'default' uses: actions/upload-artifact@v7 diff --git a/.github/workflows/scripts-ios.yml b/.github/workflows/scripts-ios.yml index d2cb9ed67f..6241bd3875 100644 --- a/.github/workflows/scripts-ios.yml +++ b/.github/workflows/scripts-ios.yml @@ -5,6 +5,14 @@ on: # diff limit, so pull_request triggers stopped firing -- dispatch with # gh workflow run --ref workflow_dispatch: + inputs: + watch_only: + description: Run only the watchOS evidence job after the shared port build + required: false + default: false + type: boolean + schedule: + - cron: '15 1 * * *' pull_request: paths: - '.github/workflows/scripts-ios.yml' @@ -82,6 +90,7 @@ jobs: uses: ./.github/workflows/_build-ios-port.yml build-ios: + if: ${{ !inputs.watch_only }} needs: build-port permissions: contents: read @@ -234,6 +243,7 @@ jobs: # failures are scanned from CN1SS:ERR:suite lines by # run-ios-ui-tests.sh and are never allowed by this value. CN1SS_ALLOWED_MISSING: '2' + CN1SS_PORT_ID: ios-gl run: | set -euo pipefail mkdir -p "${ARTIFACTS_DIR}" @@ -251,6 +261,15 @@ jobs: # same envelope so it stays symmetric. timeout-minutes: 45 + - name: Upload iOS OpenGL port status + if: always() + uses: actions/upload-artifact@v7 + with: + name: port-status-ios-gl + path: artifacts/ios-ui-tests/port-status-ios-gl.json + if-no-files-found: warn + retention-days: 14 + - name: Upload iOS artifacts if: always() uses: actions/upload-artifact@v7 @@ -266,6 +285,7 @@ jobs: retention-days: 14 build-ios-metal: + if: ${{ !inputs.watch_only }} # Mirrors build-ios but enables the Metal rendering backend via the # codename1.arg.ios.metal=true build hint. Keeps the GL path untouched # so a regression on either path is isolated in its own job. @@ -466,6 +486,7 @@ jobs: # to the launched app via simctl --setenv. MTL_DEBUG_LAYER: '1' MTL_DEBUG_LAYER_ERROR_MODE: 'assert' + CN1SS_PORT_ID: ios-metal run: | set -euo pipefail mkdir -p "${ARTIFACTS_DIR}" @@ -483,6 +504,15 @@ jobs: # screenshot suite. timeout-minutes: 45 + - name: Upload iOS Metal port status + if: always() + uses: actions/upload-artifact@v7 + with: + name: port-status-ios-metal + path: artifacts/ios-ui-tests-metal/port-status-ios-metal.json + if-no-files-found: warn + retention-days: 14 + - name: Publish Metal screenshot summary # Surfaces run-ios-ui-tests.sh's comparison result in the job's # GitHub Actions summary page so the Metal port status is visible @@ -659,6 +689,7 @@ jobs: CN1SS_SUCCESS_MESSAGE: '✅ Native Apple Watch (watchOS, Core Graphics) screenshot tests passed.' CN1SS_COMMENT_LOG_PREFIX: '[run-watch-ui-tests]' CN1SS_FAIL_ON_MISMATCH: '1' + CN1SS_WATCH_TIMEOUT: '2400' # The watch form factor splits the iOS 2x2 graphics grid into separate # full-screen captures; tolerate a small tail drop, matching the GL job. CN1SS_ALLOWED_MISSING: '4' @@ -670,7 +701,16 @@ jobs: ./scripts/run-watch-ui-tests.sh \ "${{ steps.build-ios-app.outputs.workspace }}" \ "${{ steps.build-ios-app.outputs.scheme }}" - timeout-minutes: 45 + timeout-minutes: 90 + + - name: Upload watchOS port status + if: always() + uses: actions/upload-artifact@v7 + with: + name: port-status-watchos + path: artifacts/watch-ui-tests/port-status-watchos.json + if-no-files-found: warn + retention-days: 14 - name: Upload watch artifacts if: always() @@ -687,6 +727,7 @@ jobs: retention-days: 14 build-ios-tv: + if: ${{ !inputs.watch_only }} # Native Apple TV (tvOS) screenshot pipeline. The tvOS slice auto-enables # from codename1.tvMain in the sample, so build-ios-app.sh generates the #
TV target alongside the iOS app. tvOS reuses the iOS UIApplicationMain @@ -825,6 +866,15 @@ jobs: "${{ steps.build-ios-app.outputs.scheme }}" timeout-minutes: 45 + - name: Upload tvOS port status + if: always() + uses: actions/upload-artifact@v7 + with: + name: port-status-tvos + path: artifacts/tv-ui-tests/port-status-tvos.json + if-no-files-found: warn + retention-days: 14 + - name: Upload tv artifacts if: always() uses: actions/upload-artifact@v7 diff --git a/.github/workflows/scripts-javascript.yml b/.github/workflows/scripts-javascript.yml index a7156e0ae8..6707d713a5 100644 --- a/.github/workflows/scripts-javascript.yml +++ b/.github/workflows/scripts-javascript.yml @@ -5,6 +5,14 @@ on: # diff limit, so pull_request triggers stopped firing -- dispatch with # gh workflow run --ref workflow_dispatch: + inputs: + port_status_browser_evidence: + description: Run only the Port Status browser evidence matrix + required: false + default: false + type: boolean + schedule: + - cron: '35 1 * * *' pull_request: paths: - '.github/workflows/scripts-javascript.yml' @@ -59,6 +67,7 @@ concurrency: jobs: javascript-screenshots: + if: ${{ !inputs.port_status_browser_evidence }} permissions: contents: read pull-requests: write @@ -218,6 +227,15 @@ jobs: mkdir -p "${ARTIFACTS_DIR}" ./scripts/run-javascript-browser-tests.sh "${{ steps.locate_bundle.outputs.bundle }}" "${GITHUB_WORKSPACE}/scripts/javascript/screenshots" + - name: Upload JavaScript port status + if: always() + uses: actions/upload-artifact@v7 + with: + name: port-status-javascript + path: artifacts/javascript-ui-tests/port-status-javascript.json + if-no-files-found: warn + retention-days: 14 + - name: Upload JavaScript screenshot artifacts if: always() uses: actions/upload-artifact@v7 @@ -226,3 +244,10 @@ jobs: path: artifacts/javascript-ui-tests if-no-files-found: warn retention-days: 14 + + port-status-browser-evidence: + if: ${{ github.event_name == 'workflow_dispatch' && inputs.port_status_browser_evidence }} + permissions: + actions: write + contents: write + uses: ./.github/workflows/port-status-nightly.yml diff --git a/.github/workflows/scripts-mac-native.yml b/.github/workflows/scripts-mac-native.yml index ee8e68222e..1cb33d63c5 100644 --- a/.github/workflows/scripts-mac-native.yml +++ b/.github/workflows/scripts-mac-native.yml @@ -15,6 +15,9 @@ name: Test Mac native UI build scripts # Mac/iOS workflows on the same SHA stay fast. on: + workflow_dispatch: + schedule: + - cron: '25 1 * * *' pull_request: paths: - '.github/workflows/scripts-mac-native.yml' @@ -66,8 +69,6 @@ on: - 'tests/**' - 'maven/**' - '!maven/core-unittests/**' - workflow_dispatch: - jobs: build-port: # Shared with scripts-ios.yml / scripts-ios-native.yml / ios-packaging.yml @@ -232,6 +233,15 @@ jobs: # 45m lets the script's internal timeout govern gracefully instead. timeout-minutes: 45 + - name: Upload Mac native port status + if: always() + uses: actions/upload-artifact@v7 + with: + name: port-status-mac-native + path: artifacts/mac-native-ui-tests/port-status-mac-native.json + if-no-files-found: warn + retention-days: 14 + - name: Publish Mac native screenshot summary # Surfaces run-mac-native-ui-tests.sh's comparison result in the # job's GitHub Actions summary page so the Mac slice status is diff --git a/.github/workflows/website-docs.yml b/.github/workflows/website-docs.yml index 6dc723ad44..2b0f8c0bec 100644 --- a/.github/workflows/website-docs.yml +++ b/.github/workflows/website-docs.yml @@ -139,6 +139,10 @@ jobs: # than the pinned release. Bootstrap the local snapshot artifacts so # the initializr (and the other site apps) build against repo HEAD. WEBSITE_BOOTSTRAP_CN1_SNAPSHOTS: "true" + # Resolve the latest persisted master result for each port before + # Hugo writes the static status table. Checked-in reports remain the + # fallback if the data branch is temporarily unavailable. + WEBSITE_REFRESH_PORT_STATUS: "true" # PR previews build with future-dated posts visible so reviewers # can read posts staged for later in the week. Production deploys # (push to master) keep the default so future posts only appear @@ -147,6 +151,11 @@ jobs: CN1_USER: ${{ secrets.CN1_USER }} CN1_TOKEN: ${{ secrets.CN1_TOKEN }} + - name: Validate Port Status page output + run: | + set -euo pipefail + node scripts/website/validate_port_status.mjs docs/website/public + - name: Validate Initializr page output run: | set -euo pipefail diff --git a/.github/workflows/windows-cross-build-run.yml b/.github/workflows/windows-cross-build-run.yml index 199aeec42a..6b290a2cff 100644 --- a/.github/workflows/windows-cross-build-run.yml +++ b/.github/workflows/windows-cross-build-run.yml @@ -22,6 +22,8 @@ on: # diff limit, so pull_request triggers stopped firing -- dispatch with # gh workflow run --ref workflow_dispatch: + schedule: + - cron: '55 1 * * *' pull_request: paths: - '.github/workflows/windows-cross-build-run.yml' @@ -241,6 +243,8 @@ jobs: shell: pwsh env: CN1_PREBUILT_EXE: ${{ github.workspace }}\artifacts\WinHelloMain.exe + CN1_PERFORMANCE_BINARY_OUT: ${{ github.workspace }}\artifacts\windows-port\raw\benchmark-app.exe + CN1_REQUIRE_PERFORMANCE: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }} CN1_SHOT_OUTPUT_DIR: ${{ github.workspace }}\artifacts\windows-port\raw run: | mvn -B clean package -pl JavaAPI -am -DskipTests @@ -261,7 +265,7 @@ jobs: compare-comment: name: cross-compiled screenshot-comment needs: run-on-windows - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest permissions: contents: read @@ -326,6 +330,10 @@ jobs: # through green CI. export CN1SS_FAIL_ON_MISMATCH=1 export CN1SS_ALLOWED_MISSING=0 + export CN1SS_PORT_ID=windows-x64 + export CN1SS_SUITE_LOG="$ART/raw-x64/app-output.log" + export CN1SS_BINARY_PATH="$ART/raw-x64/benchmark-app.exe" + if [ "${{ github.event_name }}" != "pull_request" ]; then export CN1SS_SKIP_COMMENT=1; fi set +e cn1ss_process_and_report \ "Native Windows port (cross-compiled)" \ @@ -343,3 +351,12 @@ jobs: echo "[windows-cross] FATAL: $me screenshot(s) streamed with no stored golden (missing_expected) -- add them to $REF_DIR."; fail=1 fi if [ "$fail" -ne 0 ]; then echo "Windows cross screenshot gate failed."; exit 1; fi + + - name: Upload Windows port status + if: always() + uses: actions/upload-artifact@v4 + with: + name: port-status-windows-x64 + path: artifacts/windows-port/port-status-windows-x64.json + if-no-files-found: warn + retention-days: 14 diff --git a/docs/website/assets/css/extended/cn1-port-status.css b/docs/website/assets/css/extended/cn1-port-status.css new file mode 100644 index 0000000000..16c4e78741 --- /dev/null +++ b/docs/website/assets/css/extended/cn1-port-status.css @@ -0,0 +1,547 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ + +.cn1-port-status { + --cn1-status-border: color-mix(in srgb, var(--primary) 16%, transparent); + max-width: 1500px; +} + +.cn1-port-status .screen-reader-text { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} + +.cn1-port-status__header { + max-width: 900px; +} + +.cn1-port-status__eyebrow, +.cn1-port-status__category { + color: #e7652a; + font-size: .72rem; + font-weight: 700; + letter-spacing: .08em; + text-transform: uppercase; +} + +.cn1-port-status__intro { + color: var(--secondary); + font-size: 1.08rem; + line-height: 1.7; + margin-top: 1rem; + max-width: 800px; +} + +.cn1-port-status__facts, +.cn1-port-status__legend { + display: flex; + flex-wrap: wrap; + gap: .75rem 1.25rem; + margin-top: 1.25rem; +} + +.cn1-port-status__facts span { + background: var(--entry); + border: 1px solid var(--cn1-status-border); + border-radius: 999px; + padding: .45rem .8rem; +} + +.cn1-port-status__notice { + background: color-mix(in srgb, #27955b 12%, var(--entry)); + border: 1px solid color-mix(in srgb, #27955b 45%, transparent); + border-radius: 12px; + margin: 1.5rem 0 0; + padding: .8rem 1rem; +} + +.cn1-port-status__notice.is-error { + background: color-mix(in srgb, #c38a20 12%, var(--entry)); + border-color: color-mix(in srgb, #c38a20 45%, transparent); +} + +.cn1-port-status__deployment, +.cn1-port-status__performance { + margin-top: 2.25rem; +} + +.cn1-port-status__deployment > header, +.cn1-port-status__performance > header { + max-width: 980px; +} + +.cn1-port-status__deployment h2, +.cn1-port-status__performance h2 { + margin-bottom: .6rem; +} + +.cn1-port-status__deployment > header > p:last-child, +.cn1-port-status__performance > header > p:last-child, +.cn1-port-status__browsers > p, +.cn1-port-status__performance > p { + color: var(--secondary); + line-height: 1.65; +} + +.cn1-port-status__support-table { + border: 1px solid var(--cn1-status-border); + border-radius: 12px; + margin-top: 1rem; + overflow-x: auto; +} + +.cn1-port-status__support-table table { + border-collapse: separate; + border-spacing: 0; + font-size: .82rem; + margin: 0; + min-width: 1050px; + width: 100%; +} + +.cn1-port-status__support-table th, +.cn1-port-status__support-table td { + border-bottom: 1px solid var(--cn1-status-border); + border-right: 1px solid var(--cn1-status-border); + line-height: 1.5; + padding: .75rem; + text-align: left; + vertical-align: top; +} + +.cn1-port-status__support-table thead th { + background: var(--entry); + font-size: .72rem; +} + +.cn1-port-status__support-table tbody th { + min-width: 145px; +} + +.cn1-port-status__support-table tbody th small { + color: var(--secondary); + display: block; + font-weight: 400; + margin-top: .2rem; +} + +.cn1-port-status__support-table tr:last-child th, +.cn1-port-status__support-table tr:last-child td { + border-bottom: 0; +} + +.cn1-port-status__support-table th:last-child, +.cn1-port-status__support-table td:last-child { + border-right: 0; +} + +.cn1-port-status__browsers { + margin-top: 1.5rem; +} + +.cn1-port-status__browsers h3, +.cn1-port-status__performance h3 { + font-size: 1.05rem; + margin-bottom: .4rem; +} + +.cn1-port-status__browser-grid, +.cn1-port-status__benchmark-grid { + display: grid; + gap: .75rem; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + margin-top: 1rem; +} + +.cn1-port-status__browser-grid article, +.cn1-port-status__benchmark-grid article { + background: var(--entry); + border: 1px solid var(--cn1-status-border); + border-left: 4px solid #7d8791; + border-radius: 10px; + padding: .85rem; +} + +.cn1-port-status__browser-grid article.is-pass { border-left-color: #27955b; } +.cn1-port-status__browser-grid article.is-fail { border-left-color: #d24c4c; } +.cn1-port-status__browser-grid article.is-pending { border-left-color: #c38a20; } + +.cn1-port-status__browser-grid h4 { + font-size: .95rem; + margin: 0; +} + +.cn1-port-status__browser-grid p { + color: var(--secondary); + font-size: .75rem; + line-height: 1.4; + margin: .35rem 0; +} + +.cn1-port-status__browser-grid article > span { + font-size: .72rem; + font-weight: 700; +} + +.cn1-port-status__benchmark-grid { + grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); + margin-bottom: 1.5rem; +} + +.cn1-port-status__benchmark-grid article { + border-left-color: #3976c5; +} + +.cn1-port-status__benchmark-grid strong { + display: block; + font-size: 1.15rem; +} + +.cn1-port-status__benchmark-grid span { + color: var(--secondary); + font-size: .72rem; +} + +.cn1-port-status__support-table--metrics table { + min-width: 680px; +} + +.cn1-port-status__source-note { + font-size: .82rem; +} + +.cn1-port-status__legend { + color: var(--secondary); + font-size: .86rem; + margin-bottom: 1.25rem; +} + +.cn1-port-status__legend span { + align-items: center; + display: inline-flex; + gap: .4rem; +} + +.cn1-port-status__mark { + align-items: center; + border: 2px solid currentColor; + border-radius: 5px; + display: inline-flex; + font-size: .83rem; + font-style: normal; + font-weight: 800; + height: 1.35rem; + justify-content: center; + line-height: 1; + width: 1.35rem; +} + +.cn1-port-status__mark.is-pass { color: #27955b; } +.cn1-port-status__mark.is-fail { color: #d24c4c; } +.cn1-port-status__mark.is-partial, +.cn1-port-status__mark.is-stale { color: #c38a20; } +.cn1-port-status__mark.is-unknown { color: #7d8791; } +.cn1-port-status__mark.is-supported { color: #27955b; } +.cn1-port-status__mark.is-conditional { color: #c38a20; } +.cn1-port-status__mark.is-fallback { color: #3976c5; } +.cn1-port-status__mark.is-unavailable { color: #7d8791; } + +.cn1-port-status__ports { + display: grid; + gap: .75rem; + grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); + margin: 1.25rem 0 1.75rem; +} + +.cn1-port-card { + background: var(--entry); + border: 1px solid var(--cn1-status-border); + border-left: 4px solid #7d8791; + border-radius: 12px; + display: flex; + flex-direction: column; + min-height: 150px; + padding: 1rem; +} + +.cn1-port-card.is-pass { border-left-color: #27955b; } +.cn1-port-card.is-fail { border-left-color: #d24c4c; } +.cn1-port-card.is-partial { border-left-color: #c38a20; } + +.cn1-port-card h2 { + font-size: 1rem; + margin: 0; +} + +.cn1-port-card p { + color: var(--secondary); + font-size: .78rem; + line-height: 1.45; + margin: .25rem 0 0; +} + +.cn1-port-card .cn1-port-card__state { + color: var(--primary); + font-size: .86rem; + font-weight: 700; + margin-top: auto; + padding-top: .8rem; +} + +.cn1-port-status__toolbar { + align-items: end; + display: grid; + gap: .75rem; + grid-template-columns: minmax(180px, .45fr) minmax(240px, 1fr); + margin-bottom: 1rem; +} + +.cn1-port-status__toolbar label span { + display: block; + font-size: .78rem; + font-weight: 700; + margin-bottom: .3rem; +} + +.cn1-port-status__toolbar input, +.cn1-port-status__toolbar select { + background: var(--entry); + border: 1px solid var(--cn1-status-border); + border-radius: 9px; + color: var(--primary); + font: inherit; + padding: .65rem .75rem; + width: 100%; +} + +.cn1-port-status__matrix { + border: 1px solid var(--cn1-status-border); + border-radius: 12px; +} + +.cn1-port-status__matrix table { + border-collapse: separate; + border-spacing: 0; + font-size: .85rem; + margin: 0; + min-width: 1220px; + width: 100%; +} + +.cn1-port-status__matrix th, +.cn1-port-status__matrix td { + border-bottom: 1px solid var(--cn1-status-border); + border-right: 1px solid var(--cn1-status-border); + padding: .7rem; +} + +.cn1-port-status__matrix thead th { + background: var(--entry); + box-shadow: 0 1px 0 var(--cn1-status-border); + font-size: .72rem; + position: sticky; + text-align: center; + top: 0; + z-index: 2; +} + +.cn1-port-status__matrix thead th:first-child, +.cn1-port-status__matrix tbody th { + left: 0; + position: sticky; + text-align: left; + width: 330px; + z-index: 1; +} + +.cn1-port-status__matrix thead th:first-child { + z-index: 3; +} + +.cn1-port-status__matrix tbody th { + background: var(--theme); + font-weight: 400; +} + +.cn1-port-status__matrix tbody th strong { + display: block; + font-size: .9rem; + margin-top: .15rem; +} + +.cn1-port-status__matrix tbody th p { + color: var(--secondary); + font-size: .76rem; + line-height: 1.45; + margin: .25rem 0; +} + +.cn1-port-status__matrix details { + color: var(--secondary); + font-size: .72rem; +} + +.cn1-port-status__matrix details ul { + margin: .4rem 0 0; + max-height: 180px; + overflow: auto; + padding-left: 1.1rem; +} + +.cn1-port-status__matrix td { + min-width: 82px; + text-align: center; +} + +.cn1-port-status__matrix td.is-pass { background: color-mix(in srgb, #27955b 8%, transparent); } +.cn1-port-status__matrix td.is-fail { background: color-mix(in srgb, #d24c4c 9%, transparent); } +.cn1-port-status__matrix td.is-partial, +.cn1-port-status__matrix td.is-stale { background: color-mix(in srgb, #c38a20 9%, transparent); } + +.cn1-port-status__errata, +.cn1-port-status__manual { + margin-top: 2.25rem; +} + +.cn1-port-status__errata > p, +.cn1-port-status__manual > header { + color: var(--secondary); + line-height: 1.65; + max-width: 900px; +} + +.cn1-port-status__errata-list { + display: grid; + gap: 1rem; + grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); + margin-top: 1rem; +} + +.cn1-port-status__errata-list article { + background: var(--entry); + border: 1px solid var(--cn1-status-border); + border-left: 4px solid #c38a20; + border-radius: 12px; + padding: 1.1rem; +} + +.cn1-port-status__errata-list h3 { + font-size: 1rem; + margin: 0 0 .65rem; +} + +.cn1-port-status__errata-list p { + color: var(--secondary); + font-size: .84rem; + line-height: 1.55; + margin: .45rem 0; +} + +.cn1-port-status__manual > header h2 { + color: var(--primary); + margin-bottom: .6rem; +} + +.cn1-port-status__matrix--manual table { + min-width: 1320px; +} + +.cn1-port-status__matrix--performance { + margin-top: 1rem; +} + +.cn1-port-status__matrix--performance table { + min-width: 1320px; +} + +.cn1-port-status__matrix--performance tbody th small { + color: var(--secondary); + display: block; + font-size: .68rem; + margin-top: .35rem; +} + +.cn1-port-status__matrix--performance td { + font-variant-numeric: tabular-nums; + font-weight: 700; +} + +.cn1-port-status__matrix--manual td small { + color: var(--secondary); + display: block; + font-size: .64rem; + line-height: 1.25; + margin-top: .35rem; +} + +.cn1-port-status__matrix--manual td.is-supported { + background: color-mix(in srgb, #27955b 8%, transparent); +} + +.cn1-port-status__matrix--manual td.is-conditional { + background: color-mix(in srgb, #c38a20 9%, transparent); +} + +.cn1-port-status__matrix--manual td.is-fallback { + background: color-mix(in srgb, #3976c5 9%, transparent); +} + +.cn1-port-status__matrix--manual td.is-unavailable { + background: color-mix(in srgb, #7d8791 7%, transparent); +} + +.cn1-port-status__method { + background: var(--entry); + border: 1px solid var(--cn1-status-border); + border-radius: 12px; + margin-top: 1.5rem; + padding: 1.25rem; +} + +.cn1-port-status__method h2 { + font-size: 1.1rem; + margin: 0 0 .6rem; +} + +.cn1-port-status__method p { + color: var(--secondary); + font-size: .86rem; + line-height: 1.65; + margin: .5rem 0; +} + +@media (max-width: 720px) { + .cn1-port-status__toolbar { + grid-template-columns: 1fr; + } + + .cn1-port-status__matrix thead th:first-child, + .cn1-port-status__matrix tbody th { + width: 260px; + } +} diff --git a/docs/website/assets/js/cn1-port-status.js b/docs/website/assets/js/cn1-port-status.js new file mode 100644 index 0000000000..b40a52595e --- /dev/null +++ b/docs/website/assets/js/cn1-port-status.js @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ + +(function () { + "use strict"; + + var root = document.querySelector("[data-port-status]"); + if (!root) { + return; + } + + var category = root.querySelector("[data-category-filter]"); + var search = root.querySelector("[data-feature-search]"); + + function applyFilters() { + var categoryValue = category.value; + var query = search.value.trim().toLowerCase(); + root.querySelectorAll("[data-feature-row]").forEach(function (row) { + var categoryMatches = !categoryValue || row.dataset.category === categoryValue; + var searchMatches = !query || row.dataset.search.indexOf(query) !== -1; + row.hidden = !(categoryMatches && searchMatches); + }); + } + + category.addEventListener("change", applyFilters); + search.addEventListener("input", applyFilters); +}()); diff --git a/docs/website/content/port-status.md b/docs/website/content/port-status.md new file mode 100644 index 0000000000..d2026d488b --- /dev/null +++ b/docs/website/content/port-status.md @@ -0,0 +1,8 @@ +--- +title: "Port Status" +slug: "port-status" +url: "/port-status/" +layout: "port-status" +description: "Current Codename One port compliance, generated from the automated compliance test suite." +hideMeta: true +--- diff --git a/docs/website/data/port_status.json b/docs/website/data/port_status.json new file mode 100644 index 0000000000..a39a33b5f3 --- /dev/null +++ b/docs/website/data/port_status.json @@ -0,0 +1,538 @@ +{ + "schema_version": 1, + "report_directory": "docs/website/data/port_status_reports", + "stale_after_days": 14, + "performance_tests": ["CommonWorkloadBenchmarkTest"], + "performance_benchmarks": [ + "intArithmetic", + "longArithmetic", + "mathTranscendental", + "arraySequential", + "arrayRandom", + "objectAllocation", + "hashMapChurn", + "stringBuilding", + "recursion", + "quicksort" + ], + "golden_directories": [ + "scripts/android/screenshots", + "scripts/ios/screenshots", + "scripts/ios/screenshots-metal", + "scripts/ios/screenshots-watch", + "scripts/ios/screenshots-tv", + "scripts/mac-native/screenshots", + "scripts/javascript/screenshots", + "scripts/linux/screenshots", + "scripts/linux/screenshots-arm", + "scripts/windows/screenshots" + ], + "ports": [ + {"id": "android", "name": "Android", "detail": "Android emulator, API 36", "workflow": "scripts-android.yml"}, + {"id": "ios-gl", "name": "iOS (OpenGL)", "detail": "iOS Simulator, legacy renderer", "workflow": "scripts-ios.yml"}, + {"id": "ios-metal", "name": "iOS (Metal)", "detail": "iOS Simulator, Metal renderer", "workflow": "scripts-ios.yml"}, + {"id": "mac-native", "name": "macOS native", "detail": "Mac Catalyst native build", "workflow": "scripts-mac-native.yml"}, + {"id": "javascript", "name": "Web", "detail": "JavaScript port in a headless browser", "workflow": "scripts-javascript.yml"}, + {"id": "linux-x64", "name": "Linux x64", "detail": "Native GTK3/Cairo build", "workflow": "linux-build-run.yml"}, + {"id": "linux-arm64", "name": "Linux ARM64", "detail": "Native GTK3/Cairo build", "workflow": "linux-build-run.yml"}, + {"id": "windows-x64", "name": "Windows x64", "detail": "Native cross-compiled binary on Windows", "workflow": "windows-cross-build-run.yml"}, + {"id": "windows-arm64", "name": "Windows ARM64", "detail": "Native ARM64 binary on Windows 11", "workflow": "parparvm-tests-windows.yml"}, + {"id": "watchos", "name": "watchOS", "detail": "Apple Watch Simulator", "workflow": "scripts-ios.yml"}, + {"id": "tvos", "name": "tvOS", "detail": "Apple TV Simulator", "workflow": "scripts-ios.yml"} + ], + "features": [ + { + "id": "application-bootstrap", + "category": "Application runtime", + "name": "Application bootstrap and Java/Kotlin UI", + "description": "Starts the application and renders the shared Java and Kotlin UI paths.", + "tests": ["KotlinUiTest", "MainScreenScreenshotTest"] + }, + { + "id": "ads", + "category": "Application runtime", + "name": "Advertising components", + "description": "Renders banner and native-ad content through the advertising API.", + "tests": ["AdsScreenshotTest"] + }, + { + "id": "slide-cover-transitions", + "category": "Animation and navigation", + "name": "Slide and cover transitions", + "description": "Exercises horizontal, vertical, back, title, cover, and uncover transition frames.", + "tests": ["CoverHorizontalTransitionTest", "SlideFadeTitleTransitionTest", "SlideHorizontalBackTransitionTest", "SlideHorizontalTransitionTest", "SlideVerticalTransitionTest", "UncoverHorizontalTransitionTest"] + }, + { + "id": "fade-flip-transitions", + "category": "Animation and navigation", + "name": "Fade and flip transitions", + "description": "Exercises deterministic fade and flip transition frames.", + "tests": ["FadeTransitionTest", "FlipTransitionTest"] + }, + { + "id": "morph-transitions", + "category": "Animation and navigation", + "name": "Morph transitions", + "description": "Covers element morphing, scrolled sources, snapshots, and scrubbed morph timelines.", + "tests": ["MorphElementMorphScreenshotTest", "MorphTransitionScrolledSourceTest", "MorphTransitionScrubScreenshotTest", "MorphTransitionSnapshotTest", "MorphTransitionTest"] + }, + { + "id": "layout-animation", + "category": "Animation and navigation", + "name": "Animated layout changes", + "description": "Checks layout, hierarchy, unlayout, replacement, and motion animation paths.", + "tests": ["AnimateHierarchyScreenshotTest", "AnimateLayoutScreenshotTest", "AnimateUnlayoutScreenshotTest", "ComponentReplaceFadeScreenshotTest", "ComponentReplaceFlipScreenshotTest", "ComponentReplaceSlideScreenshotTest", "MotionShowcaseScreenshotTest"] + }, + { + "id": "scrolling-and-pull", + "category": "Animation and navigation", + "name": "Scrolling, sticky headers, and pull gestures", + "description": "Checks smooth scrolling, sticky-header transitions, pull-to-refresh, and tensile scrolling.", + "tests": ["PullToRefreshSpinnerScreenshotTest", "SmoothScrollScreenshotTest", "StickyHeaderFadeTransitionScreenshotTest", "StickyHeaderScreenshotTest", "StickyHeaderSlideTransitionScreenshotTest", "TensileBounceScreenshotTest"] + }, + { + "id": "tabs-animation", + "category": "Animation and navigation", + "name": "Animated tab indicators", + "description": "Checks tab indicator animation independently of static tab layout.", + "tests": ["TabsAnimatedIndicatorScreenshotTest"] + }, + { + "id": "status-bar-events", + "category": "Input and lifecycle", + "name": "Status-bar tap events", + "description": "Verifies delivery and visual handling of platform status-bar tap events.", + "tests": ["StatusBarTapDiagnosticScreenshotTest"] + }, + { + "id": "graphics-primitives", + "category": "2D graphics", + "name": "Lines, rectangles, arcs, and polygons", + "description": "Draws and fills the core 2D graphics primitives.", + "tests": ["DrawArc", "DrawLine", "DrawRect", "DrawRoundRect", "FillArc", "FillPolygon", "FillRect", "FillRoundRect", "FillTriangle"] + }, + { + "id": "graphics-text-images", + "category": "2D graphics", + "name": "Text and image drawing", + "description": "Checks text decoration, glyph rendering, image rectangles, and tiled images.", + "tests": ["DrawImage", "DrawString", "DrawStringDecorated", "TileImage"] + }, + { + "id": "graphics-gradients-filters", + "category": "2D graphics", + "name": "Gradients and blur filters", + "description": "Checks basic and multi-stop gradients plus Gaussian blur.", + "tests": ["DrawGradient", "DrawGradientStops", "GaussianBlur"] + }, + { + "id": "graphics-shapes-strokes", + "category": "2D graphics", + "name": "Shapes and strokes", + "description": "Checks paths, filled shapes, complex grids, and stroke rendering.", + "tests": ["DrawShape", "FillShape", "InscribedTriangleGrid", "StrokeTest"] + }, + { + "id": "graphics-clipping", + "category": "2D graphics", + "name": "Clipping and dirty regions", + "description": "Checks empty, rotated, intersected, and partial-flush clip behavior.", + "tests": ["Clip", "ClipUnderRotation", "EmptyClip", "LargeStrokeDirtyClipTest", "PartialFlushClipEscape"] + }, + { + "id": "graphics-2d-transforms", + "category": "2D graphics", + "name": "2D transforms", + "description": "Checks affine scaling, rotation, translation, and scale transforms.", + "tests": ["AffineScale", "Rotate", "Scale", "TransformRotation", "TransformTranslation"] + }, + { + "id": "graphics-3d-transforms", + "category": "2D graphics", + "name": "Perspective and camera transforms", + "description": "Checks perspective projection and camera transform support.", + "tests": ["TransformCamera", "TransformPerspective"] + }, + { + "id": "charts", + "category": "Data visualization", + "name": "Charts", + "description": "Renders line, bar, scatter, bubble, pie, radar, time, combined, and transformed charts.", + "tests": ["ChartBarScreenshotTest", "ChartBubbleScreenshotTest", "ChartCombinedXYScreenshotTest", "ChartCubicLineScreenshotTest", "ChartDoughnutScreenshotTest", "ChartLineScreenshotTest", "ChartPieScreenshotTest", "ChartRadarScreenshotTest", "ChartRangeBarScreenshotTest", "ChartRotatedScreenshotTest", "ChartScatterScreenshotTest", "ChartStackedBarScreenshotTest", "ChartTimeChartScreenshotTest", "ChartTransformScreenshotTest"] + }, + { + "id": "embedded-web-content", + "category": "Rich components", + "name": "Browser, rich text, and code editor", + "description": "Checks embedded browser content, rich text rendering, and code editing.", + "tests": ["BrowserComponentScreenshotTest", "CodeEditorScreenshotTest", "RichTextAreaScreenshotTest"] + }, + { + "id": "sheets", + "category": "Rich components", + "name": "Sheets", + "description": "Checks static sheets and slide-up sheet animation.", + "tests": ["SheetScreenshotTest", "SheetSlideUpAnimationScreenshotTest"] + }, + { + "id": "chat-components", + "category": "Rich components", + "name": "Chat components", + "description": "Checks chat views, input controls, typing state, and light/dark appearance.", + "tests": ["ChatInputScreenshotTest", "ChatViewScreenshotTest"] + }, + { + "id": "image-viewer-tabs-text", + "category": "Rich components", + "name": "Image viewer, tabs, and text alignment", + "description": "Checks image navigation, tab behavior, and text-area alignment states.", + "tests": ["ImageViewerNavigationScreenshotTest", "TabsScreenshotTest", "TextAreaAlignmentScreenshotTest"] + }, + { + "id": "pickers-validation", + "category": "Input and lifecycle", + "name": "Pickers and validation", + "description": "Checks lightweight picker placement, cancellation, restoration, and validator integration.", + "tests": ["LightweightPickerButtonsScreenshotTest", "PickerCancelRestoreTest", "ValidatorLightweightPickerScreenshotTest"] + }, + { + "id": "toast-notifications", + "category": "Rich components", + "name": "Toast notifications", + "description": "Checks placement and rendering of top-positioned toast notifications.", + "tests": ["ToastBarTopPositionScreenshotTest"] + }, + { + "id": "native-theme-controls", + "category": "Themes and styling", + "name": "Native-theme controls", + "description": "Checks buttons, fields, check boxes, radio buttons, switches, pickers, toolbars, tabs, lists, and multi-buttons in light and dark themes.", + "tests": ["ButtonThemeScreenshotTest", "CheckBoxRadioThemeScreenshotTest", "ListThemeScreenshotTest", "MultiButtonThemeScreenshotTest", "PickerThemeScreenshotTest", "SwitchThemeScreenshotTest", "TabsThemeScreenshotTest", "TextFieldThemeScreenshotTest", "ToolbarThemeScreenshotTest"] + }, + { + "id": "dialogs-and-labels", + "category": "Themes and styling", + "name": "Dialogs, labels, and action buttons", + "description": "Checks dialog title placement, interaction dialogs, app-review UI, floating actions, and span labels.", + "tests": ["AppReviewDialogScreenshotTest", "CenteredDialogTitleScreenshotTest", "CenteredInteractionDialogTitleScreenshotTest", "DialogThemeScreenshotTest", "FloatingActionButtonThemeScreenshotTest", "SpanLabelThemeScreenshotTest"] + }, + { + "id": "theme-palette-css", + "category": "Themes and styling", + "name": "Theme palettes and CSS effects", + "description": "Checks light/dark showcases, palette overrides, CSS gradients, and CSS blur filters.", + "tests": ["CssFilterBlurScreenshotTest", "CssGradientsScreenshotTest", "DarkLightShowcaseThemeScreenshotTest", "PaletteOverrideThemeScreenshotTest"] + }, + { + "id": "surfaces", + "category": "System surfaces", + "name": "System surfaces", + "description": "Checks surface rasterization, serialization, timelines, action dispatch, publication, and Android RemoteViews lowering.", + "tests": ["SurfacesActionDispatchTest", "SurfacesPublishTest", "SurfacesRasterizerScreenshotTest", "SurfacesRemoteViewsScreenshotTest", "SurfacesSerializerRoundTripTest", "SurfacesTimelineLogicTest"] + }, + { + "id": "vector-maps", + "category": "Maps", + "name": "Vector maps", + "description": "Checks real map tiles, styles, markers, shapes, and the non-native fallback renderer.", + "tests": ["NativeMapFallbackScreenshotTest", "RealOsmVectorScreenshotTest", "VectorMapDarkStyleScreenshotTest", "VectorMapMarkersScreenshotTest", "VectorMapShapesScreenshotTest"] + }, + { + "id": "native-web-maps", + "category": "Maps", + "name": "Native and web map providers", + "description": "Checks the Google map provider path when credentials and platform support are available.", + "tests": ["GoogleWebMapScreenshotTest"] + }, + { + "id": "svg-lottie", + "category": "Media and graphics", + "name": "SVG and Lottie", + "description": "Checks static and animated SVG plus Lottie animation rendering.", + "tests": ["LottieAnimatedScreenshotTest", "SVGAnimatedScreenshotTest", "SVGStaticScreenshotTest"] + }, + { + "id": "audio-media-playback", + "category": "Media and graphics", + "name": "Audio and media playback", + "description": "Checks media playback and the audio mixer API.", + "tests": ["AudioMixerApiTest", "MediaPlaybackScreenshotTest"] + }, + { + "id": "gpu-3d", + "category": "Media and graphics", + "name": "GPU 3D", + "description": "Checks 3D cubes, textures, models, and animation through the GPU API.", + "tests": ["Gpu3DAnimationTest", "Gpu3DCubeScreenshotTest", "Gpu3DModelScreenshotTest", "Gpu3DTexturedCubeScreenshotTest"] + }, + { + "id": "orientation", + "category": "Input and lifecycle", + "name": "Orientation locking", + "description": "Checks orientation changes and the rendered landscape state.", + "tests": ["OrientationLockScreenshotTest"] + }, + { + "id": "text-input", + "category": "Input and lifecycle", + "name": "Native text input", + "description": "Checks in-place editing and device input APIs.", + "tests": ["DeviceInputApiTest", "InPlaceEditViewTest"] + }, + { + "id": "bytecode-runtime", + "category": "Application runtime", + "name": "Bytecode translation and bridge transfers", + "description": "Checks translator regressions and guards bulk native-bridge transfers.", + "tests": ["BridgeBulkTransferGuardTest", "BytecodeTranslatorRegressionTest"] + }, + { + "id": "simd", + "category": "Application runtime", + "name": "SIMD operations", + "description": "Checks SIMD correctness, benchmark execution, and large stack allocations.", + "tests": ["SimdApiTest", "SimdBenchmarkTest", "SimdLargeAllocaTest"] + }, + { + "id": "java-standard-apis", + "category": "Application runtime", + "name": "Java standard APIs", + "description": "Checks streams, strings, time, monotonic time, floating-point conversion, and Java 17 language/runtime support.", + "tests": ["FloatingToStringTest", "Java17Tests", "NanoTimeApiTest", "StreamApiTest", "StringApiTest", "TimeApiTest"] + }, + { + "id": "threading", + "category": "Application runtime", + "name": "Threading and EDT enforcement", + "description": "Checks background-thread UI access behavior.", + "tests": ["BackgroundThreadUiAccessTest"] + }, + { + "id": "secure-storage-crypto", + "category": "Storage and security", + "name": "Secure storage and cryptography", + "description": "Checks encrypted storage and cryptographic APIs.", + "tests": ["CryptoApiTest", "SecureStorageTest"] + }, + { + "id": "filesystem-storage", + "category": "Storage and security", + "name": "Filesystem error behavior", + "description": "Checks missing-file behavior for filesystem input streams.", + "tests": ["FileSystemStorageOpenInputStreamMissingTest"] + }, + { + "id": "device-security-signals", + "category": "Storage and security", + "name": "VPN and call-state detection", + "description": "Checks platform VPN and call-detection APIs.", + "tests": ["CallDetectionAPITest", "VPNDetectionAPITest"] + }, + { + "id": "notifications", + "category": "Input and lifecycle", + "name": "Local notifications", + "description": "Checks local-notification override behavior through the native bridge.", + "tests": ["LocalNotificationOverrideTest"] + }, + { + "id": "native-base64", + "category": "Application runtime", + "name": "Native Base64 bridge", + "description": "Checks the native Base64 implementation and transfer performance.", + "tests": ["Base64NativePerformanceTest"] + }, + { + "id": "accessibility", + "category": "Input and lifecycle", + "name": "Accessibility", + "description": "Checks accessibility roles, labels, state, and native exposure.", + "tests": ["AccessibilityTest"] + }, + { + "id": "ar-motion-sensors", + "category": "Device APIs", + "name": "AR and motion sensors", + "description": "Checks augmented-reality and motion-sensor APIs.", + "tests": ["ARApiTest", "MotionSensorDeviceTest"] + }, + { + "id": "camera-access", + "category": "Platform-dependent APIs", + "name": "Camera access", + "description": "Checks camera discovery and capture where hardware and runtime permissions are available.", + "tests": ["CameraApiTest"] + }, + { + "id": "mutable-images", + "category": "Media and graphics", + "name": "Mutable image readback", + "description": "Checks image pixel readback with and without active clips.", + "tests": ["MutableImageClipReadbackTest", "MutableImageReadbackTest"] + }, + { + "id": "desktop-mode", + "category": "Desktop integration", + "name": "Desktop mode", + "description": "Checks desktop-mode layout and native menu integration.", + "tests": ["DesktopModeScreenshotTest"] + }, + { + "id": "video-decoding", + "category": "Media and graphics", + "name": "Video frame decoding", + "description": "Checks decoded video frames.", + "tests": ["VideoIODecodedFramesScreenshotTest"] + }, + { + "id": "video-round-trip", + "category": "Platform-dependent APIs", + "name": "Video encode/decode round trip", + "description": "Checks end-to-end video encoding and decoding where the platform provides an encoder.", + "tests": ["VideoIORoundTripTest"] + }, + { + "id": "immersive-media", + "category": "Media and graphics", + "name": "VR and 360-degree media", + "description": "Checks stereo VR scenes and interactive 360-degree media rendering.", + "tests": ["Media360PanoramaScreenshotTest", "VRStereoSceneScreenshotTest"] + } + ], + "screenshot_mappings": [ + {"pattern": "kotlin", "test": "KotlinUiTest"}, + {"pattern": "MainActivity", "test": "MainScreenScreenshotTest"}, + {"pattern": "AdsScreen", "test": "AdsScreenshotTest"}, + {"pattern": "SlideHorizontalTransitionTest", "test": "SlideHorizontalTransitionTest"}, + {"pattern": "SlideHorizontalBackTransitionTest", "test": "SlideHorizontalBackTransitionTest"}, + {"pattern": "SlideVerticalTransitionTest", "test": "SlideVerticalTransitionTest"}, + {"pattern": "SlideFadeTitleTransitionTest", "test": "SlideFadeTitleTransitionTest"}, + {"pattern": "CoverHorizontalTransitionTest", "test": "CoverHorizontalTransitionTest"}, + {"pattern": "UncoverHorizontalTransitionTest", "test": "UncoverHorizontalTransitionTest"}, + {"pattern": "FadeTransitionTest", "test": "FadeTransitionTest"}, + {"pattern": "FlipTransitionTest", "test": "FlipTransitionTest"}, + {"pattern": "MorphTransitionTest", "test": "MorphTransitionTest"}, + {"pattern": "MorphTransitionScrolledSourceTest", "test": "MorphTransitionScrolledSourceTest"}, + {"pattern": "MorphTransitionSnapshotTest", "test": "MorphTransitionSnapshotTest"}, + {"pattern": "MorphTransitionScrubScreenshotTest", "test": "MorphTransitionScrubScreenshotTest"}, + {"pattern": "MorphElementMorphScreenshotTest", "test": "MorphElementMorphScreenshotTest"}, + {"pattern": "TabsAnimatedIndicatorScreenshotTest", "test": "TabsAnimatedIndicatorScreenshotTest"}, + {"pattern": "PullToRefreshSpinnerScreenshotTest", "test": "PullToRefreshSpinnerScreenshotTest"}, + {"pattern": "AnimateLayoutScreenshotTest", "test": "AnimateLayoutScreenshotTest"}, + {"pattern": "AnimateHierarchyScreenshotTest", "test": "AnimateHierarchyScreenshotTest"}, + {"pattern": "AnimateUnlayoutScreenshotTest", "test": "AnimateUnlayoutScreenshotTest"}, + {"pattern": "SmoothScrollScreenshotTest", "test": "SmoothScrollScreenshotTest"}, + {"pattern": "StickyHeaderScreenshotTest", "test": "StickyHeaderScreenshotTest"}, + {"pattern": "StickyHeaderSlideTransitionScreenshotTest", "test": "StickyHeaderSlideTransitionScreenshotTest"}, + {"pattern": "StickyHeaderFadeTransitionScreenshotTest", "test": "StickyHeaderFadeTransitionScreenshotTest"}, + {"pattern": "TensileBounceScreenshotTest", "test": "TensileBounceScreenshotTest"}, + {"pattern": "StatusBarTapDiagnosticScreenshotTest", "test": "StatusBarTapDiagnosticScreenshotTest"}, + {"pattern": "ComponentReplaceFadeScreenshotTest", "test": "ComponentReplaceFadeScreenshotTest"}, + {"pattern": "ComponentReplaceSlideScreenshotTest", "test": "ComponentReplaceSlideScreenshotTest"}, + {"pattern": "ComponentReplaceFlipScreenshotTest", "test": "ComponentReplaceFlipScreenshotTest"}, + {"pattern": "MotionShowcaseScreenshotTest", "test": "MotionShowcaseScreenshotTest"}, + {"pattern": "graphics-draw-line*", "test": "DrawLine"}, + {"pattern": "graphics-fill-rect*", "test": "FillRect"}, + {"pattern": "graphics-draw-rect*", "test": "DrawRect"}, + {"pattern": "graphics-fill-round-rect*", "test": "FillRoundRect"}, + {"pattern": "graphics-draw-round-rect*", "test": "DrawRoundRect"}, + {"pattern": "graphics-fill-arc*", "test": "FillArc"}, + {"pattern": "graphics-draw-arc*", "test": "DrawArc"}, + {"pattern": "graphics-draw-string-decorated*", "test": "DrawStringDecorated"}, + {"pattern": "graphics-draw-string", "test": "DrawString"}, + {"pattern": "graphics-draw-string-direct-*", "test": "DrawString"}, + {"pattern": "graphics-draw-string-image-*", "test": "DrawString"}, + {"pattern": "graphics-draw-image-rect*", "test": "DrawImage"}, + {"pattern": "graphics-draw-gradient-stops*", "test": "DrawGradientStops"}, + {"pattern": "graphics-draw-gradient", "test": "DrawGradient"}, + {"pattern": "graphics-draw-gradient-direct-*", "test": "DrawGradient"}, + {"pattern": "graphics-draw-gradient-image-*", "test": "DrawGradient"}, + {"pattern": "graphics-gaussian-blur*", "test": "GaussianBlur"}, + {"pattern": "graphics-fill-polygon*", "test": "FillPolygon"}, + {"pattern": "graphics-affine-scale*", "test": "AffineScale"}, + {"pattern": "graphics-scale*", "test": "Scale"}, + {"pattern": "graphics-fill-triangle*", "test": "FillTriangle"}, + {"pattern": "graphics-draw-shape*", "test": "DrawShape"}, + {"pattern": "graphics-fill-shape*", "test": "FillShape"}, + {"pattern": "graphics-inscribed-triangle-grid*", "test": "InscribedTriangleGrid"}, + {"pattern": "graphics-stroke-test*", "test": "StrokeTest"}, + {"pattern": "graphics-clip-under-rotation*", "test": "ClipUnderRotation"}, + {"pattern": "graphics-clip", "test": "Clip"}, + {"pattern": "graphics-clip-direct-*", "test": "Clip"}, + {"pattern": "graphics-clip-image-*", "test": "Clip"}, + {"pattern": "graphics-empty-clip", "test": "EmptyClip"}, + {"pattern": "graphics-partial-flush-clip-escape", "test": "PartialFlushClipEscape"}, + {"pattern": "graphics-tile-image*", "test": "TileImage"}, + {"pattern": "graphics-rotate*", "test": "Rotate"}, + {"pattern": "graphics-transform-translation*", "test": "TransformTranslation"}, + {"pattern": "graphics-transform-rotation*", "test": "TransformRotation"}, + {"pattern": "graphics-transform-perspective*", "test": "TransformPerspective"}, + {"pattern": "graphics-transform-camera*", "test": "TransformCamera"}, + {"pattern": "graphics-large-stroke-dirty-clip", "test": "LargeStrokeDirtyClipTest"}, + {"pattern": "chart-line", "test": "ChartLineScreenshotTest"}, + {"pattern": "chart-cubic-line", "test": "ChartCubicLineScreenshotTest"}, + {"pattern": "chart-bar", "test": "ChartBarScreenshotTest"}, + {"pattern": "chart-bar-stacked", "test": "ChartStackedBarScreenshotTest"}, + {"pattern": "chart-range-bar", "test": "ChartRangeBarScreenshotTest"}, + {"pattern": "chart-scatter", "test": "ChartScatterScreenshotTest"}, + {"pattern": "chart-bubble", "test": "ChartBubbleScreenshotTest"}, + {"pattern": "chart-pie", "test": "ChartPieScreenshotTest"}, + {"pattern": "chart-doughnut", "test": "ChartDoughnutScreenshotTest"}, + {"pattern": "chart-radar", "test": "ChartRadarScreenshotTest"}, + {"pattern": "chart-time", "test": "ChartTimeChartScreenshotTest"}, + {"pattern": "chart-combined-xy", "test": "ChartCombinedXYScreenshotTest"}, + {"pattern": "chart-transform", "test": "ChartTransformScreenshotTest"}, + {"pattern": "chart-rotated-pie", "test": "ChartRotatedScreenshotTest"}, + {"pattern": "BrowserComponent", "test": "BrowserComponentScreenshotTest"}, + {"pattern": "RichTextArea", "test": "RichTextAreaScreenshotTest"}, + {"pattern": "CodeEditor", "test": "CodeEditorScreenshotTest"}, + {"pattern": "MediaPlayback", "test": "MediaPlaybackScreenshotTest"}, + {"pattern": "Sheet", "test": "SheetScreenshotTest"}, + {"pattern": "SheetSlideUpAnimationScreenshotTest", "test": "SheetSlideUpAnimationScreenshotTest"}, + {"pattern": "ChatView_*", "test": "ChatViewScreenshotTest"}, + {"pattern": "ChatInput_*", "test": "ChatInputScreenshotTest"}, + {"pattern": "ImageViewerNavigationModes", "test": "ImageViewerNavigationScreenshotTest"}, + {"pattern": "TabsBehavior", "test": "TabsScreenshotTest"}, + {"pattern": "TextAreaAlignmentStates", "test": "TextAreaAlignmentScreenshotTest"}, + {"pattern": "ValidatorLightweightPicker", "test": "ValidatorLightweightPickerScreenshotTest"}, + {"pattern": "LightweightPickerButtons*", "test": "LightweightPickerButtonsScreenshotTest"}, + {"pattern": "ToastBarTopPosition", "test": "ToastBarTopPositionScreenshotTest"}, + {"pattern": "ButtonTheme_*", "test": "ButtonThemeScreenshotTest"}, + {"pattern": "TextFieldTheme_*", "test": "TextFieldThemeScreenshotTest"}, + {"pattern": "CheckBoxRadioTheme_*", "test": "CheckBoxRadioThemeScreenshotTest"}, + {"pattern": "SwitchTheme_*", "test": "SwitchThemeScreenshotTest"}, + {"pattern": "PickerTheme_*", "test": "PickerThemeScreenshotTest"}, + {"pattern": "ToolbarTheme_*", "test": "ToolbarThemeScreenshotTest"}, + {"pattern": "TabsTheme_*", "test": "TabsThemeScreenshotTest"}, + {"pattern": "MultiButtonTheme_*", "test": "MultiButtonThemeScreenshotTest"}, + {"pattern": "ListTheme_*", "test": "ListThemeScreenshotTest"}, + {"pattern": "DialogTheme_*", "test": "DialogThemeScreenshotTest"}, + {"pattern": "CenteredDialogTitle_*", "test": "CenteredDialogTitleScreenshotTest"}, + {"pattern": "CenteredInteractionDialogTitle_*", "test": "CenteredInteractionDialogTitleScreenshotTest"}, + {"pattern": "AppReviewDialog", "test": "AppReviewDialogScreenshotTest"}, + {"pattern": "FloatingActionButtonTheme_*", "test": "FloatingActionButtonThemeScreenshotTest"}, + {"pattern": "SpanLabelTheme_*", "test": "SpanLabelThemeScreenshotTest"}, + {"pattern": "ShowcaseTheme_*", "test": "DarkLightShowcaseThemeScreenshotTest"}, + {"pattern": "PaletteOverrideTheme_*", "test": "PaletteOverrideThemeScreenshotTest"}, + {"pattern": "css-gradients", "test": "CssGradientsScreenshotTest"}, + {"pattern": "SurfacesRasterizer", "test": "SurfacesRasterizerScreenshotTest"}, + {"pattern": "RealOsmVector", "test": "RealOsmVectorScreenshotTest"}, + {"pattern": "VectorMapDarkStyle", "test": "VectorMapDarkStyleScreenshotTest"}, + {"pattern": "VectorMapMarkers", "test": "VectorMapMarkersScreenshotTest"}, + {"pattern": "VectorMapShapes", "test": "VectorMapShapesScreenshotTest"}, + {"pattern": "NativeMapFallback", "test": "NativeMapFallbackScreenshotTest"}, + {"pattern": "GoogleWebMap", "test": "GoogleWebMapScreenshotTest"}, + {"pattern": "SVGStatic", "test": "SVGStaticScreenshotTest"}, + {"pattern": "SVGAnimatedScreenshotTest", "test": "SVGAnimatedScreenshotTest"}, + {"pattern": "LottieAnimatedScreenshotTest", "test": "LottieAnimatedScreenshotTest"}, + {"pattern": "Gpu3DCube", "test": "Gpu3DCubeScreenshotTest"}, + {"pattern": "Gpu3DTexturedCube", "test": "Gpu3DTexturedCubeScreenshotTest"}, + {"pattern": "Gpu3DModel", "test": "Gpu3DModelScreenshotTest"}, + {"pattern": "Gpu3DAnimation", "test": "Gpu3DAnimationTest"}, + {"pattern": "landscape", "test": "OrientationLockScreenshotTest"}, + {"pattern": "DesktopMode", "test": "DesktopModeScreenshotTest"}, + {"pattern": "VideoIODecodedFrames", "test": "VideoIODecodedFramesScreenshotTest"}, + {"pattern": "VRStereoScene", "test": "VRStereoSceneScreenshotTest"}, + {"pattern": "Media360Panorama", "test": "Media360PanoramaScreenshotTest"} + ] +} diff --git a/docs/website/data/port_status_environment.json b/docs/website/data/port_status_environment.json new file mode 100644 index 0000000000..8ab8ebc7aa --- /dev/null +++ b/docs/website/data/port_status_environment.json @@ -0,0 +1,28 @@ +{ + "schema_version": 1, + "generated_at": "2026-07-16T15:45:26Z", + "commit": "9df6f7a1ea0e10a19c84b8994725d9c9d9dd9899", + "browsers": [ + { + "id": "chromium", + "name": "Chromium", + "engine_version": "149.0.7827.55", + "status": "pass", + "coverage": "Full compliance suite plus nightly lifecycle validation" + }, + { + "id": "firefox", + "name": "Firefox", + "engine_version": "151.0", + "status": "pass", + "coverage": "Nightly lifecycle validation" + }, + { + "id": "webkit", + "name": "WebKit", + "engine_version": "26.5", + "status": "pass", + "coverage": "Nightly lifecycle validation" + } + ] +} diff --git a/docs/website/data/port_status_reports/android.json b/docs/website/data/port_status_reports/android.json new file mode 100644 index 0000000000..b37e895681 --- /dev/null +++ b/docs/website/data/port_status_reports/android.json @@ -0,0 +1,726 @@ +{ + "commit": "b51436a94d6451eae6b2673e1ff48eb88003c142", + "generated_at": "2026-07-16T15:09:30Z", + "port": "android", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29508571507", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 163, + "skip": 1 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-and" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "status": "pass" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 270971236 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 33987228 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 306089084 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 239946517 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 174849906 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 5031760674 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 145574439 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 151462539 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 743204825 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 307991556 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/ios-gl.json b/docs/website/data/port_status_reports/ios-gl.json new file mode 100644 index 0000000000..2e30d989ee --- /dev/null +++ b/docs/website/data/port_status_reports/ios-gl.json @@ -0,0 +1,729 @@ +{ + "commit": "205dcc675896c1c094db47d9b0a2622adf7ec3bf", + "generated_at": "2026-07-16T12:54:52Z", + "port": "ios-gl", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29496889339", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 162, + "skip": 2 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-ios" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "reasons": [ + "encode-unavailable-on-ios:Failed" + ], + "status": "skip" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 260829000 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 20455000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 39588000 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 106287000 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 65812000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 288774000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 218533000 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 126690000 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 164612000 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 47528000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/ios-metal.json b/docs/website/data/port_status_reports/ios-metal.json new file mode 100644 index 0000000000..9eb4ddeca6 --- /dev/null +++ b/docs/website/data/port_status_reports/ios-metal.json @@ -0,0 +1,729 @@ +{ + "commit": "205dcc675896c1c094db47d9b0a2622adf7ec3bf", + "generated_at": "2026-07-16T13:06:47Z", + "port": "ios-metal", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29496889339", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 162, + "skip": 2 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-ios" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "reasons": [ + "encode-unavailable-on-ios:Failed" + ], + "status": "skip" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 440011000 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 26479000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 47714000 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 135175000 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 76514000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 410277000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 367596000 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 129907000 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 246493000 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 86101000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/javascript.json b/docs/website/data/port_status_reports/javascript.json new file mode 100644 index 0000000000..f315708666 --- /dev/null +++ b/docs/website/data/port_status_reports/javascript.json @@ -0,0 +1,726 @@ +{ + "commit": "4a3f5807e0850131483b20b45d3802c9c42f7fd7", + "generated_at": "2026-07-16T14:48:44Z", + "port": "javascript", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29505603266", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 163, + "skip": 1 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-HTML5" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "status": "pass" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 1454299999 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 956000000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 15788000000 + }, + "intArithmetic": { + "checksum": "1313580095284", + "duration_ns": 721800001 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 3997400000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 300100000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 3617099999 + }, + "quicksort": { + "checksum": "786886890168670967", + "duration_ns": 577900001 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 1071299999 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 1333500000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/linux-arm64.json b/docs/website/data/port_status_reports/linux-arm64.json new file mode 100644 index 0000000000..d15d1780c5 --- /dev/null +++ b/docs/website/data/port_status_reports/linux-arm64.json @@ -0,0 +1,723 @@ +{ + "commit": "205dcc675896c1c094db47d9b0a2622adf7ec3bf", + "generated_at": "2026-07-16T12:38:03Z", + "port": "linux-arm64", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29496888305", + "schema_version": 1, + "suite_finished": false, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 164, + "skip": 0 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "status": "pass" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "status": "pass" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 167647092 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 26067574 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 29352127 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 62775877 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 39325844 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 273404082 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 4638409365 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 91416037 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 137627018 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 36440861 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/linux-x64.json b/docs/website/data/port_status_reports/linux-x64.json new file mode 100644 index 0000000000..f010ac8d80 --- /dev/null +++ b/docs/website/data/port_status_reports/linux-x64.json @@ -0,0 +1,723 @@ +{ + "commit": "205dcc675896c1c094db47d9b0a2622adf7ec3bf", + "generated_at": "2026-07-16T12:37:58Z", + "port": "linux-x64", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29496888305", + "schema_version": 1, + "suite_finished": false, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 164, + "skip": 0 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "status": "pass" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "status": "pass" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 253856480 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 28233661 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 27566288 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 82153005 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 53960096 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 184573752 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 5754321719 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 148385092 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 183272160 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 33385972 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/mac-native.json b/docs/website/data/port_status_reports/mac-native.json new file mode 100644 index 0000000000..e0f2cdca9f --- /dev/null +++ b/docs/website/data/port_status_reports/mac-native.json @@ -0,0 +1,729 @@ +{ + "commit": "205dcc675896c1c094db47d9b0a2622adf7ec3bf", + "generated_at": "2026-07-16T13:13:15Z", + "port": "mac-native", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29496889418", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 162, + "skip": 2 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-ios" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "reasons": [ + "encode-unavailable-on-ios:Failed" + ], + "status": "skip" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 284063000 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 20505000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 40363000 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 107821000 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 65412000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 286132000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 328540000 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 111802000 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 167855000 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 24303000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/tvos.json b/docs/website/data/port_status_reports/tvos.json new file mode 100644 index 0000000000..b49d48cbf2 --- /dev/null +++ b/docs/website/data/port_status_reports/tvos.json @@ -0,0 +1,729 @@ +{ + "commit": "205dcc675896c1c094db47d9b0a2622adf7ec3bf", + "generated_at": "2026-07-16T13:10:57Z", + "port": "tvos", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29496889339", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 162, + "skip": 2 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-ios" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "reasons": [ + "VideoIO-unsupported-on-ios" + ], + "status": "skip" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 558066000 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 209285000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 183568000 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 181322000 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 109270000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 727584000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 266922000 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 331650000 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 718026000 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 154040000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/watchos.json b/docs/website/data/port_status_reports/watchos.json new file mode 100644 index 0000000000..9dbc9a2106 --- /dev/null +++ b/docs/website/data/port_status_reports/watchos.json @@ -0,0 +1,680 @@ +{ + "commit": "dec3d172f6fe327798cc083f2bab03a98cf9a8ac", + "generated_at": "2026-07-15T01:51:30Z", + "port": "watchos", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29380730117", + "schema_version": 1, + "suite_finished": true, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 162, + "skip": 2 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "reasons": [ + "needs-runtime-permission-on-ios" + ], + "status": "skip" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "reasons": [ + "VideoIO-unsupported-on-ios" + ], + "status": "skip" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success" +} diff --git a/docs/website/data/port_status_reports/windows-arm64.json b/docs/website/data/port_status_reports/windows-arm64.json new file mode 100644 index 0000000000..7c37274207 --- /dev/null +++ b/docs/website/data/port_status_reports/windows-arm64.json @@ -0,0 +1,723 @@ +{ + "commit": "d17e18eb583d0fa7f433e3ad3e293264475b49ad", + "generated_at": "2026-07-16T17:22:25Z", + "port": "windows-arm64", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29515923079", + "schema_version": 1, + "suite_finished": false, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 164, + "skip": 0 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "status": "pass" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "status": "pass" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 170546000 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 24551000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 50467000 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 62834000 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 39388000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 220008000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 5136372000 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 88473000 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 121129000 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 32273000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_reports/windows-x64.json b/docs/website/data/port_status_reports/windows-x64.json new file mode 100644 index 0000000000..00a96f4d00 --- /dev/null +++ b/docs/website/data/port_status_reports/windows-x64.json @@ -0,0 +1,723 @@ +{ + "commit": "d17e18eb583d0fa7f433e3ad3e293264475b49ad", + "generated_at": "2026-07-16T17:21:16Z", + "port": "windows-x64", + "run_url": "https://github.com/codenameone/CodenameOne/actions/runs/29515915384", + "schema_version": 1, + "suite_finished": false, + "summary": { + "fail": 0, + "not-run": 0, + "pass": 164, + "skip": 0 + }, + "tests": { + "ARApiTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "AccessibilityTest": { + "feature": "accessibility", + "status": "pass" + }, + "AdsScreenshotTest": { + "feature": "ads", + "status": "pass" + }, + "AffineScale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "AnimateHierarchyScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateLayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AnimateUnlayoutScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "AppReviewDialogScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "AudioMixerApiTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "BackgroundThreadUiAccessTest": { + "feature": "threading", + "status": "pass" + }, + "Base64NativePerformanceTest": { + "feature": "native-base64", + "status": "pass" + }, + "BridgeBulkTransferGuardTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "BrowserComponentScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "BytecodeTranslatorRegressionTest": { + "feature": "bytecode-runtime", + "status": "pass" + }, + "CallDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "CameraApiTest": { + "feature": "camera-access", + "status": "pass" + }, + "CenteredDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "CenteredInteractionDialogTitleScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "ChartBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartBubbleScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCombinedXYScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartCubicLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartDoughnutScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartLineScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartPieScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRadarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRangeBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartRotatedScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartScatterScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartStackedBarScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTimeChartScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChartTransformScreenshotTest": { + "feature": "charts", + "status": "pass" + }, + "ChatInputScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "ChatViewScreenshotTest": { + "feature": "chat-components", + "status": "pass" + }, + "CheckBoxRadioThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "Clip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "ClipUnderRotation": { + "feature": "graphics-clipping", + "status": "pass" + }, + "CodeEditorScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "ComponentReplaceFadeScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceFlipScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "ComponentReplaceSlideScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "CoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "CryptoApiTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "CssFilterBlurScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "CssGradientsScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DarkLightShowcaseThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "DesktopModeScreenshotTest": { + "feature": "desktop-mode", + "status": "pass" + }, + "DeviceInputApiTest": { + "feature": "text-input", + "status": "pass" + }, + "DialogThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "DrawArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawGradient": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawGradientStops": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "DrawImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawLine": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "DrawShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "DrawString": { + "feature": "graphics-text-images", + "status": "pass" + }, + "DrawStringDecorated": { + "feature": "graphics-text-images", + "status": "pass" + }, + "EmptyClip": { + "feature": "graphics-clipping", + "status": "pass" + }, + "FadeTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FileSystemStorageOpenInputStreamMissingTest": { + "feature": "filesystem-storage", + "status": "pass" + }, + "FillArc": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillPolygon": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillRoundRect": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FillShape": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "FillTriangle": { + "feature": "graphics-primitives", + "status": "pass" + }, + "FlipTransitionTest": { + "feature": "fade-flip-transitions", + "status": "pass" + }, + "FloatingActionButtonThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "FloatingToStringTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "GaussianBlur": { + "feature": "graphics-gradients-filters", + "status": "pass" + }, + "GoogleWebMapScreenshotTest": { + "feature": "native-web-maps", + "status": "pass" + }, + "Gpu3DAnimationTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DModelScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "Gpu3DTexturedCubeScreenshotTest": { + "feature": "gpu-3d", + "status": "pass" + }, + "ImageViewerNavigationScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "InPlaceEditViewTest": { + "feature": "text-input", + "status": "pass" + }, + "InscribedTriangleGrid": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "Java17Tests": { + "feature": "java-standard-apis", + "status": "pass" + }, + "KotlinUiTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "LargeStrokeDirtyClipTest": { + "feature": "graphics-clipping", + "status": "pass" + }, + "LightweightPickerButtonsScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "ListThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "LocalNotificationOverrideTest": { + "feature": "notifications", + "status": "pass" + }, + "LottieAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "MainScreenScreenshotTest": { + "feature": "application-bootstrap", + "status": "pass" + }, + "Media360PanoramaScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "MediaPlaybackScreenshotTest": { + "feature": "audio-media-playback", + "status": "pass" + }, + "MorphElementMorphScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrolledSourceTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionScrubScreenshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionSnapshotTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MorphTransitionTest": { + "feature": "morph-transitions", + "status": "pass" + }, + "MotionSensorDeviceTest": { + "feature": "ar-motion-sensors", + "status": "pass" + }, + "MotionShowcaseScreenshotTest": { + "feature": "layout-animation", + "status": "pass" + }, + "MultiButtonThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "MutableImageClipReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "MutableImageReadbackTest": { + "feature": "mutable-images", + "status": "pass" + }, + "NanoTimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "NativeMapFallbackScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "OrientationLockScreenshotTest": { + "feature": "orientation", + "status": "pass" + }, + "PaletteOverrideThemeScreenshotTest": { + "feature": "theme-palette-css", + "status": "pass" + }, + "PartialFlushClipEscape": { + "feature": "graphics-clipping", + "status": "pass" + }, + "PickerCancelRestoreTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "PickerThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "PullToRefreshSpinnerScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "RealOsmVectorScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "RichTextAreaScreenshotTest": { + "feature": "embedded-web-content", + "status": "pass" + }, + "Rotate": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SVGAnimatedScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "SVGStaticScreenshotTest": { + "feature": "svg-lottie", + "status": "pass" + }, + "Scale": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "SecureStorageTest": { + "feature": "secure-storage-crypto", + "status": "pass" + }, + "SheetScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SheetSlideUpAnimationScreenshotTest": { + "feature": "sheets", + "status": "pass" + }, + "SimdApiTest": { + "feature": "simd", + "status": "pass" + }, + "SimdBenchmarkTest": { + "feature": "simd", + "status": "pass" + }, + "SimdLargeAllocaTest": { + "feature": "simd", + "status": "pass" + }, + "SlideFadeTitleTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalBackTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SlideVerticalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "SmoothScrollScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "SpanLabelThemeScreenshotTest": { + "feature": "dialogs-and-labels", + "status": "pass" + }, + "StatusBarTapDiagnosticScreenshotTest": { + "feature": "status-bar-events", + "status": "pass" + }, + "StickyHeaderFadeTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StickyHeaderSlideTransitionScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "StreamApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StringApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "StrokeTest": { + "feature": "graphics-shapes-strokes", + "status": "pass" + }, + "SurfacesActionDispatchTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesPublishTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRasterizerScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesRemoteViewsScreenshotTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesSerializerRoundTripTest": { + "feature": "surfaces", + "status": "pass" + }, + "SurfacesTimelineLogicTest": { + "feature": "surfaces", + "status": "pass" + }, + "SwitchThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TabsAnimatedIndicatorScreenshotTest": { + "feature": "tabs-animation", + "status": "pass" + }, + "TabsScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TabsThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TensileBounceScreenshotTest": { + "feature": "scrolling-and-pull", + "status": "pass" + }, + "TextAreaAlignmentScreenshotTest": { + "feature": "image-viewer-tabs-text", + "status": "pass" + }, + "TextFieldThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TileImage": { + "feature": "graphics-text-images", + "status": "pass" + }, + "TimeApiTest": { + "feature": "java-standard-apis", + "status": "pass" + }, + "ToastBarTopPositionScreenshotTest": { + "feature": "toast-notifications", + "status": "pass" + }, + "ToolbarThemeScreenshotTest": { + "feature": "native-theme-controls", + "status": "pass" + }, + "TransformCamera": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformPerspective": { + "feature": "graphics-3d-transforms", + "status": "pass" + }, + "TransformRotation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "TransformTranslation": { + "feature": "graphics-2d-transforms", + "status": "pass" + }, + "UncoverHorizontalTransitionTest": { + "feature": "slide-cover-transitions", + "status": "pass" + }, + "VPNDetectionAPITest": { + "feature": "device-security-signals", + "status": "pass" + }, + "VRStereoSceneScreenshotTest": { + "feature": "immersive-media", + "status": "pass" + }, + "ValidatorLightweightPickerScreenshotTest": { + "feature": "pickers-validation", + "status": "pass" + }, + "VectorMapDarkStyleScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapMarkersScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VectorMapShapesScreenshotTest": { + "feature": "vector-maps", + "status": "pass" + }, + "VideoIODecodedFramesScreenshotTest": { + "feature": "video-decoding", + "status": "pass" + }, + "VideoIORoundTripTest": { + "feature": "video-round-trip", + "status": "pass" + } + }, + "bootstrap_source": "successful-master-workflow", + "workflow_conclusion": "success", + "performance": { + "benchmark_version": 1, + "benchmarks": { + "arrayRandom": { + "checksum": "-2288487891715278", + "duration_ns": 290140000 + }, + "arraySequential": { + "checksum": "0", + "duration_ns": 24989000 + }, + "hashMapChurn": { + "checksum": "49941", + "duration_ns": 61276000 + }, + "intArithmetic": { + "checksum": "1307491170054", + "duration_ns": 78850000 + }, + "longArithmetic": { + "checksum": "6887886960473257608", + "duration_ns": 60657000 + }, + "mathTranscendental": { + "checksum": "4729652805076374709", + "duration_ns": 175326000 + }, + "objectAllocation": { + "checksum": "2999790376128", + "duration_ns": 4421996000 + }, + "quicksort": { + "checksum": "809667393311589960", + "duration_ns": 135399000 + }, + "recursion": { + "checksum": "33385282", + "duration_ns": 242775000 + }, + "stringBuilding": { + "checksum": "-609121604069", + "duration_ns": 32223000 + } + }, + "method": "minimum of five measured runs after three in-process warm-ups", + "missing": [], + "status": "complete", + "suite_checksum": 0 + } +} diff --git a/docs/website/data/port_status_supplement.json b/docs/website/data/port_status_supplement.json new file mode 100644 index 0000000000..2f2ad1cd4d --- /dev/null +++ b/docs/website/data/port_status_supplement.json @@ -0,0 +1,287 @@ +{ + "skip_reasons": [ + { + "test": "CameraApiTest", + "reason": "The unattended runner cannot respond to operating-system camera permission prompts or provide stable physical-camera input. The test therefore avoids opening a real session on targets where doing so could hang CI or produce nondeterministic frames.", + "platform_support": "A skipped camera test does not mean the Codename One port is unsupported. Every listed target remains a supported port; camera availability is a separate runtime capability and depends on the device, permissions, and camera backend.", + "verification": "The native camera implementations are compiled in their port builds and exercised with granted permissions on real hardware or an interactive browser. Deterministic API assertions use the synthetic camera backend outside this portability table." + }, + { + "test": "VideoIORoundTripTest", + "reason": "This assertion requires a working video encoder as well as a decoder. Apple simulator and constrained-device runners do not expose a stable encoder to the headless job, so the encode/decode round trip is skipped there.", + "platform_support": "The port remains supported. Video playback and frame decoding are measured separately by VideoIODecodedFramesScreenshotTest; this skip is limited to creating a new encoded video in that CI environment.", + "verification": "Encoder-backed targets run the full counting-frame and audio round trip. Apple media playback and decoding are covered separately, while device-only recording is verified in signed hardware builds." + } + ], + "features": [ + { + "id": "real-camera-capture", + "category": "Hardware and permissions", + "name": "Real camera and media capture", + "description": "Live preview, still capture, and device camera selection through the native camera backend.", + "testing": "Build each native backend, then run permission-granted capture checks on hardware or an interactive browser and verify a real frame and saved image.", + "why_not_automated": "A headless portability run cannot accept consent dialogs, guarantee a camera device, or compare nondeterministic sensor frames.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "CameraX", "detail": "Native CameraX backend; runtime permission and hardware required."}, + {"ports": ["ios-gl", "ios-metal", "mac-native"], "state": "supported", "label": "AVFoundation", "detail": "Native AVFoundation backend; signed build, entitlement, permission, and camera hardware required."}, + {"ports": ["javascript"], "state": "conditional", "label": "MediaDevices", "detail": "Browser mediaDevices backend when the page is secure and the user grants access."}, + {"ports": ["linux-x64", "linux-arm64"], "state": "conditional", "label": "Native camera", "detail": "Native desktop camera backend when a compatible host camera is available."}, + {"ports": ["windows-x64", "windows-arm64"], "state": "conditional", "label": "Media Foundation", "detail": "Native Media Foundation camera backend when the host exposes a camera."}, + {"ports": ["watchos", "tvos"], "state": "unavailable", "label": "No camera", "detail": "The target form factor does not expose a Codename One camera-capture backend."} + ] + }, + { + "id": "microphone-recording", + "category": "Hardware and permissions", + "name": "Microphone and live audio recording", + "description": "Audio capture from a physical microphone through the platform media stack.", + "testing": "Use a signed permission-granted build, record a calibrated tone or voice sample, and verify duration, level, and playback on the target device.", + "why_not_automated": "Hosted runners do not provide consistent microphones and operating systems deliberately require interactive consent.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal", "mac-native"], "state": "supported", "label": "Native recorder", "detail": "Native media recorder with runtime permission and physical input."}, + {"ports": ["javascript"], "state": "conditional", "label": "Browser capture", "detail": "Available through browser media capture on a secure origin after consent."}, + {"ports": ["linux-x64", "linux-arm64", "windows-x64", "windows-arm64"], "state": "conditional", "label": "Host audio", "detail": "Available when the native desktop media stack exposes an input device."}, + {"ports": ["watchos", "tvos"], "state": "unavailable", "label": "No suite backend", "detail": "No general-purpose Codename One recording backend is declared for this target."} + ] + }, + { + "id": "ar-motion-hardware", + "category": "Hardware and permissions", + "name": "Live AR and physical motion sensors", + "description": "AR sessions plus accelerometer, gyroscope, and other readings from real hardware.", + "testing": "Run the AR or sensor sample on supported hardware, verify session startup and sensor updates, and compare motion against a controlled physical action.", + "why_not_automated": "Simulators do not provide a real camera pose, AR runtime, or reproducible physical movement; the automated row checks API contracts and unsupported fallbacks instead.", + "coverage": [ + {"ports": ["android"], "state": "conditional", "label": "ARCore / sensors", "detail": "Available on compatible devices with the required vendor services and sensors."}, + {"ports": ["ios-gl", "ios-metal"], "state": "conditional", "label": "ARKit / sensors", "detail": "Available on compatible iPhone or iPad hardware."}, + {"ports": ["watchos"], "state": "conditional", "label": "Motion sensors", "detail": "Motion sensing is form-factor dependent; general AR sessions are not applicable."}, + {"ports": ["javascript"], "state": "conditional", "label": "Browser sensors", "detail": "Browser sensor APIs depend on browser policy, secure context, consent, and hardware."}, + {"ports": ["mac-native", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "tvos"], "state": "unavailable", "label": "Fallback contract", "detail": "The portable API reports that no live AR or motion backend is present."} + ] + }, + { + "id": "location-geofencing", + "category": "Device services", + "name": "Location, background location, and geofencing", + "description": "Foreground fixes, monitored regions, and background location delivery.", + "testing": "Install a signed build, grant the appropriate permission level, feed known routes or physically cross a geofence, and verify foreground and background callbacks.", + "why_not_automated": "The result depends on user permission, GPS/radio state, operating-system scheduling, and physical movement outside the hosted runner.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "supported", "label": "Native location", "detail": "Native foreground and background location subject to OS permissions and policy."}, + {"ports": ["mac-native", "watchos"], "state": "conditional", "label": "Apple location", "detail": "Available where the target and entitlement expose Core Location behavior."}, + {"ports": ["javascript"], "state": "conditional", "label": "Geolocation", "detail": "Foreground browser geolocation on a secure origin after consent; background behavior is browser-limited."}, + {"ports": ["linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "tvos"], "state": "unavailable", "label": "No declared backend", "detail": "No complete location and geofencing backend is declared for this portability target."} + ] + }, + { + "id": "push-notifications", + "category": "Cloud and OS services", + "name": "Remote push notifications", + "description": "Registration, token delivery, background receipt, actions, and badges through platform push services.", + "testing": "Use a signed app and real provider credentials, register a device, send from the push service, and verify foreground, background, and launch delivery.", + "why_not_automated": "Push requires certificates or provider keys, an externally reachable service, a uniquely registered installation, and asynchronous OS delivery.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "FCM", "detail": "Firebase Cloud Messaging with app credentials and notification permission."}, + {"ports": ["ios-gl", "ios-metal"], "state": "supported", "label": "APNs", "detail": "Apple Push Notification service with signing entitlements and permission."}, + {"ports": ["javascript"], "state": "conditional", "label": "Web Push", "detail": "Supported by compatible browsers on HTTPS with service-worker and provider setup."}, + {"ports": ["mac-native"], "state": "conditional", "label": "Apple entitlement", "detail": "Depends on the signed macOS target and its notification entitlements."}, + {"ports": ["linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "No standalone backend", "detail": "No current standalone Codename One remote-push backend is declared for this target."} + ] + }, + { + "id": "in-app-purchases", + "category": "Store services", + "name": "In-app purchases and subscriptions", + "description": "Store product lookup, checkout, receipt restore, subscription state, and management UI.", + "testing": "Create sandbox products, sign with a store account, complete purchase and restore flows, and validate receipts against the store or Commerce backend.", + "why_not_automated": "The flow requires store-side product configuration, signed identities, sandbox accounts, payment UI, and mutable server receipt state.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "Play Billing", "detail": "Google Play purchase and subscription flow in a store-installed build."}, + {"ports": ["ios-gl", "ios-metal"], "state": "supported", "label": "StoreKit", "detail": "Apple StoreKit purchase, restore, and subscription flow."}, + {"ports": ["mac-native"], "state": "conditional", "label": "StoreKit", "detail": "Requires a signed Mac App Store configuration and matching products."}, + {"ports": ["javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "No store adapter", "detail": "No standalone Codename One store-purchase adapter is declared for this target."} + ] + }, + { + "id": "contacts-calendar", + "category": "Personal data", + "name": "Contacts and calendar integration", + "description": "Read or select contacts and create platform calendar entries through protected personal-data APIs.", + "testing": "Populate a device test account, grant access, exercise read/select/write operations, and verify the result in the native contacts or calendar application.", + "why_not_automated": "Access is permission-gated and the expected result lives in private user databases and native UI outside the test process.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "supported", "label": "Native stores", "detail": "Native contacts and calendar services after the user grants access."}, + {"ports": ["mac-native"], "state": "conditional", "label": "Apple services", "detail": "Availability depends on the macOS target, entitlement, and user account."}, + {"ports": ["javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "No portable store", "detail": "The target does not expose a complete Codename One personal-data backend."} + ] + }, + { + "id": "biometrics", + "category": "Security hardware", + "name": "Biometric authentication and protected secrets", + "description": "Fingerprint, face, or iris authentication bound to platform keystore material.", + "testing": "Enroll biometrics on hardware, run success, cancellation, lockout, and enrollment-change cases, and verify protected-secret invalidation.", + "why_not_automated": "Hosted runners have no enrolled biometric hardware and native prompts are intentionally controlled by the user and secure hardware.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "BiometricPrompt", "detail": "Android BiometricPrompt or legacy fingerprint support, backed by Android Keystore."}, + {"ports": ["ios-gl", "ios-metal"], "state": "supported", "label": "LocalAuthentication", "detail": "Face ID or Touch ID through LocalAuthentication and Keychain."}, + {"ports": ["mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "NOT_AVAILABLE", "detail": "The portable API returns its documented non-supporting fallback."} + ] + }, + { + "id": "nfc", + "category": "Security hardware", + "name": "NFC tags, smart cards, and host card emulation", + "description": "NDEF read/write, tag technology exchange, and platform-dependent card emulation.", + "testing": "Present known physical tags and cards, verify payloads and errors, and use a certified reader for host-card-emulation exchanges.", + "why_not_automated": "NFC requires short-range hardware, physical tags or readers, user presentation, and platform entitlements that hosted runners lack.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "Android NFC", "detail": "NDEF, tag technologies, and HCE on compatible hardware."}, + {"ports": ["ios-gl", "ios-metal"], "state": "conditional", "label": "Core NFC", "detail": "NDEF and selected tag technologies; HCE is restricted by iOS version and region."}, + {"ports": ["mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "NOT_AVAILABLE", "detail": "The API returns its documented non-supporting fallback."} + ] + }, + { + "id": "bluetooth-le", + "category": "Security hardware", + "name": "Bluetooth Low Energy", + "description": "Peripheral discovery, connection, services, characteristics, notifications, and writes through the maintained Bluetooth library.", + "testing": "Use a known peripheral or protocol simulator, scan and connect, then verify characteristic reads, writes, notifications, reconnects, and permission denial.", + "why_not_automated": "Radio state, nearby peripherals, pairing, permissions, and timing are external to the deterministic screenshot runner.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "conditional", "label": "cn1-bluetooth", "detail": "Maintained native library backend on supported phone and tablet hardware."}, + {"ports": ["mac-native", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64"], "state": "conditional", "label": "Host-dependent", "detail": "Desktop hardware support depends on the selected maintained library backend and host adapter."}, + {"ports": ["javascript", "watchos", "tvos"], "state": "unavailable", "label": "No declared backend", "detail": "No maintained general-purpose Bluetooth backend is declared for this target."} + ] + }, + { + "id": "background-execution", + "category": "Lifecycle and scheduling", + "name": "Background fetch and long-running device work", + "description": "Operating-system scheduled callbacks and policy-compliant work while the application is not foregrounded.", + "testing": "Install a signed build, configure the required modes, background or terminate it, and observe callbacks across OS throttling and restart scenarios.", + "why_not_automated": "Scheduling is deliberately nondeterministic, power-policy controlled, entitlement dependent, and often takes longer than a CI job window.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "supported", "label": "Native scheduler", "detail": "Platform background mechanisms subject to OS quotas, permissions, and lifecycle policy."}, + {"ports": ["mac-native"], "state": "conditional", "label": "Target-dependent", "detail": "Availability depends on the macOS application mode and signed capabilities."}, + {"ports": ["javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "No equivalent contract", "detail": "No equivalent Codename One background-fetch contract is declared for this target."} + ] + }, + { + "id": "device-integrity", + "category": "Security services", + "name": "Root, jailbreak, and hardware-backed attestation", + "description": "Runtime compromise signals plus signed Play Integrity or App Attest tokens.", + "testing": "Use release-like signed builds, compromised and clean devices, fresh server nonces, and backend verification of vendor-signed verdicts.", + "why_not_automated": "Trust verdicts depend on hardware-backed keys, store-distributed builds, vendor services, device state, and an application backend.", + "coverage": [ + {"ports": ["android"], "state": "conditional", "label": "Play Integrity", "detail": "Root signals and optional Google Play Integrity when enabled and verified by a backend."}, + {"ports": ["ios-gl", "ios-metal"], "state": "conditional", "label": "App Attest", "detail": "Jailbreak signals and optional Apple App Attest when enabled and verified by a backend."}, + {"ports": ["mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "unavailable", "label": "Unsupported fallback", "detail": "No hardware-backed Codename One attestation backend is declared for this target."} + ] + }, + { + "id": "document-gallery-pickers", + "category": "Native UI and data", + "name": "Document, gallery, and native file pickers", + "description": "User-mediated selection of media and documents from platform-owned providers.", + "testing": "Seed platform storage, launch the native picker, select and cancel items, and verify temporary URI or security-scoped access after returning to the app.", + "why_not_automated": "The decisive UI and permissions belong to another process, and hosted runners do not share an identical populated media or document library.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal", "mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64"], "state": "conditional", "label": "Native picker", "detail": "Uses the target's file, document, or browser picker; available types and access rules vary by OS."}, + {"ports": ["watchos", "tvos"], "state": "unavailable", "label": "No general picker", "detail": "The form factor has no general-purpose Codename One document/gallery picker."} + ] + }, + { + "id": "sharing-communications", + "category": "Native UI and data", + "name": "Share sheets, email, SMS, dialing, and external URLs", + "description": "Hand-off to platform applications and user-selected communication targets.", + "testing": "Open each native chooser or handler on a configured device, complete and cancel actions, and verify returned result metadata where the OS supplies it.", + "why_not_automated": "Installed applications, accounts, SIM capability, chooser UI, and user selection are outside the app process and differ per runner.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "supported", "label": "Native intents", "detail": "Native share and communication handlers when the device has a matching service."}, + {"ports": ["mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64"], "state": "conditional", "label": "OS/browser handler", "detail": "Uses an installed desktop handler, browser capability, or portable fallback where available."}, + {"ports": ["watchos", "tvos"], "state": "unavailable", "label": "Form-factor limited", "detail": "No general-purpose Codename One communication chooser is declared for this target."} + ] + }, + { + "id": "native-app-review", + "category": "Store services", + "name": "Native in-app review prompt", + "description": "Store-owned rating prompt with a portable Codename One fallback sheet.", + "testing": "Use a store-eligible build and account, request the prompt under vendor quota rules, and verify fallback behavior separately.", + "why_not_automated": "Apple and Google intentionally decide whether the native prompt appears, so a request cannot deterministically assert visible store UI.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "Play Review", "detail": "Google Play In-App Review when the build includes the service."}, + {"ports": ["ios-gl", "ios-metal"], "state": "supported", "label": "StoreKit", "detail": "StoreKit review request subject to Apple's display quota."}, + {"ports": ["mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "fallback", "label": "Portable fallback", "detail": "Codename One shows its built-in rating sheet when no native prompt is available."} + ] + }, + { + "id": "live-maps", + "category": "External providers", + "name": "Live native and web map providers", + "description": "Provider tiles, credentials, native peers, gestures, and network-delivered map content.", + "testing": "Use valid provider keys on a networked device, load known coordinates, exercise gestures and markers, and confirm provider attribution and fallback behavior.", + "why_not_automated": "Provider keys are secrets, map imagery changes independently, usage may be billed, and native peers or network tiles are not deterministic pixels.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "conditional", "label": "Native provider", "detail": "Native provider when configured, with the portable map renderer as fallback."}, + {"ports": ["javascript"], "state": "conditional", "label": "Web provider", "detail": "Browser map provider with API key and network access, plus portable fallback."}, + {"ports": ["mac-native", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "fallback", "label": "Portable map", "detail": "Portable vector or tile rendering is used when no native provider is active."} + ] + }, + { + "id": "live-ad-networks", + "category": "External providers", + "name": "Live advertising networks", + "description": "Real provider SDK initialization, inventory requests, consent, click-through, and revenue callbacks.", + "testing": "Use provider test-unit identifiers in a signed build, complete consent flows, and verify fill, impression, click, and lifecycle callbacks.", + "why_not_automated": "Ad inventory, consent state, provider accounts, network policy, and SDK UI are external and nondeterministic; the first table uses deterministic mock ads.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal"], "state": "conditional", "label": "Provider SDK", "detail": "Supported through configured native ad libraries and provider test units."}, + {"ports": ["javascript"], "state": "conditional", "label": "Web integration", "detail": "Depends on the selected web advertising integration and hosting policy."}, + {"ports": ["mac-native", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "fallback", "label": "Mock/custom", "detail": "The portable ad component can be tested with mock or application-provided content; no bundled live network is claimed."} + ] + }, + { + "id": "external-surfaces-os", + "category": "OS presentation", + "name": "Widgets, Live Activities, and OS-owned surfaces", + "description": "The final operating-system presentation of shared surface documents outside the main app window.", + "testing": "Install the correctly signed app or extension, publish timelines and actions, then inspect the launcher, lock screen, Dynamic Island, notification area, or desktop host.", + "why_not_automated": "The first table checks serialization, rasterization, timelines, and dispatch, but the final surface is rendered by a separate OS process with signing and entitlement requirements.", + "coverage": [ + {"ports": ["android"], "state": "supported", "label": "Widgets/notifications", "detail": "Lowers supported surfaces to Android widgets and ongoing notifications."}, + {"ports": ["ios-gl", "ios-metal"], "state": "conditional", "label": "WidgetKit/ActivityKit", "detail": "Requires supported OS versions, extension packaging, and entitlements."}, + {"ports": ["mac-native", "linux-x64", "linux-arm64"], "state": "conditional", "label": "Desktop surface", "detail": "Uses the desktop floating-window or preview presentation available to the port."}, + {"ports": ["windows-x64", "windows-arm64"], "state": "conditional", "label": "Windows surfaces", "detail": "Floating widgets are supported; Widgets Board integration requires MSIX and Windows App SDK packaging."}, + {"ports": ["javascript"], "state": "fallback", "label": "In-app preview", "detail": "Portable document and rasterizer behavior is available without an OS widget host."}, + {"ports": ["watchos", "tvos"], "state": "unavailable", "label": "No declared lowering", "detail": "No standalone Codename One external-surface lowering is declared for this target."} + ] + }, + { + "id": "assistive-technology", + "category": "OS presentation", + "name": "Real screen-reader and assistive-technology behavior", + "description": "How native accessibility services announce, focus, activate, and navigate the rendered application.", + "testing": "Enable the platform screen reader, traverse representative forms, verify announcements and actions, and repeat with dynamic content and input devices.", + "why_not_automated": "The first table validates semantics and API state, while the final speech, focus order, gestures, and switch-control behavior belong to external OS services.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal", "mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64"], "state": "conditional", "label": "OS assistive tech", "detail": "Semantic output is consumed by the screen reader or accessibility stack available on that OS."}, + {"ports": ["watchos", "tvos"], "state": "conditional", "label": "Form-factor service", "detail": "Behavior depends on the target's accessibility service and navigation model."} + ] + }, + { + "id": "packaging-native-integration", + "category": "Build integration", + "name": "Signing, packaging, entitlements, and native SDK integration", + "description": "Production artifacts, platform metadata, native interfaces, third-party SDKs, and architecture-specific binaries.", + "testing": "Compile each architecture, inspect the generated package, sign with platform credentials, install it, and exercise the integrated native entry point or SDK in its target environment.", + "why_not_automated": "These checks happen before app startup or require private signing identities, store portals, proprietary SDK credentials, and platform-specific source rather than one shared runtime assertion.", + "coverage": [ + {"ports": ["android", "ios-gl", "ios-metal", "mac-native", "javascript", "linux-x64", "linux-arm64", "windows-x64", "windows-arm64", "watchos", "tvos"], "state": "supported", "label": "Target build", "detail": "The port has its own build, packaging, and native-integration path; exact signing and extension capabilities are target specific."} + ] + } + ] +} diff --git a/docs/website/data/port_status_support.json b/docs/website/data/port_status_support.json new file mode 100644 index 0000000000..693d9c2b59 --- /dev/null +++ b/docs/website/data/port_status_support.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "deployment_support": [ + { + "id": "android", + "platform": "Android", + "architectures": "ARM64, ARMv7, x86_64", + "declared_range": "API 19 and newer", + "ci_evidence": "Full compliance suite on an API 36 x86_64 emulator", + "floor_evidence": "Build floor enforced by android.min_sdk_version; runtime floor validation is being added to the nightly matrix", + "support": "Supported" + }, + { + "id": "ios", + "platform": "iOS and iPadOS", + "architectures": "ARM64 devices; ARM64 simulator", + "declared_range": "iOS 14 and newer", + "ci_evidence": "Full compliance suite on the current Xcode 26 simulator with both Metal and legacy OpenGL renderers", + "floor_evidence": "The deployment target is compiled at 14.0; hosted CI does not currently run an iOS 14 simulator", + "support": "Supported" + }, + { + "id": "macos", + "platform": "macOS", + "architectures": "Apple silicon and Intel through Mac Catalyst", + "declared_range": "macOS 10.15 and newer", + "ci_evidence": "Full native compliance suite on macOS 15 using the Mac Catalyst target", + "floor_evidence": "The macOS 10.15 and Catalyst 13.1 deployment floors are compiled; the oldest runtime is not available on hosted CI", + "support": "Supported, Catalyst scope" + }, + { + "id": "web", + "platform": "Web", + "architectures": "Browser JavaScript runtime", + "declared_range": "Current Chromium, Firefox, and WebKit engines", + "ci_evidence": "Full compliance suite on Chromium; nightly lifecycle validation on Chromium, Firefox, and WebKit", + "floor_evidence": "Exact engine versions come from the latest nightly run below; older browser floors are not claimed until they are exercised", + "support": "Supported" + }, + { + "id": "linux", + "platform": "Linux", + "architectures": "x64 and ARM64", + "declared_range": "glibc 2.28 or newer with GTK3; Alpine Linux through the opt-in musl target", + "ci_evidence": "Full native compliance suite on Ubuntu x64 and Ubuntu ARM64, including GTK, media, browser, storage, notifications, location, and 3D dependencies", + "floor_evidence": "The release toolchain targets the glibc 2.28 ABI. This covers Ubuntu 20.04+, Debian 10+, RHEL/Rocky/AlmaLinux 8+, Fedora 30+, and Linux Mint 20+. Alpine 3.20 is exercised separately with musl.", + "support": "Supported, broad desktop scope" + }, + { + "id": "windows", + "platform": "Windows", + "architectures": "x64 and ARM64", + "declared_range": "Windows 10 and newer; Windows 11 for Widgets Board packages", + "ci_evidence": "Full native compliance suite on Windows 11 for x64 and ARM64", + "floor_evidence": "The plain Win32 executable keeps optional newer APIs dynamic; a Windows 10 runtime job is required before narrowing the supported release floor", + "support": "Supported" + }, + { + "id": "watchos", + "platform": "watchOS", + "architectures": "ARM64_32 devices; simulator", + "declared_range": "watchOS 10 and newer", + "ci_evidence": "Full compliance suite on the current Xcode 26 Apple Watch simulator", + "floor_evidence": "The deployment target is compiled at 10.0; hosted CI does not currently run a watchOS 10 simulator", + "support": "Supported" + }, + { + "id": "tvos", + "platform": "tvOS", + "architectures": "ARM64 devices; simulator", + "declared_range": "tvOS 13 and newer", + "ci_evidence": "Full compliance suite on the current Xcode 26 Apple TV simulator", + "floor_evidence": "The deployment target is compiled at 13.0; hosted CI does not currently run a tvOS 13 simulator", + "support": "Supported" + } + ], + "benchmark": { + "title": "Port performance", + "configuration": "Every target runs the canonical ParparVM common workloads in its generated application. Each timing is the minimum of five measured runs after three in-process warm-ups. Values are absolute and lower timings are better.", + "excluded_metrics": "Binary size and memory are not reported yet. The compliance fixture is not a representative minimal application, its current artifacts mix compressed packages with unpacked bundles and executables, and the ports do not currently expose one comparable memory metric. These rows will return only after a dedicated release-mode benchmark app is stripped, packaged, and sampled consistently on every target.", + "rows": [ + {"id": "intArithmetic", "name": "Integer arithmetic", "description": "40 million dependent 32-bit multiply, add, shift, and XOR operations."}, + {"id": "longArithmetic", "name": "Long arithmetic", "description": "30 million dependent 64-bit arithmetic and bitwise operations."}, + {"id": "mathTranscendental", "name": "Transcendental math", "description": "Eight million data-dependent sqrt, sin, cos, and remainder operations."}, + {"id": "arraySequential", "name": "Sequential arrays", "description": "Fill eight million integers and perform four complete reduction passes."}, + {"id": "arrayRandom", "name": "Random array access", "description": "20 million data-dependent reads from a four-million-element array."}, + {"id": "objectAllocation", "name": "Object allocation", "description": "Allocate eight million short-lived linked nodes with periodic traversal."}, + {"id": "hashMapChurn", "name": "Hash map churn", "description": "Three million boxed-key lookups and updates with repeated table clearing."}, + {"id": "stringBuilding", "name": "String building", "description": "Build, retain, and hash 400,000 data-dependent strings."}, + {"id": "recursion", "name": "Recursion", "description": "Three recursive Fibonacci calls using inputs 35 and 36."}, + {"id": "quicksort", "name": "Quicksort", "description": "Generate and sort 1.5 million integers, then verify ordering and checksum."} + ] + } +} diff --git a/docs/website/hugo.toml b/docs/website/hugo.toml index 17dbd93887..9a92bdb9f7 100644 --- a/docs/website/hugo.toml +++ b/docs/website/hugo.toml @@ -128,17 +128,23 @@ name = "Compare" url = "/compare/" weight = 24 +[[menu.main]] +parent = "resources" +name = "Port Status" +url = "/port-status/" +weight = 25 + [[menu.main]] parent = "resources" name = "FAQ" url = "/faq/" -weight = 25 +weight = 26 [[menu.main]] parent = "resources" name = "Blog" url = "/blog/" -weight = 26 +weight = 27 [[menu.main]] identifier = "search" diff --git a/docs/website/layouts/_default/port-status.html b/docs/website/layouts/_default/port-status.html new file mode 100644 index 0000000000..8b6c951416 --- /dev/null +++ b/docs/website/layouts/_default/port-status.html @@ -0,0 +1,295 @@ +{{- define "main" -}} +{{- $contract := site.Data.port_status -}} +{{- $reports := site.Data.port_status_reports -}} +{{- $supplement := site.Data.port_status_supplement -}} +{{- $support := site.Data.port_status_support -}} +{{- $environment := site.Data.port_status_environment -}} +{{- $snapshotTime := now.UTC -}} +
+
+ {{ partial "breadcrumbs.html" . }} +

Automated compliance report

+

{{ .Title }}

+

+ Every row in the automated matrix is backed by one or more tests in the Codename One compliance test suite. + A check means every mapped test is successful in the latest available master report for that port. +

+
+ {{ len $contract.features }} features + {{- $testCount := 0 -}} + {{- range $contract.features -}}{{- $testCount = add $testCount (len .tests) -}}{{- end -}} + {{ $testCount }} tests + {{ len $contract.ports }} CI targets + {{ len $supplement.features }} environment-dependent feature families +
+
+ +
+ Table snapshot generated + . +
+ +
+
+

Deployment support contract

+

Supported platforms, architectures, and tested environments

+

+ The compliance matrix uses {{ len $contract.ports }} CI targets, not {{ len $contract.ports }} distinct platforms: + renderer and CPU variants have separate columns so regressions cannot hide behind a combined result. + A deployment floor means the toolchain can target that release. Runtime CI evidence is stated separately, + because compiling for an older release is not proof that the application was launched there. +

+
+
+ + + + + + + + + + + + {{- range $support.deployment_support }} + + + + + + + + {{- end }} + +
PlatformArchitecturesDeclared rangeRuntime CI evidenceFloor evidence and limits
{{ .platform }}{{ .support }}{{ .architectures }}{{ .declared_range }}{{ .ci_evidence }}{{ .floor_evidence }}
+
+
+

JavaScript browser engines

+

+ Chromium runs the full visual compliance suite. The smaller nightly lifecycle check boots the same + generated application in all three major browser engines and records the exact engine version here. + A browser family is not assigned an old minimum version until that version is actually exercised. +

+
+ {{- range $environment.browsers }} +
+

{{ .name }}

+

{{ .engine_version }}

+

{{ .coverage }}

+ {{ cond (eq .status "pass") "Passed" (cond (eq .status "fail") "Failed" "Awaiting nightly evidence") }} +
+ {{- end }} +
+
+
+ +
+ Passed + Partial or skipped + Failed + No current report +
+ +
+ {{- range $contract.ports }} + {{- $report := index $reports .id -}} + {{- partial "port-status-port-state.html" (dict "port" . "report" $report "contract" $contract "now" $snapshotTime) -}} + {{- end }} +
+ +
+ + +
+ +
+ + + + + {{- range $contract.ports }} + + {{- end }} + + + + {{- range $contract.features }} + {{- $feature := . }} + + + {{- range $contract.ports }} + {{- $report := index $reports .id -}} + {{- partial "port-status-feature-status.html" (dict "feature" $feature "port" . "report" $report "contract" $contract "now" $snapshotTime) -}} + {{- end }} + + {{- end }} + +
Feature{{ .name }}
+ {{ .category }} + {{ .name }} +

{{ .description }}

+
+ {{ len .tests }} mapped {{ cond (eq (len .tests) 1) "test" "tests" }} +
    + {{- range (sort .tests) }}
  • {{ . }}
  • {{- end }} +
+
+
+
+ +
+

Skipped-test errata

+

+ A skip describes a limitation of the unattended test environment, not an unsupported Codename One port. + Every skipped result in the table is accounted for below. +

+
+ {{- range $supplement.skip_reasons }} + {{- $erratum := . -}} + {{- $skippedPortNames := slice -}} + {{- range $contract.ports -}} + {{- $port := . -}} + {{- $report := index $reports .id -}} + {{- with $report -}} + {{- $result := index .tests $erratum.test -}} + {{- with $result -}} + {{- if eq .status "skip" -}}{{- $skippedPortNames = $skippedPortNames | append $port.name -}}{{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- if gt (len $skippedPortNames) 0 }} +
+

{{ .test }}

+

Skipped on: {{ delimit $skippedPortNames ", " }}.

+

Why: {{ .reason }}

+

Port support: {{ .platform_support }}

+

How it is tested: {{ .verification }}

+
+ {{- end }} + {{- end }} +
+
+ +
+
+

Environment-dependent coverage

+

Features verified outside the deterministic suite

+

+ These are the remaining platform-integration feature families whose decisive behavior depends on hardware, + permission UI, signing, store or provider accounts, external services, or an operating-system process. + Each row states how support is delivered, how it is verified, and why it cannot honestly be counted as a + deterministic result in the automated table above. An unavailable cell applies only to that integration; + it does not mean the Codename One port itself is unsupported. +

+
+
+ Supported backend + Hardware, account, or configuration dependent + Portable fallback + No declared backend +
+
+ + + + + {{- range $contract.ports }}{{- end }} + + + + {{- range $supplement.features }} + {{- $feature := . -}} + + + {{- range $contract.ports -}} + {{- partial "port-status-manual-status.html" (dict "feature" $feature "port" .) -}} + {{- end -}} + + {{- end }} + +
Feature and testing logic{{ .name }}
+ {{ .category }} + {{ .name }} +

{{ .description }}

+
+ Testing logic and exclusion +

Verification: {{ .testing }}

+

Why it is outside the suite: {{ .why_not_automated }}

+
+
+
+
+ +
+
+

Measured performance

+

{{ $support.benchmark.title }}

+

+ {{ $support.benchmark.configuration }} +

+

+ {{ $support.benchmark.excluded_metrics }} +

+
+
+ + + + + {{- range $contract.ports }}{{- end }} + + + + {{- range $support.benchmark.rows }} + {{- $benchmark := . -}} + + + {{- range $contract.ports }} + {{- $report := index $reports .id -}} + + {{- end }} + + {{- end }} + +
Metric and workload{{ .name }}
{{ .name }}

{{ .description }}

Best measured duration
+ {{- with $report -}}{{- with .performance -}}{{- with .benchmarks -}}{{- with (index . $benchmark.id) -}} + {{- printf "%.2f ms" (div (float .duration_ns) 1000000.0) -}} + {{- else -}}Awaiting nightly{{- end -}}{{- else -}}Awaiting nightly{{- end -}}{{- else -}}Awaiting nightly{{- end -}}{{- else -}}Awaiting nightly{{- end -}} +
+
+

+ ParparVM common-workload benchmark source +

+
+ +
+

How to read this page

+

+ The feature-to-test map is checked into the repository. CI rejects a registered test or golden screenshot that is not mapped. Each port run stores normalized per-test results, and website CI writes the latest stored result directly into this table. +

+

+ The browser makes no runtime report request. A website build uses the last stored result for ports that did not run, and the timestamp above identifies when this static table was assembled. A platform-specific skip is not a pass. An incomplete report is not a pass. Reports older than {{ $contract.stale_after_days }} days are marked stale. +

+

+ The second matrix is a support inventory, not a synthetic pass/fail score. It records native backends, conditional integrations, portable fallbacks, and unavailable backends together with the verification method that is appropriate for each feature. +

+

+ Compliance feature contract +

+
+
+{{- end -}} diff --git a/docs/website/layouts/partials/footer.html b/docs/website/layouts/partials/footer.html index 28bde90072..6df614630b 100644 --- a/docs/website/layouts/partials/footer.html +++ b/docs/website/layouts/partials/footer.html @@ -65,6 +65,7 @@

Important Links

{{- $cn1Pricing := resources.Get "js/cn1-pricing.js" | minify | fingerprint }} {{- $cn1Crisp := resources.Get "js/cn1-crisp.js" | minify | fingerprint }} {{- $cn1Javadoc := resources.Get "js/cn1-javadoc.js" | minify | fingerprint }} +{{- $cn1PortStatus := resources.Get "js/cn1-port-status.js" | minify | fingerprint }} @@ -73,6 +74,9 @@

Important Links

{{- if eq .Layout "api-javadoc" -}} {{- end -}} +{{- if eq .Layout "port-status" -}} + +{{- end -}}