Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f5aaf90
Migrate e2e tests from cavy/cavy-cli to react-native-cavynext.
tvanlaerhoven Aug 5, 2026
91bf916
Resolve react-native-cavynext from its GitHub repo via a submodule.
tvanlaerhoven Aug 5, 2026
ad44f93
Use github#dist branches for react-native-cavynext dependencies.
tvanlaerhoven Aug 5, 2026
8b708ff
Bump react-native-cavynext dist pins for the modernised spec API.
tvanlaerhoven Aug 5, 2026
399b5e4
Modernise the e2e specs and add web test support.
tvanlaerhoven Aug 5, 2026
0214d18
Player test layer on cavynext: hook-store player, robust event waits.
tvanlaerhoven Aug 6, 2026
aa347b7
Use the published npm packages for react-native-cavynext.
tvanlaerhoven Aug 6, 2026
a7a338d
Regenerate the e2e lockfile after rebasing on develop (RN 0.86.2)
tvanlaerhoven Aug 6, 2026
4088089
Run the web e2e tests on PRs.
tvanlaerhoven Aug 6, 2026
92bdd10
Remove unused react-native-device-info from the e2e app.
tvanlaerhoven Aug 6, 2026
58da9f5
Pass --markdown to the Android and iOS e2e runs.
tvanlaerhoven Aug 6, 2026
14745f5
Allow extra time for cold-start e2e player
devin-ai-integration[bot] Aug 11, 2026
9111949
Bind player callbacks in TestableApp
Aug 12, 2026
3c06819
Fix web e2e browser cleanup, bind player callbacks, drop stray .gitmo…
devin-ai-integration[bot] Aug 12, 2026
c2ae75f
Fail loudly when no browser is found for the web e2e run
devin-ai-integration[bot] Aug 12, 2026
6b9ce11
Use describe.each for the source-parameterized e2e specs.
tvanlaerhoven Aug 12, 2026
09d7939
Enable the connector e2e tests.
tvanlaerhoven Aug 12, 2026
edd1ad3
Add the Nielsen specs repo to the e2e Podfile
tvanlaerhoven Aug 12, 2026
d30e597
Scope the PR workflow path filters per platform
tvanlaerhoven Aug 12, 2026
6a0a9e0
Update e2e/scripts/run_web_e2e.sh
tvanlaerhoven Aug 12, 2026
7a694ed
Update .github/workflows/pr_web.yml
tvanlaerhoven Aug 12, 2026
1e29551
Rewrite the Nielsen framework name for the tvOS e2e target
devin-ai-integration[bot] Aug 12, 2026
0c6197f
Drop StrictMode and ad sources from the e2e presentation mode tests
devin-ai-integration[bot] Aug 12, 2026
1fac8be
Log the paused state on play, playing and pause in the e2e test app
devin-ai-integration[bot] Aug 12, 2026
7e539aa
Clear the paused state on play and settle a new player before use
devin-ai-integration[bot] Aug 12, 2026
6de1de9
Add a changelog entry for the paused state fix
devin-ai-integration[bot] Aug 12, 2026
76c2afa
Merge branch 'develop' into feature/cavynext-migration
devin-ai-integration[bot] Aug 12, 2026
210fe29
Use a small mp4 test source to avoid aborted progressive downloads
devin-ai-integration[bot] Aug 12, 2026
6a32fa8
Fail the web e2e run when the dev server does not come up
devin-ai-integration[bot] Aug 12, 2026
3bb792d
Include the ad payload in the e2e ad error message
devin-ai-integration[bot] Aug 12, 2026
69aae67
Run the e2e ad tests on a single source and retry a failed ad break
devin-ai-integration[bot] Aug 13, 2026
6467bb9
Drop the non-existent web/** path filter from the web PR workflow
devin-ai-integration[bot] Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/pr_android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- .github/workflows/pr_android.yml
- example/**
- e2e/**
- '!e2e/ios/**'
- package.json
- src/**
- android/**
Expand Down Expand Up @@ -91,8 +92,8 @@ jobs:
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
disable-animations: true
script: |
npm run test:e2e:android
cat cavy_results.md >> $GITHUB_STEP_SUMMARY
npm run test:e2e:android -- --markdown
cat cavynext_results.md >> $GITHUB_STEP_SUMMARY
working-directory: e2e
- name: Upload screenshots
if: always()
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/pr_ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- .github/workflows/pr_ios.yml
- example/**
- e2e/**
- '!e2e/android/**'
- package.json
- src/**
- ios/**
Expand Down Expand Up @@ -82,12 +83,12 @@ jobs:

- name: Run e2e tests
working-directory: e2e
run: npm run test:e2e:${{ matrix.platform == 'iOS' && 'ios' || 'tvos' }}
run: npm run test:e2e:${{ matrix.platform == 'iOS' && 'ios' || 'tvos' }} -- --markdown

- name: Summarize results
working-directory: e2e
if: always()
run: cat cavy_results.md >> $GITHUB_STEP_SUMMARY
run: cat cavynext_results.md >> $GITHUB_STEP_SUMMARY

- name: Collecting logs
if: failure()
Expand Down
40 changes: 40 additions & 0 deletions .github/workflows/pr_web.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@ on:
workflow_dispatch:
pull_request:
types: [opened, reopened, synchronize, ready_for_review]
paths:
- .github/workflows/pr_web.yml
- example/**
- e2e/**
- '!e2e/ios/**'
- '!e2e/android/**'
- package.json
- src/**

jobs:
build:
Expand Down Expand Up @@ -31,3 +39,35 @@ jobs:
name: web-release
path: example/dist
retention-days: 3

e2e:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 22
cache: 'npm'

- name: Run npm install SDK
run: |
npm i -g corepack
npm ci

- name: Run npm install e2e
working-directory: e2e
run: npm ci

- name: Run web e2e tests
working-directory: e2e
run: npm run test:e2e:web -- --markdown

- name: Summarize results
working-directory: e2e
if: always()
run: cat cavynext_results.md >> $GITHUB_STEP_SUMMARY
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,11 @@ vendor
src/manifest.json

# E2E app
e2e/cavy_results.md
e2e/cavynext_results.md
e2e/cavynext_results.json
e2e/dist
# Backup made by `cavynext run-web` while the test entry point is swapped in.
e2e/index.notest.js
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.

# Example app
example/dist
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Fixed

- Fixed an issue on Android where destroying the player during a pending `MediaPlaybackService` bind could cause a crash.
- Fixed an issue where `player.paused` remained `true` between the `play` and `playing` events.

## [11.6.0]

Expand Down
2 changes: 1 addition & 1 deletion e2e/index.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
console.error('This app can only be used with cavy-cli');
console.error('This app can only be used with react-native-cavynext-cli');
10 changes: 10 additions & 0 deletions e2e/index.test.web.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { AppRegistry } from 'react-native';
import { TestableApp } from './src/TestableApp';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => TestableApp);

// On web the application has to be started explicitly.
AppRegistry.runApplication(appName, {
rootTag: document.getElementById('app'),
});
3 changes: 3 additions & 0 deletions e2e/index.web.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// The plain web entry point. The e2e app is only meaningful when run through
// `cavynext run-web`, which swaps `index.test.web.js` into this place.
console.error('This app can only be used with react-native-cavynext-cli: run `npm run test:e2e:web`.');
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
5 changes: 5 additions & 0 deletions e2e/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ require Pod::Executable.execute_command('node', ['-p',
require_relative './PodConfig'

source 'https://github.com/react-native-tvos/react-native-tvos-podspecs.git'
# The Nielsen App SDK (pulled in by the nielsen analytics connector) lives on
# Nielsen's own specs repo.
source 'https://github.com/NielsenDigitalSDK/nielsenappsdk-ios-specs-dynamic.git'
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
source 'https://cdn.cocoapods.org/'

prepare_react_native_project!
Expand Down Expand Up @@ -46,4 +49,6 @@ post_install do |installer|
:mac_catalyst_enabled => false,
# :ccache_enabled => true
)
# On tvOS the Nielsen App SDK ships NielsenTVAppApi instead of NielsenAppApi.
nielsen_post_install(installer, "Pods-ReactNativeTHEOplayer-tvOS")
end
Loading
Loading