/**
* Copyright 2013-2014 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @jsx React.DOM
* @emails react-core
*/
"use strict";
var React;
var ReactTestUtils;
var reactComponentExpect;
var TestComponent;
describe('ReactPropTransferer', function() {
beforeEach(function() {
React = require('React');
ReactTestUtils = require('ReactTestUtils');
reactComponentExpect = require('reactComponentExpect');
TestComponent = React.createClass({
render: function() {
return this.transferPropsTo(
);
}
});
});
it('should leave explicitly specified properties intact', function() {
var instance = ;
instance = ReactTestUtils.renderIntoDocument(instance);
reactComponentExpect(instance)
.expectRenderedChild()
.toBeComponentOfType(React.DOM.input)
.scalarPropsEqual({
className: 'textinput',
style: {display: 'block', color: 'green'},
type: 'text',
value: ''
});
});
it('should transfer unspecified properties', function() {
var instance = ;
instance = ReactTestUtils.renderIntoDocument(instance);
reactComponentExpect(instance)
.expectRenderedChild()
.toBeComponentOfType(React.DOM.input)
.scalarPropsEqual({placeholder: 'Type here...'});
});
it('should transfer using merge strategies', function() {
var instance =
;
instance = ReactTestUtils.renderIntoDocument(instance);
reactComponentExpect(instance)
.expectRenderedChild()
.toBeComponentOfType(React.DOM.input)
.scalarPropsEqual({
className: 'textinput hidden_elem',
style: {
color: 'green',
display: 'block',
width: '100%'
}
});
});
it('should not transfer children', function() {
var ChildrenTestComponent = React.createClass({
render: function() {
return this.transferPropsTo(
);
}
});
var instance =
Hello!;
instance = ReactTestUtils.renderIntoDocument(instance);
reactComponentExpect(instance)
.expectRenderedChild()
.toBeDOMComponentWithTag('div')
.toBeDOMComponentWithNoChildren();
});
it('should not transfer ref or key', function() {
var TestComponent = React.createClass({
render: function() {
expect(this.props.ref).toBeUndefined();
expect(this.props.key).toBeUndefined();
return ;
}
});
var OuterTestComponent = React.createClass({
render: function() {
return this.transferPropsTo();
}
});
var OuterOuterTestComponent = React.createClass({
render: function() {
return ;
}
});
ReactTestUtils.renderIntoDocument();
});
it('should not transferPropsTo() a component you don\'t own', function() {
var Parent = React.createClass({
render: function() {
return ;
}
});
var Child = React.createClass({
render: function() {
return this.transferPropsTo(this.props.children);
}
});
expect(function() {
ReactTestUtils.renderIntoDocument();
}).toThrow(
'Invariant Violation: ' +
'Child: You can\'t call transferPropsTo() on a component that you ' +
'don\'t own, span. ' +
'This usually means you are calling transferPropsTo() on a component ' +
'passed in as props or children.'
);
});
});