Skip to content

Commit dc11295

Browse files
committed
Add snapshot
1 parent c4d75bd commit dc11295

19 files changed

Lines changed: 275 additions & 183 deletions

libs/extractor/src/import_alias_visit.rs

Lines changed: 161 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -169,238 +169,224 @@ fn generate_transformed_import(
169169
#[cfg(test)]
170170
mod 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'
331289
import { 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
359302
export 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

Comments
 (0)