From aca9c8ae9b86edb13f8c2be77d0afbacdf65a4fe Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 13 Mar 2020 03:07:17 +0000 Subject: [PATCH 1/2] Run ReactElementJSX-test against bundles --- ...st.internal.js => ReactElementJSX-test.js} | 26 ------- ...eactElementJSXNewWarnings-test.internal.js | 68 +++++++++++++++++++ 2 files changed, 68 insertions(+), 26 deletions(-) rename packages/react/src/__tests__/{ReactElementJSX-test.internal.js => ReactElementJSX-test.js} (93%) create mode 100644 packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js diff --git a/packages/react/src/__tests__/ReactElementJSX-test.internal.js b/packages/react/src/__tests__/ReactElementJSX-test.js similarity index 93% rename from packages/react/src/__tests__/ReactElementJSX-test.internal.js rename to packages/react/src/__tests__/ReactElementJSX-test.js index 4a02bbc1a379..194e7f359ab0 100644 --- a/packages/react/src/__tests__/ReactElementJSX-test.internal.js +++ b/packages/react/src/__tests__/ReactElementJSX-test.js @@ -13,8 +13,6 @@ let React; let ReactDOM; let ReactTestUtils; -let ReactFeatureFlags = require('shared/ReactFeatureFlags'); - // NOTE: We're explicitly not using JSX here. This is intended to test // a new React.jsx api which does not have a JSX transformer yet. // A lot of these tests are pulled from ReactElement-test because @@ -30,9 +28,6 @@ describe('ReactElement.jsx', () => { originalSymbol = global.Symbol; global.Symbol = undefined; - ReactFeatureFlags = require('shared/ReactFeatureFlags'); - ReactFeatureFlags.warnAboutSpreadingKeyToJSX = true; - React = require('react'); ReactDOM = require('react-dom'); ReactTestUtils = require('react-dom/test-utils'); @@ -356,27 +351,6 @@ describe('ReactElement.jsx', () => { ); }); - it('should warn when keys are passed as part of props', () => { - const container = document.createElement('div'); - class Child extends React.Component { - render() { - return React.jsx('div', {}); - } - } - class Parent extends React.Component { - render() { - return React.jsx('div', { - children: [React.jsx(Child, {key: '0'})], - }); - } - } - expect(() => ReactDOM.render(React.jsx(Parent, {}), container)).toErrorDev( - 'Warning: React.jsx: Spreading a key to JSX is a deprecated pattern. ' + - 'Explicitly pass a key after spreading props in your JSX call. ' + - 'E.g. ', - ); - }); - it('should not warn when unkeyed children are passed to jsxs', () => { const container = document.createElement('div'); class Child extends React.Component { diff --git a/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js b/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js new file mode 100644 index 000000000000..cd8369813d16 --- /dev/null +++ b/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js @@ -0,0 +1,68 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @emails react-core + */ + +'use strict'; + +let React; +let ReactDOM; + +let ReactFeatureFlags = require('shared/ReactFeatureFlags'); + +// NOTE: We're explicitly not using JSX here. This is intended to test +// a new React.jsx api which does not have a JSX transformer yet. +// A lot of these tests are pulled from ReactElement-test because +// this api is meant to be backwards compatible. +describe('ReactElementJSXNewWarnings', () => { + let originalSymbol; + + beforeEach(() => { + jest.resetModules(); + + // Delete the native Symbol if we have one to ensure we test the + // unpolyfilled environment. + originalSymbol = global.Symbol; + global.Symbol = undefined; + + ReactFeatureFlags = require('shared/ReactFeatureFlags'); + ReactFeatureFlags.warnAboutSpreadingKeyToJSX = true; + + React = require('react'); + ReactDOM = require('react-dom'); + }); + + afterEach(() => { + global.Symbol = originalSymbol; + }); + + if (!__EXPERIMENTAL__) { + it("empty test so Jest doesn't complain", () => {}); + return; + } + + it('should warn when keys are passed as part of props', () => { + const container = document.createElement('div'); + class Child extends React.Component { + render() { + return React.jsx('div', {}); + } + } + class Parent extends React.Component { + render() { + return React.jsx('div', { + children: [React.jsx(Child, {key: '0'})], + }); + } + } + expect(() => ReactDOM.render(React.jsx(Parent, {}), container)).toErrorDev( + 'Warning: React.jsx: Spreading a key to JSX is a deprecated pattern. ' + + 'Explicitly pass a key after spreading props in your JSX call. ' + + 'E.g. ', + ); + }); +}); From ea3cccde4e5aa86ec14f339b346922ff2b45ddea Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 13 Mar 2020 03:16:06 +0000 Subject: [PATCH 2/2] Try the new thing --- .../src/__tests__/ReactElementJSX-test.js | 25 +++++++ ...eactElementJSXNewWarnings-test.internal.js | 68 ------------------- 2 files changed, 25 insertions(+), 68 deletions(-) delete mode 100644 packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js diff --git a/packages/react/src/__tests__/ReactElementJSX-test.js b/packages/react/src/__tests__/ReactElementJSX-test.js index 194e7f359ab0..881e72256784 100644 --- a/packages/react/src/__tests__/ReactElementJSX-test.js +++ b/packages/react/src/__tests__/ReactElementJSX-test.js @@ -351,6 +351,31 @@ describe('ReactElement.jsx', () => { ); }); + if (require('shared/ReactFeatureFlags').warnAboutSpreadingKeyToJSX) { + it('should warn when keys are passed as part of props', () => { + const container = document.createElement('div'); + class Child extends React.Component { + render() { + return React.jsx('div', {}); + } + } + class Parent extends React.Component { + render() { + return React.jsx('div', { + children: [React.jsx(Child, {key: '0'})], + }); + } + } + expect(() => + ReactDOM.render(React.jsx(Parent, {}), container), + ).toErrorDev( + 'Warning: React.jsx: Spreading a key to JSX is a deprecated pattern. ' + + 'Explicitly pass a key after spreading props in your JSX call. ' + + 'E.g. ', + ); + }); + } + it('should not warn when unkeyed children are passed to jsxs', () => { const container = document.createElement('div'); class Child extends React.Component { diff --git a/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js b/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js deleted file mode 100644 index cd8369813d16..000000000000 --- a/packages/react/src/__tests__/ReactElementJSXNewWarnings-test.internal.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @emails react-core - */ - -'use strict'; - -let React; -let ReactDOM; - -let ReactFeatureFlags = require('shared/ReactFeatureFlags'); - -// NOTE: We're explicitly not using JSX here. This is intended to test -// a new React.jsx api which does not have a JSX transformer yet. -// A lot of these tests are pulled from ReactElement-test because -// this api is meant to be backwards compatible. -describe('ReactElementJSXNewWarnings', () => { - let originalSymbol; - - beforeEach(() => { - jest.resetModules(); - - // Delete the native Symbol if we have one to ensure we test the - // unpolyfilled environment. - originalSymbol = global.Symbol; - global.Symbol = undefined; - - ReactFeatureFlags = require('shared/ReactFeatureFlags'); - ReactFeatureFlags.warnAboutSpreadingKeyToJSX = true; - - React = require('react'); - ReactDOM = require('react-dom'); - }); - - afterEach(() => { - global.Symbol = originalSymbol; - }); - - if (!__EXPERIMENTAL__) { - it("empty test so Jest doesn't complain", () => {}); - return; - } - - it('should warn when keys are passed as part of props', () => { - const container = document.createElement('div'); - class Child extends React.Component { - render() { - return React.jsx('div', {}); - } - } - class Parent extends React.Component { - render() { - return React.jsx('div', { - children: [React.jsx(Child, {key: '0'})], - }); - } - } - expect(() => ReactDOM.render(React.jsx(Parent, {}), container)).toErrorDev( - 'Warning: React.jsx: Spreading a key to JSX is a deprecated pattern. ' + - 'Explicitly pass a key after spreading props in your JSX call. ' + - 'E.g. ', - ); - }); -});