@@ -169,238 +169,224 @@ fn generate_transformed_import(
169169#[ cfg( test) ]
170170mod tests {
171171 use super :: * ;
172+ use insta:: assert_snapshot;
172173
173- #[ test]
174- fn test_default_to_named_same_name ( ) {
174+ fn emotion_alias ( ) -> HashMap < String , ImportAlias > {
175175 let mut aliases = HashMap :: new ( ) ;
176176 aliases. insert (
177177 "@emotion/styled" . to_string ( ) ,
178178 ImportAlias :: DefaultToNamed ( "styled" . to_string ( ) ) ,
179179 ) ;
180+ aliases
181+ }
180182
181- let code = r#"import styled from '@emotion/styled'"# ;
182- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
183-
184- assert ! (
185- result. contains( "import { styled } from '@devup-ui/react'" ) ,
186- "Expected named import, got: {}" ,
187- result
183+ fn vanilla_extract_alias ( ) -> HashMap < String , ImportAlias > {
184+ let mut aliases = HashMap :: new ( ) ;
185+ aliases. insert (
186+ "@vanilla-extract/css" . to_string ( ) ,
187+ ImportAlias :: NamedToNamed ,
188188 ) ;
189+ aliases
189190 }
190191
191- #[ test]
192- fn test_default_to_named_different_name ( ) {
192+ fn styled_components_alias ( ) -> HashMap < String , ImportAlias > {
193193 let mut aliases = HashMap :: new ( ) ;
194194 aliases. insert (
195- "@emotion/ styled" . to_string ( ) ,
195+ "styled-components " . to_string ( ) ,
196196 ImportAlias :: DefaultToNamed ( "styled" . to_string ( ) ) ,
197197 ) ;
198-
199- let code = r#"import styledA from '@emotion/styled'"# ;
200- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
201-
202- assert ! (
203- result. contains( "styled as styledA" ) ,
204- "Expected 'styled as styledA', got: {}" ,
205- result
206- ) ;
207- assert ! (
208- result. contains( "@devup-ui/react" ) ,
209- "Expected '@devup-ui/react', got: {}" ,
210- result
211- ) ;
198+ aliases
212199 }
213200
214- #[ test]
215- fn test_named_to_named ( ) {
201+ fn combined_aliases ( ) -> HashMap < String , ImportAlias > {
216202 let mut aliases = HashMap :: new ( ) ;
203+ aliases. insert (
204+ "@emotion/styled" . to_string ( ) ,
205+ ImportAlias :: DefaultToNamed ( "styled" . to_string ( ) ) ,
206+ ) ;
217207 aliases. insert (
218208 "@vanilla-extract/css" . to_string ( ) ,
219209 ImportAlias :: NamedToNamed ,
220210 ) ;
211+ aliases
212+ }
221213
222- let code = r#"import { style, globalStyle } from '@vanilla-extract/css'"# ;
223- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
224-
225- assert ! (
226- result. contains( "style" ) ,
227- "Expected 'style', got: {}" ,
228- result
229- ) ;
230- assert ! (
231- result. contains( "globalStyle" ) ,
232- "Expected 'globalStyle', got: {}" ,
233- result
234- ) ;
235- assert ! (
236- result. contains( "@devup-ui/react" ) ,
237- "Expected '@devup-ui/react', got: {}" ,
238- result
239- ) ;
214+ #[ test]
215+ fn test_default_to_named_same_name ( ) {
216+ assert_snapshot ! ( transform_import_aliases(
217+ r#"import styled from '@emotion/styled'"# ,
218+ "test.tsx" ,
219+ "@devup-ui/react" ,
220+ & emotion_alias( )
221+ ) ) ;
240222 }
241223
242224 #[ test]
243- fn test_no_matching_alias ( ) {
244- let mut aliases = HashMap :: new ( ) ;
245- aliases. insert (
246- "@emotion/styled" . to_string ( ) ,
247- ImportAlias :: DefaultToNamed ( "styled" . to_string ( ) ) ,
248- ) ;
225+ fn test_default_to_named_different_name ( ) {
226+ assert_snapshot ! ( transform_import_aliases(
227+ r#"import styledA from '@emotion/styled'"# ,
228+ "test.tsx" ,
229+ "@devup-ui/react" ,
230+ & emotion_alias( )
231+ ) ) ;
232+ }
249233
250- let code = r#"import { useState } from 'react'"# ;
251- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
234+ #[ test]
235+ fn test_named_to_named ( ) {
236+ assert_snapshot ! ( transform_import_aliases(
237+ r#"import { style, globalStyle } from '@vanilla-extract/css'"# ,
238+ "test.tsx" ,
239+ "@devup-ui/react" ,
240+ & vanilla_extract_alias( )
241+ ) ) ;
242+ }
252243
253- // Should be unchanged
254- assert ! (
255- result. contains( "react" ) ,
256- "Expected 'react' import unchanged, got: {}" ,
257- result
258- ) ;
259- assert ! (
260- !result. contains( "@devup-ui/react" ) ,
261- "Should not contain '@devup-ui/react', got: {}" ,
262- result
263- ) ;
244+ #[ test]
245+ fn test_no_matching_alias ( ) {
246+ assert_snapshot ! ( transform_import_aliases(
247+ r#"import { useState } from 'react'"# ,
248+ "test.tsx" ,
249+ "@devup-ui/react" ,
250+ & emotion_alias( )
251+ ) ) ;
264252 }
265253
266254 #[ test]
267255 fn test_empty_aliases ( ) {
268- let aliases = HashMap :: new ( ) ;
269- let code = r#"import styled from '@emotion/styled'"# ;
270- let result = transform_import_aliases ( code , "test.tsx" , "@devup-ui/react" , & aliases ) ;
271-
272- // Should return original code
273- assert_eq ! ( result , code ) ;
256+ assert_snapshot ! ( transform_import_aliases (
257+ r#"import styled from '@emotion/styled'"# ,
258+ "test.tsx" ,
259+ "@devup-ui/react" ,
260+ & HashMap :: new ( )
261+ ) ) ;
274262 }
275263
276264 #[ test]
277265 fn test_styled_components ( ) {
278- let mut aliases = HashMap :: new ( ) ;
279- aliases. insert (
280- "styled-components" . to_string ( ) ,
281- ImportAlias :: DefaultToNamed ( "styled" . to_string ( ) ) ,
282- ) ;
283-
284- let code = r#"import styled from 'styled-components'"# ;
285- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
286-
287- assert ! (
288- result. contains( "import { styled } from '@devup-ui/react'" ) ,
289- "Expected named import, got: {}" ,
290- result
291- ) ;
266+ assert_snapshot ! ( transform_import_aliases(
267+ r#"import styled from 'styled-components'"# ,
268+ "test.tsx" ,
269+ "@devup-ui/react" ,
270+ & styled_components_alias( )
271+ ) ) ;
292272 }
293273
294274 #[ test]
295275 fn test_css_ts_file_vanilla_extract ( ) {
296- let mut aliases = HashMap :: new ( ) ;
297- aliases. insert (
298- "@vanilla-extract/css" . to_string ( ) ,
299- ImportAlias :: NamedToNamed ,
300- ) ;
301-
302- let code = r#"import { style } from '@vanilla-extract/css'
303- export const container = style({ background: 'red' })"# ;
304- let result = transform_import_aliases ( code, "styles.css.ts" , "@devup-ui/react" , & aliases) ;
305-
306- assert ! (
307- result. contains( "@devup-ui/react" ) ,
308- "Expected '@devup-ui/react', got: {}" ,
309- result
310- ) ;
311- assert ! (
312- result. contains( "style" ) ,
313- "Expected 'style' import, got: {}" ,
314- result
315- ) ;
276+ assert_snapshot ! ( transform_import_aliases(
277+ r#"import { style } from '@vanilla-extract/css'
278+ export const container = style({ background: 'red' })"# ,
279+ "styles.css.ts" ,
280+ "@devup-ui/react" ,
281+ & vanilla_extract_alias( )
282+ ) ) ;
316283 }
317284
318285 #[ test]
319286 fn test_multiple_imports_same_file ( ) {
320- let mut aliases = HashMap :: new ( ) ;
321- aliases. insert (
322- "@emotion/styled" . to_string ( ) ,
323- ImportAlias :: DefaultToNamed ( "styled" . to_string ( ) ) ,
324- ) ;
325- aliases. insert (
326- "@vanilla-extract/css" . to_string ( ) ,
327- ImportAlias :: NamedToNamed ,
328- ) ;
329-
330- let code = r#"import styled from '@emotion/styled'
287+ assert_snapshot ! ( transform_import_aliases(
288+ r#"import styled from '@emotion/styled'
331289import { style } from '@vanilla-extract/css'
332- import { useState } from 'react'"# ;
333- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
334-
335- // Both aliased imports should be transformed
336- assert ! (
337- result. matches( "@devup-ui/react" ) . count( ) == 2 ,
338- "Expected 2 @devup-ui/react imports, got: {}" ,
339- result
340- ) ;
341- // React import should be unchanged
342- assert ! (
343- result. contains( "react" ) ,
344- "Expected 'react' import, got: {}" ,
345- result
346- ) ;
290+ import { useState } from 'react'"# ,
291+ "test.tsx" ,
292+ "@devup-ui/react" ,
293+ & combined_aliases( )
294+ ) ) ;
347295 }
348296
349297 #[ test]
350298 fn test_preserves_code_after_import ( ) {
351- let mut aliases = HashMap :: new ( ) ;
352- aliases. insert (
353- "@vanilla-extract/css" . to_string ( ) ,
354- ImportAlias :: NamedToNamed ,
355- ) ;
356-
357- let code = r#"import { style } from '@vanilla-extract/css'
299+ assert_snapshot ! ( transform_import_aliases(
300+ r#"import { style } from '@vanilla-extract/css'
358301
359302export const button = style({
360303 background: 'blue',
361304 padding: '8px',
362- });"# ;
363- let result = transform_import_aliases ( code, "test.css.ts" , "@devup-ui/react" , & aliases) ;
364-
365- // Import should be transformed
366- assert ! (
367- result. contains( "@devup-ui/react" ) ,
368- "Expected '@devup-ui/react', got: {}" ,
369- result
370- ) ;
371- // Rest of the code should be preserved
372- assert ! (
373- result. contains( "export const button = style" ) ,
374- "Expected style call preserved, got: {}" ,
375- result
376- ) ;
377- assert ! (
378- result. contains( "background: 'blue'" ) ,
379- "Expected styles preserved, got: {}" ,
380- result
381- ) ;
305+ });"# ,
306+ "test.css.ts" ,
307+ "@devup-ui/react" ,
308+ & vanilla_extract_alias( )
309+ ) ) ;
382310 }
383311
384312 #[ test]
385313 fn test_named_import_with_alias ( ) {
386- let mut aliases = HashMap :: new ( ) ;
387- aliases. insert (
388- "@vanilla-extract/css" . to_string ( ) ,
389- ImportAlias :: NamedToNamed ,
390- ) ;
314+ assert_snapshot ! ( transform_import_aliases(
315+ r#"import { style as myStyle } from '@vanilla-extract/css'"# ,
316+ "test.tsx" ,
317+ "@devup-ui/react" ,
318+ & vanilla_extract_alias( )
319+ ) ) ;
320+ }
391321
392- let code = r#"import { style as myStyle } from '@vanilla-extract/css'"# ;
393- let result = transform_import_aliases ( code, "test.tsx" , "@devup-ui/react" , & aliases) ;
322+ #[ test]
323+ fn test_side_effect_import_no_specifiers ( ) {
324+ assert_snapshot ! ( transform_import_aliases(
325+ r#"import '@emotion/styled'"# ,
326+ "test.tsx" ,
327+ "@devup-ui/react" ,
328+ & emotion_alias( )
329+ ) ) ;
330+ }
394331
395- assert ! (
396- result. contains( "style as myStyle" ) ,
397- "Expected 'style as myStyle', got: {}" ,
398- result
399- ) ;
400- assert ! (
401- result. contains( "@devup-ui/react" ) ,
402- "Expected '@devup-ui/react', got: {}" ,
403- result
404- ) ;
332+ #[ test]
333+ fn test_alias_in_comment_not_transformed ( ) {
334+ assert_snapshot ! ( transform_import_aliases(
335+ r#"// This uses @emotion/styled but doesn't import it
336+ const x = 1;"# ,
337+ "test.tsx" ,
338+ "@devup-ui/react" ,
339+ & emotion_alias( )
340+ ) ) ;
341+ }
342+
343+ #[ test]
344+ fn test_default_to_named_with_additional_named_imports ( ) {
345+ assert_snapshot ! ( transform_import_aliases(
346+ r#"import styled, { css, keyframes } from '@emotion/styled'"# ,
347+ "test.tsx" ,
348+ "@devup-ui/react" ,
349+ & emotion_alias( )
350+ ) ) ;
351+ }
352+
353+ #[ test]
354+ fn test_default_to_named_with_aliased_named_import ( ) {
355+ assert_snapshot ! ( transform_import_aliases(
356+ r#"import styled, { css as emotionCss } from '@emotion/styled'"# ,
357+ "test.tsx" ,
358+ "@devup-ui/react" ,
359+ & emotion_alias( )
360+ ) ) ;
361+ }
362+
363+ #[ test]
364+ fn test_default_to_named_namespace_import ( ) {
365+ assert_snapshot ! ( transform_import_aliases(
366+ r#"import * as Emotion from '@emotion/styled'"# ,
367+ "test.tsx" ,
368+ "@devup-ui/react" ,
369+ & emotion_alias( )
370+ ) ) ;
371+ }
372+
373+ #[ test]
374+ fn test_named_to_named_with_default_specifier ( ) {
375+ assert_snapshot ! ( transform_import_aliases(
376+ r#"import vanillaDefault, { style } from '@vanilla-extract/css'"# ,
377+ "test.tsx" ,
378+ "@devup-ui/react" ,
379+ & vanilla_extract_alias( )
380+ ) ) ;
381+ }
382+
383+ #[ test]
384+ fn test_named_to_named_namespace_import ( ) {
385+ assert_snapshot ! ( transform_import_aliases(
386+ r#"import * as VE from '@vanilla-extract/css'"# ,
387+ "test.tsx" ,
388+ "@devup-ui/react" ,
389+ & vanilla_extract_alias( )
390+ ) ) ;
405391 }
406392}
0 commit comments