Skip to content

Commit

Permalink
Add support for react context element types, fixes enzymejs#1509
Browse files Browse the repository at this point in the history
  • Loading branch information
jquense committed Mar 5, 2018
1 parent 4d0b183 commit c8019c1
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 8 deletions.
6 changes: 3 additions & 3 deletions packages/enzyme-adapter-react-16/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@
"object.values": "^1.0.4",
"prop-types": "^15.6.0",
"react-reconciler": "^0.7.0",
"react-test-renderer": "^16.0.0-0"
"react-test-renderer": "^16.0.0-0 || ^16.3.0-0"
},
"peerDependencies": {
"enzyme": "^3.0.0",
"react": "^16.0.0-0",
"react-dom": "^16.0.0-0"
"react": "^16.0.0-0 || ^16.3.0-0",
"react-dom": "^16.0.0-0 || ^16.3.0-0"
},
"devDependencies": {
"babel-cli": "^6.26.0",
Expand Down
6 changes: 6 additions & 0 deletions packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ const FunctionalComponent = 1;
const HostPortal = 4;
const HostComponent = 5;
const HostText = 6;
const ContextConsumer = 12;
const ContextProvider = 13;

function nodeAndSiblingsArray(nodeWithSibling) {
const array = [];
Expand Down Expand Up @@ -72,6 +74,10 @@ function toTree(vnode) {
return toTree(node.child);
case HostPortal: // 4
return toTree(node.child);
case ContextProvider:
return toTree(node.child);
case ContextConsumer:
return toTree(node.child);
case ClassComponent:
return {
nodeType: 'class',
Expand Down
2 changes: 1 addition & 1 deletion packages/enzyme-test-suite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,4 @@
"eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.6.1"
}
}
}
20 changes: 18 additions & 2 deletions packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ import {
import { ITERATOR_SYMBOL, sym } from 'enzyme/build/Utils';

import './_helpers/setupAdapters';
import { createClass, createPortal } from './_helpers/react-compat';
import { createClass, createContext, createPortal } from './_helpers/react-compat';
import {
describeWithDOM,
describeIf,
itIf,
itWithData,
generateEmptyRenderData,
} from './_helpers';
import { REACT013, REACT014, REACT16, is } from './_helpers/version';
import { REACT013, REACT014, REACT16, REACT163, is } from './_helpers/version';

const getElementPropSelector = prop => x => x.props[prop];
const getWrapperPropSelector = prop => x => x.prop(prop);
Expand Down Expand Up @@ -165,6 +165,22 @@ describeWithDOM('mount', () => {
expect(wrapper.context('name')).to.equal(context.name);
});

itIf(REACT163, 'should find elements through Context elements', () => {
const { Provider, Consumer } = createContext('');

class Foo extends React.Component {
render() {
return (
<Consumer>{value => <span>{value}</span>}</Consumer>
);
}
}

const wrapper = mount(<Provider value="foo"><div><Foo /></div></Provider>);

expect(wrapper.find('span').text()).to.equal('foo');
});

describeIf(!REACT013, 'stateless components', () => {
it('can pass in context', () => {
const SimpleComponent = (props, context) => (
Expand Down
12 changes: 10 additions & 2 deletions packages/enzyme-test-suite/test/_helpers/react-compat.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ import { is } from './version';
let createClass;
let renderToString;
let createPortal;
let createContext;

if (is('>=15.5 || ^16.0.0-alpha')) {
if (is('>=15.5 || ^16.0.0-alpha || ^16.3.0-alpha')) {
// eslint-disable-next-line import/no-extraneous-dependencies
createClass = require('create-react-class');
} else {
Expand All @@ -24,14 +25,21 @@ if (is('^0.13.0')) {
({ renderToString } = require('react-dom/server'));
}

if (is('^16.0.0-alpha')) {
if (is('^16.0.0-alpha || ^16.3.0-alpha')) {
({ createPortal } = require('react-dom'));
} else {
createPortal = null;
}

if (is('^16.3.0-0')) {
({ createContext } = require('react'));
} else {
createContext = null;
}

export {
createClass,
renderToString,
createPortal,
createContext,
};
1 change: 1 addition & 0 deletions packages/enzyme-test-suite/test/_helpers/version.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export const REACT15 = major === '15';
export const REACT150_4 = REACT15 && minor < 5;
export const REACT155 = REACT15 && minor >= 5;
export const REACT16 = major === '16';
export const REACT163 = REACT16 && minor >= 3;

export function gt(v) { return semver.gt(VERSION, v); }
export function lt(v) { return semver.lt(VERSION, v); }
Expand Down

0 comments on commit c8019c1

Please sign in to comment.