It seems problematic to allow arbitary non-lowercase attribute on HTML nodes. Because the server has no ability to keep them case sensitive (HTML isn't). So they will end up different on the client.

We should probably warn if the attribute is not a known one *and* is not lowercase.
});
    it('should validate against multiple children props', () => {
      ReactDOM.render(<div />, container);
      expect(function() {
        ReactDOM.render(
          <div children="" dangerouslySetInnerHTML={{__html: ''}} />,
          container,
        );
      }).toThrowError(
        'Can only set one of `children` or `props.dangerouslySetInnerHTML`.',
      );
    });
    it('should warn about contentEditable and children', () => {
      spyOn(console, 'error');
      ReactDOM.render(<div contentEditable={true}><div /></div>, container);
      expectDev(console.error.calls.count()).toBe(1);
      expectDev(console.error.calls.argsFor(0)[0]).toContain('contentEditable');
    });
    it('should validate against invalid styles', () => {
      ReactDOM.render(<div />, container);
      expect(function() {
        ReactDOM.render(<div style={1} />, container);
      }).toThrowError(
        'The `style` prop expects a mapping from style properties to values, ' +
          "not a string. For example, style={{marginRight: spacing + 'em'}} " +
          'when using JSX.',
      );
    });
    it('should report component containing invalid styles', () => {
      class Animal extends React.Component {