From c337aaba7f0330ea60b448177ff62e681a76c2c9 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Wed, 18 May 2022 21:22:56 +0200 Subject: [PATCH 01/11] bigint-tests --- packages/react-dom/src/__tests__/ReactDOMFiber-test.js | 10 ++++++++++ .../react-dom/src/__tests__/ReactDOMFizzServer-test.js | 10 ++++++++++ .../__tests__/ReactDOMServerIntegrationBasic-test.js | 6 ++++++ .../src/__tests__/ReactMultiChildText-test.js | 3 +++ .../src/__tests__/ReactTopLevelText-test.js | 7 +++++++ packages/react/src/__tests__/ReactChildren-test.js | 5 ++++- 6 files changed, 40 insertions(+), 1 deletion(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js index 94172ab77b237..2000ed76e03c8 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFiber-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFiber-test.js @@ -60,6 +60,16 @@ describe('ReactDOMFiber', () => { expect(container.textContent).toEqual('10'); }); + it('should render bigints as children', async () => { + const Box = ({value}) =>
{value}
; + + await act(async () => { + root.render(); + }); + + expect(container.textContent).toEqual('10'); + }); + it('should call an effect after mount/update (replacing render callback pattern)', async () => { function Component() { React.useEffect(() => { diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js index 5a796c5446f06..d05585bc2b222 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js @@ -3373,6 +3373,16 @@ describe('ReactDOMFizzServer', () => { ); }); + it('Supports bigint', async () => { + await act(async () => { + const {pipe} = ReactDOMFizzServer.renderToPipeableStream( +
{10n}
, + ); + pipe(writable); + }); + expect(getVisibleChildren(container)).toEqual(
10
); + }); + it('Supports custom abort reasons with a string', async () => { function App() { return ( diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationBasic-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationBasic-test.js index 5589e5dc3a220..6323fe9b60c02 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationBasic-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationBasic-test.js @@ -72,6 +72,12 @@ describe('ReactDOMServerIntegration', () => { expect(e.nodeValue).toMatch('42'); }); + itRenders('a bigint', async render => { + const e = await render(42n); + expect(e.nodeType).toBe(3); + expect(e.nodeValue).toMatch('42'); + }); + itRenders('an array with one child', async render => { const e = await render([
text1
]); const parent = e.parentNode; diff --git a/packages/react-dom/src/__tests__/ReactMultiChildText-test.js b/packages/react-dom/src/__tests__/ReactMultiChildText-test.js index 450d0383eb0fc..b1fff66bf94b9 100644 --- a/packages/react-dom/src/__tests__/ReactMultiChildText-test.js +++ b/packages/react-dom/src/__tests__/ReactMultiChildText-test.js @@ -58,6 +58,7 @@ const expectChildren = function (container, children) { continue; } textNode = outerNode.childNodes[mountIndex]; + expect(textNode != null).toBe(true); expect(textNode.nodeType).toBe(3); expect(textNode.data).toBe(child); mountIndex++; @@ -89,6 +90,7 @@ describe('ReactMultiChildText', () => { true, [], 0, '0', 1.2, '1.2', + 10n, '10', '', [], 'foo', 'foo', @@ -99,6 +101,7 @@ describe('ReactMultiChildText', () => { [true], [], [0], ['0'], [1.2], ['1.2'], + [10n], ['10'], [''], [], ['foo'], ['foo'], [
], [
], diff --git a/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js b/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js index 30a3fa093b4ab..b1d8dd5e01082 100644 --- a/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js +++ b/packages/react-reconciler/src/__tests__/ReactTopLevelText-test.js @@ -39,4 +39,11 @@ describe('ReactTopLevelText', () => { await waitForAll([]); expect(ReactNoop).toMatchRenderedOutput('10'); }); + + it('should render a component returning bigints directly from render', async () => { + const Text = ({value}) => value; + ReactNoop.render(); + await waitForAll([]); + expect(ReactNoop).toMatchRenderedOutput('10'); + }); }); diff --git a/packages/react/src/__tests__/ReactChildren-test.js b/packages/react/src/__tests__/ReactChildren-test.js index 016e4089d8d3a..deaaf9f856987 100644 --- a/packages/react/src/__tests__/ReactChildren-test.js +++ b/packages/react/src/__tests__/ReactChildren-test.js @@ -183,11 +183,12 @@ describe('ReactChildren', () => { {false} {null} {undefined} + {9n}
); function assertCalls() { - expect(callback).toHaveBeenCalledTimes(9); + expect(callback).toHaveBeenCalledTimes(10); expect(callback).toHaveBeenCalledWith(div, 0); expect(callback).toHaveBeenCalledWith(span, 1); expect(callback).toHaveBeenCalledWith(a, 2); @@ -197,6 +198,7 @@ describe('ReactChildren', () => { expect(callback).toHaveBeenCalledWith(null, 6); expect(callback).toHaveBeenCalledWith(null, 7); expect(callback).toHaveBeenCalledWith(null, 8); + expect(callback).toHaveBeenCalledWith(9n, 9); callback.mockClear(); } @@ -215,6 +217,7 @@ describe('ReactChildren', () => { , 'string', 1234, + 9n, ]); }); From 6b9174ffab33b439122d0b7e9f9172b66924719f Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Sun, 18 Feb 2024 11:53:08 +0100 Subject: [PATCH 02/11] f test --- .../src/__tests__/ReactDOMServerIntegrationInput-test.js | 5 +++++ .../src/__tests__/ReactDOMServerIntegrationSelect-test.js | 6 ++++-- .../__tests__/ReactDOMServerIntegrationTextarea-test.js | 7 ++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationInput-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationInput-test.js index 4abf637a53713..7066aea04baf7 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationInput-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationInput-test.js @@ -46,6 +46,11 @@ desc('ReactDOMServerIntegrationInput', () => { expect(e.value).toBe('foo'); }); + itRenders('an input with a bigint value and an onChange', async render => { + const e = await render( {}} />); + expect(e.value).toBe('5'); + }); + itRenders('an input with a value and readOnly', async render => { const e = await render(); expect(e.value).toBe('foo'); diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationSelect-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationSelect-test.js index 8bf3c7c3d20da..e268b9bab59f6 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationSelect-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationSelect-test.js @@ -218,11 +218,13 @@ describe('ReactDOMServerIntegrationSelect', () => { itRenders('a select option with flattened children', async render => { const e = await render( , ); const option = e.options[0]; - expect(option.textContent).toBe('A B'); + expect(option.textContent).toBe('A B 5'); expect(option.value).toBe('bar'); expect(option.selected).toBe(true); }); diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationTextarea-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationTextarea-test.js index ff69355812d3c..9ce04840dbb0f 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationTextarea-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationTextarea-test.js @@ -47,12 +47,17 @@ describe('ReactDOMServerIntegrationTextarea', () => { expect(e.value).toBe('foo'); }); + itRenders('a textarea with a bigint value and an onChange', async render => { + const e = await render(