Skip to content

Commit 53a4f30

Browse files
React 19 support (#27)
* update test harness * change default version to react 18 * try react 19 * rc * try new * published * explicitly support v19 betas
1 parent 0975b59 commit 53a4f30

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
strategy:
1010
matrix:
1111
node-version: [16.x, 18.x, 20.x, 22.x]
12-
react-version: [17.x, 18.x]
12+
react-version: [17.x, 18.x, rc]
1313
steps:
1414
- name: Checkout sources
1515
uses: actions/checkout@v4
@@ -20,7 +20,7 @@ jobs:
2020
- name: Install dependencies
2121
run: npm install
2222
- name: Install React ${{matrix.react-version}}
23-
if: matrix.react-version != '17.x'
24-
run: npm install -D react@${{matrix.react-version}} react-test-renderer@${{matrix.react-version}}
23+
if: matrix.react-version != '18.x'
24+
run: npm install -D react@${{matrix.react-version}} react-dom@${{matrix.react-version}}
2525
- name: Run tests
2626
run: npm test

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@
2121
"mitt": "^3.0.1"
2222
},
2323
"peerDependencies": {
24-
"react": ">=17.0.0"
24+
"react": ">=17.0.0 || ^19.0.0-0"
2525
},
2626
"devDependencies": {
27-
"react": "^17.0.0",
28-
"react-test-renderer": "^17.0.0",
27+
"min-react-env": "^2.0.0",
28+
"react": "^18.0.0",
29+
"react-dom": "^18.0.0",
2930
"tsup": "^8.1.0",
3031
"typescript": "^5.0.2"
3132
},

test.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,35 @@
22
var test = require('node:test')
33
var assert = require('node:assert')
44
var React = require('react')
5-
var TestRenderer = require('react-test-renderer')
5+
var ReactDOM = require('react-dom')
6+
require('min-react-env/install')
67
var Provider = require('./').Provider
78
var useBus = require('./').useBus
89
var useListener = require('./').useListener
910

11+
var act = React.act || require('react-dom/test-utils').act
12+
13+
function createTestRenderer () {
14+
var div = document.createElement('div')
15+
var root
16+
var reactMajor = parseInt((ReactDOM.version || '16').split('.')[0], 10)
17+
if (reactMajor >= 18) {
18+
var createRoot = require('react-dom/client').createRoot
19+
root = createRoot(div)
20+
} else {
21+
root = {
22+
render: function (element) {
23+
ReactDOM.render(element, div)
24+
},
25+
unmount: function () {
26+
ReactDOM.unmountComponentAtNode(div)
27+
},
28+
}
29+
}
30+
31+
return root
32+
}
33+
1034
var h = React.createElement
1135

1236
test('emits events on context', function () {
@@ -22,9 +46,9 @@ test('emits events on context', function () {
2246
return h('div')
2347
}
2448

25-
var renderer
26-
TestRenderer.act(function () {
27-
renderer = TestRenderer.create(
49+
var renderer = createTestRenderer()
50+
act(function () {
51+
renderer.render(
2852
h(Provider, {},
2953
h('div', {},
3054
h(Listener),
@@ -54,9 +78,9 @@ test('useListener', function () {
5478
return h('div')
5579
}
5680

57-
var renderer
58-
TestRenderer.act(function () {
59-
renderer = TestRenderer.create(
81+
var renderer = createTestRenderer()
82+
act(function () {
83+
renderer.render(
6084
h(Provider, {},
6185
h('div', {},
6286
h(Listener),
@@ -68,8 +92,8 @@ test('useListener', function () {
6892

6993
assert(onhello.called)
7094
onhello.called = false
71-
TestRenderer.act(function () {
72-
renderer.update(
95+
act(function () {
96+
renderer.render(
7397
h(Provider, {},
7498
h('div', {},
7599
h(Emitter)

0 commit comments

Comments
 (0)