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('sets aliased attributes on SVG elements with a warning', function() {
      spyOn(console, 'error');
      var el = ReactTestUtils.renderIntoDocument(
        <svg><text arabic-form="initial" /></svg>,
      );
      var text = el.querySelector('text');
      expect(text.hasAttribute('arabic-form')).toBe(true);
      expectDev(console.error.calls.argsFor(0)[0]).toContain(
        'Warning: Invalid DOM property `arabic-form`. Did you mean `arabicForm`?',
      );
    });
    it('sets aliased attributes on custom elements', function() {
      var el = ReactTestUtils.renderIntoDocument(
        <div is="custom-element" class="test" />,
      );
      expect(el.getAttribute('class')).toBe('test');
    });
    it('aliased attributes on custom elements with bad casing', function() {
      var el = ReactTestUtils.renderIntoDocument(
        <div is="custom-element" claSS="test" />,
      );
      expect(el.getAttribute('class')).toBe('test');
    });
    it('updates aliased attributes on custom elements', function() {
      var container = document.createElement('div');
      ReactDOM.render(<div is="custom-element" class="foo" />, container);
      ReactDOM.render(<div is="custom-element" class="bar" />, container);
      expect(container.firstChild.getAttribute('class')).toBe('bar');
    });
  });