As described on http://facebook.github.io/react/docs/forms.html, the onChange handler of an input should fire when the checked state changes.  However, it actually fires when the radio button is clicked,

In other words, it fails to fire when a checked radio button is unchecked (by checking a different radio button), and it fires even without a state change when a checked radio button is clicked.

In short, it's missing checked transtions true->false, and it's reporting spurious transitions true->true.

'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
      );
    });
    it('should update arbitrary attributes for tags containing dashes', function() {
      var container = document.createElement('div');
      var beforeUpdate = React.createElement('x-foo-component', {}, null);
      ReactDOM.render(beforeUpdate, container);
      var afterUpdate = <x-foo-component myattr="myval" />;
      ReactDOM.render(afterUpdate, container);
      expect(container.childNodes[0].getAttribute('myattr')).toBe('myval');
    });
    it('should clear all the styles when removing `style`', function() {
      var styles = {display: 'none', color: 'red'};
      var container = document.createElement('div');
      ReactDOM.render(<div style={styles} />, container);
      var stubStyle = container.firstChild.style;
      ReactDOM.render(<div />, container);
      expect(stubStyle.display).toEqual('');
      expect(stubStyle.color).toEqual('');
    });
    it('should update styles when `style` changes from null to object', function() {
      var container = document.createElement('div');
      var styles = {color: 'red'};
      ReactDOM.render(<div style={styles} />, container);
      ReactDOM.render(<div />, container);
      ReactDOM.render(<div style={styles} />, container);
      var stubStyle = container.firstChild.style;
      expect(stubStyle.color).toEqual('red');
    });
    it('should empty element when removing innerHTML', function() {