@@ -21,6 +21,7 @@ describe('ReactDOMComponent', function() {
2121 var ReactTestUtils ;
2222
2323 beforeEach ( function ( ) {
24+ require ( 'mock-modules' ) . dumpCache ( ) ;
2425 React = require ( 'React' ) ;
2526 ReactTestUtils = require ( 'ReactTestUtils' ) ;
2627 } ) ;
@@ -203,6 +204,59 @@ describe('ReactDOMComponent', function() {
203204 expect ( stubStyle . color ) . toEqual ( 'green' ) ;
204205 } ) ;
205206
207+ it ( 'should reject haxors on initial markup' , function ( ) {
208+ spyOn ( console , 'error' ) ;
209+ for ( var i = 0 ; i < 3 ; i ++ ) {
210+ var container = document . createElement ( 'div' ) ;
211+ var element = React . createElement (
212+ 'x-foo-component' ,
213+ { 'blah" onclick="beevil" noise="hi' : 'selected' } ,
214+ null
215+ ) ;
216+ React . render ( element , container ) ;
217+ }
218+ expect ( console . error . argsForCall . length ) . toBe ( 1 ) ;
219+ expect ( console . error . argsForCall [ 0 ] [ 0 ] ) . toEqual (
220+ 'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
221+ ) ;
222+ } ) ;
223+
224+ it ( 'should reject haxors on update' , function ( ) {
225+ spyOn ( console , 'error' ) ;
226+ for ( var i = 0 ; i < 3 ; i ++ ) {
227+ var container = document . createElement ( 'div' ) ;
228+ var beforeUpdate = React . createElement ( 'x-foo-component' , { } , null ) ;
229+ React . render ( beforeUpdate , container ) ;
230+
231+ var afterUpdate = React . createElement (
232+ 'x-foo-component' ,
233+ { 'blah" onclick="beevil" noise="hi' : 'selected' } ,
234+ null
235+ ) ;
236+ React . render ( afterUpdate , container ) ;
237+ }
238+ expect ( console . error . argsForCall . length ) . toBe ( 1 ) ;
239+ expect ( console . error . argsForCall [ 0 ] [ 0 ] ) . toEqual (
240+ 'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
241+ ) ;
242+ } ) ;
243+
244+ it ( 'should update arbitrary attributes for tags containnig dashes' , function ( ) {
245+ var container = document . createElement ( 'div' ) ;
246+
247+ var beforeUpdate = React . createElement ( 'x-foo-component' , { } , null ) ;
248+ React . render ( beforeUpdate , container ) ;
249+
250+ var afterUpdate = React . createElement (
251+ 'x-foo-component' ,
252+ { 'myattr' : 'myval' } ,
253+ null
254+ ) ;
255+ React . render ( afterUpdate , container ) ;
256+
257+ expect ( container . childNodes [ 0 ] . getAttribute ( 'myattr' ) ) . toBe ( 'myval' ) ;
258+ } ) ;
259+
206260 it ( 'should clear all the styles when removing `style`' , function ( ) {
207261 var styles = { display : 'none' , color : 'red' } ;
208262 var container = document . createElement ( 'div' ) ;
0 commit comments