diff --git a/.github/actions/setup-deps/action.yml b/.github/actions/setup-deps/action.yml
index c12ff4d43..062508b0c 100644
--- a/.github/actions/setup-deps/action.yml
+++ b/.github/actions/setup-deps/action.yml
@@ -1,6 +1,14 @@
name: Setup deps
description: Setup Node.js and install dependencies
+inputs:
+ react-version:
+ description: React version to install (e.g., ^19.2.0)
+ required: false
+ react-native-version:
+ description: React Native version to install (e.g., 0.83.1)
+ required: false
+
runs:
using: composite
steps:
@@ -25,3 +33,9 @@ runs:
if: steps.yarn-cache.outputs.cache-hit != 'true'
run: yarn install --immutable
shell: bash
+
+ - name: Switch to React and React Native versions
+ if: inputs.react-version != '' && inputs.react-native-version != ''
+ run: |
+ yarn add -D react@${{ inputs.react-version }} @types/react@${{ inputs.react-version }} react-native@${{ inputs.react-native-version }} @react-native/babel-preset@${{ inputs.react-native-version }}
+ shell: bash
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 293fc97a4..e9777ec96 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -43,15 +43,98 @@ jobs:
- name: Typecheck
run: yarn typecheck
- typecheck-react-18:
+ typecheck-rn-0-83-1:
runs-on: ubuntu-latest
- name: Typecheck React 18
+ name: Typecheck RN 0.83.1
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Node.js and deps
- uses: ./.github/actions/setup-deps-react-18
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.2.0
+ react-native-version: 0.83.1
+
+ - name: Typecheck
+ run: yarn typecheck
+
+ typecheck-rn-0-82-1:
+ runs-on: ubuntu-latest
+ name: Typecheck RN 0.82.1
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.1.1
+ react-native-version: 0.82.1
+
+ - name: Typecheck
+ run: yarn typecheck
+
+ typecheck-rn-0-81-5:
+ runs-on: ubuntu-latest
+ name: Typecheck RN 0.81.5
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.1.0
+ react-native-version: 0.81.5
+
+ - name: Typecheck
+ run: yarn typecheck
+
+ typecheck-rn-0-80-2:
+ runs-on: ubuntu-latest
+ name: Typecheck RN 0.80.2
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.1.0
+ react-native-version: 0.80.2
+
+ - name: Typecheck
+ run: yarn typecheck
+
+ typecheck-rn-0-79-2:
+ runs-on: ubuntu-latest
+ name: Typecheck RN 0.79.2
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.0.0
+ react-native-version: 0.79.2
+
+ - name: Typecheck
+ run: yarn typecheck
+
+ typecheck-rn-0-78-3:
+ runs-on: ubuntu-latest
+ name: Typecheck RN 0.78.3
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.0.0
+ react-native-version: 0.78.3
- name: Typecheck
run: yarn typecheck
@@ -74,15 +157,98 @@ jobs:
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- test-react-18:
+ test-rn-0-83-1:
runs-on: ubuntu-latest
- name: Test React 18
+ name: Test RN 0.83.1
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Node.js and deps
- uses: ./.github/actions/setup-deps-react-18
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.2.0
+ react-native-version: 0.83.1
+
+ - name: Test
+ run: yarn test:ci
+
+ test-rn-0-82-1:
+ runs-on: ubuntu-latest
+ name: Test RN 0.82.1
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.1.1
+ react-native-version: 0.82.1
+
+ - name: Test
+ run: yarn test:ci
+
+ test-rn-0-81-5:
+ runs-on: ubuntu-latest
+ name: Test RN 0.81.5
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.1.0
+ react-native-version: 0.81.5
+
+ - name: Test
+ run: yarn test:ci
+
+ test-rn-0-80-2:
+ runs-on: ubuntu-latest
+ name: Test RN 0.80.2
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.1.0
+ react-native-version: 0.80.2
+
+ - name: Test
+ run: yarn test:ci
+
+ test-rn-0-79-2:
+ runs-on: ubuntu-latest
+ name: Test RN 0.79.2
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.0.0
+ react-native-version: 0.79.2
+
+ - name: Test
+ run: yarn test:ci
+
+ test-rn-0-78-3:
+ runs-on: ubuntu-latest
+ name: Test RN 0.78.3
+ steps:
+ - name: Checkout
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: Setup Node.js and deps
+ uses: ./.github/actions/setup-deps
+ with:
+ react-version: 19.0.0
+ react-native-version: 0.78.3
- name: Test
run: yarn test:ci
diff --git a/src/__tests__/react-native-api.test.tsx b/src/__tests__/react-native-api.test.tsx
index 3d0b1088c..b4926ccc9 100644
--- a/src/__tests__/react-native-api.test.tsx
+++ b/src/__tests__/react-native-api.test.tsx
@@ -3,6 +3,7 @@ import { FlatList, Image, Modal, ScrollView, Switch, Text, TextInput, View } fro
import { render, screen } from '..';
import { mapJsonProps } from '../test-utils/json';
+import { getReactNativeVersion } from '../test-utils/version';
/**
* Tests in this file are intended to give us an proactive warning that React Native behavior has
@@ -221,7 +222,23 @@ test('React Native API assumption: renders a single host element', () =>
,
);
- expect(screen).toMatchInlineSnapshot(`
+ const rnVersion = getReactNativeVersion();
+ if (rnVersion.major == 0 && rnVersion.minor <= 79) {
+ // eslint-disable-next-line jest/no-conditional-expect
+ expect(screen).toMatchInlineSnapshot(`
+
+
+ Modal Content
+
+
+ `);
+ } else {
+ // eslint-disable-next-line jest/no-conditional-expect
+ expect(screen).toMatchInlineSnapshot(`
@@ -230,6 +247,7 @@ test('React Native API assumption: renders a single host element', () =>
`);
+ }
});
test('React Native API assumption: aria-* props render directly on host View', () => {
diff --git a/src/matchers/__tests__/to-be-disabled.test.tsx b/src/matchers/__tests__/to-be-disabled.test.tsx
index 66eca2673..9a3a6dedf 100644
--- a/src/matchers/__tests__/to-be-disabled.test.tsx
+++ b/src/matchers/__tests__/to-be-disabled.test.tsx
@@ -159,7 +159,8 @@ test.each([
['TouchableNativeFeedback', TouchableNativeFeedback],
] as const)('toBeDisabled()/toBeEnabled() supports %s with "disabled" prop', (_, Component) => {
render(
- // @ts-expect-error - JSX element type 'Component' does not have any construct or call signatures.
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore - JSX element type 'Component' does not have any construct or call signatures.
Button
,
@@ -191,7 +192,8 @@ test.each([
'toBeDisabled()/toBeEnabled() supports %s with "aria-disabled" prop',
(_, Component) => {
render(
- // @ts-expect-error - JSX element type 'Component' does not have any construct or call signatures.
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore - JSX element type 'Component' does not have any construct or call signatures.
Hello
,
@@ -218,7 +220,8 @@ test.each([
'toBeDisabled()/toBeEnabled() supports %s with "accessibilityState.disabled" prop',
(_, Component) => {
render(
- // @ts-expect-error - JSX element type 'Component' does not have any construct or call signatures.
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore - JSX element type 'Component' does not have any construct or call signatures.
Hello
,
diff --git a/src/test-utils/version.ts b/src/test-utils/version.ts
new file mode 100644
index 000000000..6b02bd102
--- /dev/null
+++ b/src/test-utils/version.ts
@@ -0,0 +1,18 @@
+export interface Version {
+ version: string;
+ major: number;
+ minor: number;
+ patch: number;
+}
+
+export function getReactNativeVersion(): Version {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
+ const version = require('react-native/package.json').version;
+ const [major, minor, patch] = version.split('.');
+ return {
+ version,
+ major: Number(major),
+ minor: Number(minor),
+ patch: Number(patch),
+ };
+}