@@ -18,6 +18,13 @@ export const meta = {
1818} ;
1919
2020export const create = ( context ) => {
21+ function getReplacementObjectProperty ( styleName ) {
22+ if ( styleName . type === "Literal" ) {
23+ return camelCase ( styleName . value ) ;
24+ }
25+
26+ return `[${ context . getSourceCode ( ) . getText ( styleName ) } ]` ;
27+ }
2128 function getReplacementStyleParam ( styleName , styleValue ) {
2229 return styleName . type === "Literal"
2330 ? `{${ camelCase ( styleName . value ) } : ${ context
@@ -148,7 +155,7 @@ export const create = (context) => {
148155 } ,
149156
150157 //expect(el.style["foo-bar"]).toBe("baz")
151- [ `MemberExpression[property.name=style][parent.computed=true][parent.parent.parent.property.name=/toBe$|to(Strict)?Equal/][parent.parent.parent.parent.arguments.0.type=/(Template)?Literal/][parent.parent.callee.name=expect]` ] (
158+ [ `MemberExpression[property.name=style][parent.computed=true][parent.parent.parent.property.name=/toBe$|to(Strict)?Equal/][parent.parent.parent.parent.arguments.0.type=/(( Template)?Literal|Identifier) /][parent.parent.callee.name=expect]` ] (
152159 node
153160 ) {
154161 const styleName = node . parent . property ;
@@ -157,10 +164,14 @@ export const create = (context) => {
157164 const startOfStyleMemberExpression = node . object . range [ 1 ] ;
158165 const endOfStyleMemberExpression =
159166 node . parent . parent . arguments [ 0 ] . range [ 1 ] ;
160- context . report ( {
161- node : node . property ,
162- message : "Use toHaveStyle instead of asserting on element style" ,
163- fix ( fixer ) {
167+
168+ let fix = null ;
169+
170+ if (
171+ typeof styleValue . value !== "number" &&
172+ ! ( styleValue . value instanceof RegExp )
173+ ) {
174+ fix = ( fixer ) => {
164175 return [
165176 fixer . removeRange ( [
166177 startOfStyleMemberExpression ,
@@ -169,10 +180,20 @@ export const create = (context) => {
169180 fixer . replaceText ( matcher , "toHaveStyle" ) ,
170181 fixer . replaceText (
171182 styleValue ,
172- getReplacementStyleParam ( styleName , styleValue )
183+ typeof styleName . value === "number"
184+ ? `{${ getReplacementObjectProperty (
185+ styleValue
186+ ) } : expect.anything()}`
187+ : getReplacementStyleParam ( styleName , styleValue )
173188 ) ,
174189 ] ;
175- } ,
190+ } ;
191+ }
192+
193+ context . report ( {
194+ node : node . property ,
195+ message : "Use toHaveStyle instead of asserting on element style" ,
196+ fix,
176197 } ) ;
177198 } ,
178199 //expect(el.style["foo-bar"]).not.toBe("baz")
@@ -185,10 +206,10 @@ export const create = (context) => {
185206 const endOfStyleMemberExpression =
186207 node . parent . parent . arguments [ 0 ] . range [ 1 ] ;
187208
188- context . report ( {
189- node : node . property ,
190- message : "Use toHaveStyle instead of asserting on element style" ,
191- fix ( fixer ) {
209+ let fix = null ;
210+
211+ if ( typeof styleName . value !== "number" ) {
212+ fix = ( fixer ) => {
192213 return [
193214 fixer . removeRange ( [
194215 node . object . range [ 1 ] ,
@@ -200,7 +221,13 @@ export const create = (context) => {
200221 getReplacementStyleParam ( styleName , styleValue )
201222 ) ,
202223 ] ;
203- } ,
224+ } ;
225+ }
226+
227+ context . report ( {
228+ node : node . property ,
229+ message : "Use toHaveStyle instead of asserting on element style" ,
230+ fix,
204231 } ) ;
205232 } ,
206233 //expect(foo.style).toHaveProperty("foo", "bar")
@@ -225,9 +252,9 @@ export const create = (context) => {
225252 fixer . replaceText ( matcher , "toHaveStyle" ) ,
226253 fixer . replaceTextRange (
227254 [ styleName . range [ 0 ] , styleValue . range [ 1 ] ] ,
228- `{${ camelCase (
229- styleName . value
230- ) } : ${ context . getSourceCode ( ) . getText ( styleValue ) } }`
255+ `{${ camelCase ( styleName . value ) } : ${ context
256+ . getSourceCode ( )
257+ . getText ( styleValue ) } }`
231258 ) ,
232259 ] ;
233260 } ,
@@ -238,10 +265,8 @@ export const create = (context) => {
238265 [ `MemberExpression[property.name=style][parent.parent.property.name=not][parent.parent.parent.property.name=toHaveProperty][parent.callee.name=expect]` ] (
239266 node
240267 ) {
241- const [
242- styleName ,
243- styleValue ,
244- ] = node . parent . parent . parent . parent . arguments ;
268+ const [ styleName , styleValue ] =
269+ node . parent . parent . parent . parent . arguments ;
245270 const matcher = node . parent . parent . parent . property ;
246271
247272 context . report ( {
@@ -259,9 +284,9 @@ export const create = (context) => {
259284 fixer . replaceText ( matcher , "toHaveStyle" ) ,
260285 fixer . replaceTextRange (
261286 [ styleName . range [ 0 ] , styleValue . range [ 1 ] ] ,
262- `{${ camelCase (
263- styleName . value
264- ) } : ${ context . getSourceCode ( ) . getText ( styleValue ) } }`
287+ `{${ camelCase ( styleName . value ) } : ${ context
288+ . getSourceCode ( )
289+ . getText ( styleValue ) } }`
265290 ) ,
266291 ] ;
267292 } ,
0 commit comments