diff --git a/src/create-element.js b/src/create-element.js index d3342a582c..1bacba96a7 100644 --- a/src/create-element.js +++ b/src/create-element.js @@ -1,4 +1,5 @@ import options from './options'; +import { assign } from './util'; /** * Create an virtual node (used for JSX) @@ -9,7 +10,8 @@ import options from './options'; * @returns {import('./internal').VNode} */ export function createElement(type, props, children) { - if (props==null) props = {}; + props = assign({}, props); + if (arguments.length>3) { children = [children]; for (let i=3; i { expect(scratch.textContent).to.equal('01'); }); + it('should not cause infinite loop with referentially equal props', () => { + let i = 0; + let prevDiff = options.diff; + options.diff = () => { + if (++i > 10) { + options.diff = prevDiff; + throw new Error('Infinite loop'); + } + }; + + function App({ children, ...rest }) { + return ( +
+
{children}
+
+ ); + } + + render(10, scratch); + expect(scratch.textContent).to.equal('10'); + options.diff = prevDiff; + }); + describe('replaceNode parameter', () => { function appendChildToScratch(id) { diff --git a/test/shared/createContext.test.js b/test/shared/createContext.test.js index c50dad1415..269bb9948f 100755 --- a/test/shared/createContext.test.js +++ b/test/shared/createContext.test.js @@ -23,7 +23,7 @@ describe('createContext', () => { const providerComponent = {children}; //expect(providerComponent).to.have.property('tag', 'Provider'); - expect(providerComponent).to.have.property('props', contextValue); - expect(providerComponent).with.nested.deep.property('props.children', children); + expect(providerComponent.props.value).to.equal(contextValue.value); + expect(providerComponent.props.children).to.equal(children); }); }); diff --git a/test/shared/createElement.test.js b/test/shared/createElement.test.js index 7e894a479a..f176d010f6 100644 --- a/test/shared/createElement.test.js +++ b/test/shared/createElement.test.js @@ -39,7 +39,7 @@ describe('createElement(jsx)', () => { it('should set VNode#props property', () => { const props = {}; - expect(h('div', props)).to.have.property('props', props); + expect(h('div', props).props).to.deep.equal(props); }); it('should set VNode#text property', () => {