diff --git a/src/browser/ui/dom/components/ReactDOMOption.js b/src/browser/ui/dom/components/ReactDOMOption.js
index dcc593afcc5b..ede7bd74a52d 100644
--- a/src/browser/ui/dom/components/ReactDOMOption.js
+++ b/src/browser/ui/dom/components/ReactDOMOption.js
@@ -12,6 +12,7 @@
'use strict';
var ReactBrowserComponentMixin = require('ReactBrowserComponentMixin');
+var ReactChildren = require('ReactChildren');
var ReactClass = require('ReactClass');
var ReactDOMSelect = require('ReactDOMSelect');
var ReactElement = require('ReactElement');
@@ -86,7 +87,25 @@ var ReactDOMOption = ReactClass.createClass({
props = assign({}, props, {selected: this.state.selected});
}
- return option(props, this.props.children);
+ var content = '';
+
+ // Flatten children and warn if they aren't strings or numbers;
+ // invalid types are ignored.
+ ReactChildren.forEach(this.props.children, function(child) {
+ if (child == null) {
+ return;
+ }
+ if (typeof child === 'string' || typeof child === 'number') {
+ content += child;
+ } else {
+ warning(
+ false,
+ 'Only strings and numbers are supported as ;
+ stub = ReactTestUtils.renderIntoDocument(stub);
+ var node = React.findDOMNode(stub);
+
+ expect(node.innerHTML).toBe('1 foo');
+ });
+
+ it('should ignore invalid children types', function() {
+ var stub = ;
+ stub = ReactTestUtils.renderIntoDocument(stub);
+ var node = React.findDOMNode(stub);
+
+ expect(node.innerHTML).toBe('1 2');
+ });
+
+ it('should warn when passing invalid children', function() {
+ var stub = ;
+ spyOn(console, 'error');
+ stub = ReactTestUtils.renderIntoDocument(stub);
+
+ var node = React.findDOMNode(stub);
+
+ expect(console.error.calls.length).toBe(1);
+ expect(console.error.calls[0].args[0]).toContain(
+ 'Only strings and numbers are supported as ;
+ spyOn(console, 'error');
+ stub = ReactTestUtils.renderIntoDocument(stub);
+
+ var node = React.findDOMNode(stub);
+
+ expect(console.error.calls.length).toBe(0);
+ expect(node.innerHTML).toBe('1 2');
+ });
+
+});