@@ -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,61 @@ 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+ {
211+ var container = document . createElement ( 'div' ) ;
212+ var element = React . createElement (
213+ 'x-foo-component' ,
214+ { 'blah" onclick="beevil" noise="hi' : 'selected' } ,
215+ null
216+ ) ;
217+ React . render ( element , container ) ;
218+ }
219+ expect ( console . error . argsForCall . length ) . toBe ( 1 ) ;
220+ expect ( console . error . argsForCall [ 0 ] [ 0 ] ) . toEqual (
221+ 'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
222+ ) ;
223+ } ) ;
224+
225+ it ( 'should reject haxors on update' , function ( ) {
226+ spyOn ( console , 'error' ) ;
227+ for ( var i = 0 ; i < 3 ; i ++ )
228+ {
229+ var container = document . createElement ( 'div' ) ;
230+ var beforeUpdate = React . createElement ( 'x-foo-component' , { } , null ) ;
231+ React . render ( beforeUpdate , container ) ;
232+
233+ var afterUpdate = React . createElement (
234+ 'x-foo-component' ,
235+ { 'blah" onclick="beevil" noise="hi' : 'selected' } ,
236+ null
237+ ) ;
238+ React . render ( afterUpdate , container ) ;
239+ }
240+ expect ( console . error . argsForCall . length ) . toBe ( 1 ) ;
241+ expect ( console . error . argsForCall [ 0 ] [ 0 ] ) . toEqual (
242+ 'Warning: Invalid attribute name: `blah" onclick="beevil" noise="hi`'
243+ ) ;
244+ } ) ;
245+
246+ it ( 'should update arbitrary attributes for tags containnig dashes' , function ( ) {
247+ var container = document . createElement ( 'div' ) ;
248+
249+ var beforeUpdate = React . createElement ( 'x-foo-component' , { } , null ) ;
250+ React . render ( beforeUpdate , container ) ;
251+
252+ var afterUpdate = React . createElement (
253+ 'x-foo-component' ,
254+ { 'myattr' : 'myval' } ,
255+ null
256+ ) ;
257+ React . render ( afterUpdate , container ) ;
258+
259+ expect ( container . childNodes [ 0 ] . getAttribute ( 'myattr' ) ) . toBe ( 'myval' ) ;
260+ } ) ;
261+
206262 it ( 'should clear all the styles when removing `style`' , function ( ) {
207263 var styles = { display : 'none' , color : 'red' } ;
208264 var container = document . createElement ( 'div' ) ;
0 commit comments