Skip to content

Commit 0de3ddf

Browse files
authored
Remove Symbol Polyfill (again) (#25144)
1 parent b36f722 commit 0de3ddf

17 files changed

+1
-448
lines changed

packages/react/src/__tests__/ReactElement-test.js

-147
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,16 @@
99

1010
'use strict';
1111

12-
import {enableSymbolFallbackForWWW} from 'shared/ReactFeatureFlags';
13-
1412
let React;
1513
let ReactDOM;
1614
let ReactTestUtils;
1715

1816
describe('ReactElement', () => {
1917
let ComponentClass;
20-
let originalSymbol;
2118

2219
beforeEach(() => {
2320
jest.resetModules();
2421

25-
if (enableSymbolFallbackForWWW) {
26-
// Delete the native Symbol if we have one to ensure we test the
27-
// unpolyfilled environment.
28-
originalSymbol = global.Symbol;
29-
global.Symbol = undefined;
30-
}
31-
3222
React = require('react');
3323
ReactDOM = require('react-dom');
3424
ReactTestUtils = require('react-dom/test-utils');
@@ -41,17 +31,6 @@ describe('ReactElement', () => {
4131
};
4232
});
4333

44-
afterEach(() => {
45-
if (enableSymbolFallbackForWWW) {
46-
global.Symbol = originalSymbol;
47-
}
48-
});
49-
50-
// @gate enableSymbolFallbackForWWW
51-
it('uses the fallback value when in an environment without Symbol', () => {
52-
expect((<div />).$$typeof).toBe(0xeac7);
53-
});
54-
5534
it('returns a complete element according to spec', () => {
5635
const element = React.createElement(ComponentClass);
5736
expect(element.type).toBe(ComponentClass);
@@ -301,42 +280,6 @@ describe('ReactElement', () => {
301280
expect(element.type.someStaticMethod()).toBe('someReturnValue');
302281
});
303282

304-
// NOTE: We're explicitly not using JSX here. This is intended to test
305-
// classic JS without JSX.
306-
// @gate enableSymbolFallbackForWWW
307-
it('identifies valid elements', () => {
308-
class Component extends React.Component {
309-
render() {
310-
return React.createElement('div');
311-
}
312-
}
313-
314-
expect(React.isValidElement(React.createElement('div'))).toEqual(true);
315-
expect(React.isValidElement(React.createElement(Component))).toEqual(true);
316-
317-
expect(React.isValidElement(null)).toEqual(false);
318-
expect(React.isValidElement(true)).toEqual(false);
319-
expect(React.isValidElement({})).toEqual(false);
320-
expect(React.isValidElement('string')).toEqual(false);
321-
if (!__EXPERIMENTAL__) {
322-
let factory;
323-
expect(() => {
324-
factory = React.createFactory('div');
325-
}).toWarnDev(
326-
'Warning: React.createFactory() is deprecated and will be removed in a ' +
327-
'future major release. Consider using JSX or use React.createElement() ' +
328-
'directly instead.',
329-
{withoutStack: true},
330-
);
331-
expect(React.isValidElement(factory)).toEqual(false);
332-
}
333-
expect(React.isValidElement(Component)).toEqual(false);
334-
expect(React.isValidElement({type: 'div', props: {}})).toEqual(false);
335-
336-
const jsonElement = JSON.stringify(React.createElement('div'));
337-
expect(React.isValidElement(JSON.parse(jsonElement))).toBe(true);
338-
});
339-
340283
// NOTE: We're explicitly not using JSX here. This is intended to test
341284
// classic JS without JSX.
342285
it('is indistinguishable from a plain object', () => {
@@ -451,94 +394,4 @@ describe('ReactElement', () => {
451394
const test = ReactTestUtils.renderIntoDocument(<Test value={+undefined} />);
452395
expect(test.props.value).toBeNaN();
453396
});
454-
455-
// NOTE: We're explicitly not using JSX here. This is intended to test
456-
// classic JS without JSX.
457-
// @gate !enableSymbolFallbackForWWW
458-
it('identifies elements, but not JSON, if Symbols are supported', () => {
459-
class Component extends React.Component {
460-
render() {
461-
return React.createElement('div');
462-
}
463-
}
464-
465-
expect(React.isValidElement(React.createElement('div'))).toEqual(true);
466-
expect(React.isValidElement(React.createElement(Component))).toEqual(true);
467-
468-
expect(React.isValidElement(null)).toEqual(false);
469-
expect(React.isValidElement(true)).toEqual(false);
470-
expect(React.isValidElement({})).toEqual(false);
471-
expect(React.isValidElement('string')).toEqual(false);
472-
if (!__EXPERIMENTAL__) {
473-
let factory;
474-
expect(() => {
475-
factory = React.createFactory('div');
476-
}).toWarnDev(
477-
'Warning: React.createFactory() is deprecated and will be removed in a ' +
478-
'future major release. Consider using JSX or use React.createElement() ' +
479-
'directly instead.',
480-
{withoutStack: true},
481-
);
482-
expect(React.isValidElement(factory)).toEqual(false);
483-
}
484-
expect(React.isValidElement(Component)).toEqual(false);
485-
expect(React.isValidElement({type: 'div', props: {}})).toEqual(false);
486-
487-
const jsonElement = JSON.stringify(React.createElement('div'));
488-
expect(React.isValidElement(JSON.parse(jsonElement))).toBe(false);
489-
});
490-
491-
// NOTE: We're explicitly not using JSX here. This is intended to test
492-
// classic JS without JSX.
493-
it('identifies elements, but not JSON, if Symbols are supported (with polyfill)', () => {
494-
// Rudimentary polyfill
495-
// Once all jest engines support Symbols natively we can swap this to test
496-
// WITH native Symbols by default.
497-
const REACT_ELEMENT_TYPE = function() {}; // fake Symbol
498-
const OTHER_SYMBOL = function() {}; // another fake Symbol
499-
global.Symbol = function(name) {
500-
return OTHER_SYMBOL;
501-
};
502-
global.Symbol.for = function(key) {
503-
if (key === 'react.element') {
504-
return REACT_ELEMENT_TYPE;
505-
}
506-
return OTHER_SYMBOL;
507-
};
508-
509-
jest.resetModules();
510-
511-
React = require('react');
512-
513-
class Component extends React.Component {
514-
render() {
515-
return React.createElement('div');
516-
}
517-
}
518-
519-
expect(React.isValidElement(React.createElement('div'))).toEqual(true);
520-
expect(React.isValidElement(React.createElement(Component))).toEqual(true);
521-
522-
expect(React.isValidElement(null)).toEqual(false);
523-
expect(React.isValidElement(true)).toEqual(false);
524-
expect(React.isValidElement({})).toEqual(false);
525-
expect(React.isValidElement('string')).toEqual(false);
526-
if (!__EXPERIMENTAL__) {
527-
let factory;
528-
expect(() => {
529-
factory = React.createFactory('div');
530-
}).toWarnDev(
531-
'Warning: React.createFactory() is deprecated and will be removed in a ' +
532-
'future major release. Consider using JSX or use React.createElement() ' +
533-
'directly instead.',
534-
{withoutStack: true},
535-
);
536-
expect(React.isValidElement(factory)).toEqual(false);
537-
}
538-
expect(React.isValidElement(Component)).toEqual(false);
539-
expect(React.isValidElement({type: 'div', props: {}})).toEqual(false);
540-
541-
const jsonElement = JSON.stringify(React.createElement('div'));
542-
expect(React.isValidElement(JSON.parse(jsonElement))).toBe(false);
543-
});
544397
});

packages/react/src/__tests__/ReactElementJSX-test.js

-154
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
'use strict';
1111

12-
import {enableSymbolFallbackForWWW} from 'shared/ReactFeatureFlags';
13-
1412
let React;
1513
let ReactDOM;
1614
let ReactTestUtils;
@@ -22,31 +20,16 @@ let JSXDEVRuntime;
2220
// A lot of these tests are pulled from ReactElement-test because
2321
// this api is meant to be backwards compatible.
2422
describe('ReactElement.jsx', () => {
25-
let originalSymbol;
26-
2723
beforeEach(() => {
2824
jest.resetModules();
2925

30-
if (enableSymbolFallbackForWWW) {
31-
// Delete the native Symbol if we have one to ensure we test the
32-
// unpolyfilled environment.
33-
originalSymbol = global.Symbol;
34-
global.Symbol = undefined;
35-
}
36-
3726
React = require('react');
3827
JSXRuntime = require('react/jsx-runtime');
3928
JSXDEVRuntime = require('react/jsx-dev-runtime');
4029
ReactDOM = require('react-dom');
4130
ReactTestUtils = require('react-dom/test-utils');
4231
});
4332

44-
afterEach(() => {
45-
if (enableSymbolFallbackForWWW) {
46-
global.Symbol = originalSymbol;
47-
}
48-
});
49-
5033
it('allows static methods to be called using the type property', () => {
5134
class StaticMethodComponentClass extends React.Component {
5235
render() {
@@ -59,48 +42,6 @@ describe('ReactElement.jsx', () => {
5942
expect(element.type.someStaticMethod()).toBe('someReturnValue');
6043
});
6144

62-
// @gate enableSymbolFallbackForWWW
63-
it('identifies valid elements', () => {
64-
class Component extends React.Component {
65-
render() {
66-
return JSXRuntime.jsx('div', {});
67-
}
68-
}
69-
70-
expect(React.isValidElement(JSXRuntime.jsx('div', {}))).toEqual(true);
71-
expect(React.isValidElement(JSXRuntime.jsx(Component, {}))).toEqual(true);
72-
expect(
73-
React.isValidElement(JSXRuntime.jsx(JSXRuntime.Fragment, {})),
74-
).toEqual(true);
75-
if (__DEV__) {
76-
expect(React.isValidElement(JSXDEVRuntime.jsxDEV('div', {}))).toEqual(
77-
true,
78-
);
79-
}
80-
81-
expect(React.isValidElement(null)).toEqual(false);
82-
expect(React.isValidElement(true)).toEqual(false);
83-
expect(React.isValidElement({})).toEqual(false);
84-
expect(React.isValidElement('string')).toEqual(false);
85-
if (!__EXPERIMENTAL__) {
86-
let factory;
87-
expect(() => {
88-
factory = React.createFactory('div');
89-
}).toWarnDev(
90-
'Warning: React.createFactory() is deprecated and will be removed in a ' +
91-
'future major release. Consider using JSX or use React.createElement() ' +
92-
'directly instead.',
93-
{withoutStack: true},
94-
);
95-
expect(React.isValidElement(factory)).toEqual(false);
96-
}
97-
expect(React.isValidElement(Component)).toEqual(false);
98-
expect(React.isValidElement({type: 'div', props: {}})).toEqual(false);
99-
100-
const jsonElement = JSON.stringify(JSXRuntime.jsx('div', {}));
101-
expect(React.isValidElement(JSON.parse(jsonElement))).toBe(true);
102-
});
103-
10445
it('is indistinguishable from a plain object', () => {
10546
const element = JSXRuntime.jsx('div', {className: 'foo'});
10647
const object = {};
@@ -294,101 +235,6 @@ describe('ReactElement.jsx', () => {
294235
);
295236
});
296237

297-
// @gate !enableSymbolFallbackForWWW
298-
it('identifies elements, but not JSON, if Symbols are supported', () => {
299-
class Component extends React.Component {
300-
render() {
301-
return JSXRuntime.jsx('div', {});
302-
}
303-
}
304-
305-
expect(React.isValidElement(JSXRuntime.jsx('div', {}))).toEqual(true);
306-
expect(React.isValidElement(JSXRuntime.jsx(Component, {}))).toEqual(true);
307-
expect(
308-
React.isValidElement(JSXRuntime.jsx(JSXRuntime.Fragment, {})),
309-
).toEqual(true);
310-
if (__DEV__) {
311-
expect(React.isValidElement(JSXDEVRuntime.jsxDEV('div', {}))).toEqual(
312-
true,
313-
);
314-
}
315-
316-
expect(React.isValidElement(null)).toEqual(false);
317-
expect(React.isValidElement(true)).toEqual(false);
318-
expect(React.isValidElement({})).toEqual(false);
319-
expect(React.isValidElement('string')).toEqual(false);
320-
if (!__EXPERIMENTAL__) {
321-
let factory;
322-
expect(() => {
323-
factory = React.createFactory('div');
324-
}).toWarnDev(
325-
'Warning: React.createFactory() is deprecated and will be removed in a ' +
326-
'future major release. Consider using JSX or use React.createElement() ' +
327-
'directly instead.',
328-
{withoutStack: true},
329-
);
330-
expect(React.isValidElement(factory)).toEqual(false);
331-
}
332-
expect(React.isValidElement(Component)).toEqual(false);
333-
expect(React.isValidElement({type: 'div', props: {}})).toEqual(false);
334-
335-
const jsonElement = JSON.stringify(JSXRuntime.jsx('div', {}));
336-
expect(React.isValidElement(JSON.parse(jsonElement))).toBe(false);
337-
});
338-
339-
it('identifies elements, but not JSON, if Symbols are polyfilled', () => {
340-
// Rudimentary polyfill
341-
// Once all jest engines support Symbols natively we can swap this to test
342-
// WITH native Symbols by default.
343-
const REACT_ELEMENT_TYPE = function() {}; // fake Symbol
344-
const OTHER_SYMBOL = function() {}; // another fake Symbol
345-
global.Symbol = function(name) {
346-
return OTHER_SYMBOL;
347-
};
348-
global.Symbol.for = function(key) {
349-
if (key === 'react.element') {
350-
return REACT_ELEMENT_TYPE;
351-
}
352-
return OTHER_SYMBOL;
353-
};
354-
355-
jest.resetModules();
356-
357-
React = require('react');
358-
JSXRuntime = require('react/jsx-runtime');
359-
360-
class Component extends React.Component {
361-
render() {
362-
return JSXRuntime.jsx('div');
363-
}
364-
}
365-
366-
expect(React.isValidElement(JSXRuntime.jsx('div', {}))).toEqual(true);
367-
expect(React.isValidElement(JSXRuntime.jsx(Component, {}))).toEqual(true);
368-
369-
expect(React.isValidElement(null)).toEqual(false);
370-
expect(React.isValidElement(true)).toEqual(false);
371-
expect(React.isValidElement({})).toEqual(false);
372-
expect(React.isValidElement('string')).toEqual(false);
373-
if (!__EXPERIMENTAL__) {
374-
let factory;
375-
expect(() => {
376-
factory = React.createFactory('div');
377-
}).toWarnDev(
378-
'Warning: React.createFactory() is deprecated and will be removed in a ' +
379-
'future major release. Consider using JSX or use React.createElement() ' +
380-
'directly instead.',
381-
{withoutStack: true},
382-
);
383-
expect(React.isValidElement(factory)).toEqual(false);
384-
}
385-
expect(React.isValidElement(Component)).toEqual(false);
386-
expect(React.isValidElement({type: 'div', props: {}})).toEqual(false);
387-
388-
const jsonElement = JSON.stringify(JSXRuntime.jsx('div', {}));
389-
expect(React.isValidElement(JSON.parse(jsonElement))).toBe(false);
390-
});
391-
392238
it('should warn when unkeyed children are passed to jsx', () => {
393239
const container = document.createElement('div');
394240

packages/shared/ReactFeatureFlags.js

-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ export const disableSchedulerTimeoutBasedOnReactExpirationTime = false;
2424
// like migrating internal callers or performance testing.
2525
// -----------------------------------------------------------------------------
2626

27-
// This is blocked on adding a symbol polyfill to www.
28-
export const enableSymbolFallbackForWWW = false;
29-
3027
// This rolled out to 10% public in www, so we should be able to land, but some
3128
// internal tests need to be updated. The open source behavior is correct.
3229
export const skipUnmountedBoundaries = true;

0 commit comments

Comments
 (0)