forked from swc-project/swc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfixture.rs
83 lines (70 loc) · 2.04 KB
/
fixture.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use std::path::{Path, PathBuf};
use swc_ecma_ast::EsVersion;
use swc_ecma_codegen::{
text_writer::{JsWriter, WriteJs},
Emitter,
};
use swc_ecma_parser::{parse_file_as_module, Syntax, TsConfig};
use testing::{run_test2, NormalizedOutput};
fn run(input: &Path, minify: bool) {
let dir = input.parent().unwrap();
let output = if minify {
dir.join(format!(
"output.min.{}",
input.extension().unwrap().to_string_lossy()
))
} else {
dir.join(format!(
"output.{}",
input.extension().unwrap().to_string_lossy()
))
};
run_test2(false, |cm, _| {
let fm = cm.load_file(input).unwrap();
let m = parse_file_as_module(
&fm,
Syntax::Typescript(TsConfig {
decorators: true,
tsx: true,
..Default::default()
}),
EsVersion::latest(),
None,
&mut vec![],
)
.expect("failed to parse input as a module");
let mut buf = vec![];
{
let mut wr =
Box::new(JsWriter::new(cm.clone(), "\n", &mut buf, None)) as Box<dyn WriteJs>;
if minify {
wr = Box::new(swc_ecma_codegen::text_writer::omit_trailing_semi(wr));
}
let mut emitter = Emitter {
cfg: swc_ecma_codegen::Config {
minify,
..Default::default()
},
cm,
comments: None,
wr,
};
emitter.emit_module(&m).unwrap();
}
NormalizedOutput::from(String::from_utf8(buf).unwrap())
.compare_to_file(&output)
.unwrap();
Ok(())
})
.unwrap();
}
#[testing::fixture("tests/fixture/**/input.ts")]
#[testing::fixture("tests/fixture/**/input.tsx")]
fn ts(input: PathBuf) {
run(&input, false);
}
#[testing::fixture("tests/fixture/**/input.js")]
fn js(input: PathBuf) {
run(&input, false);
run(&input, true);
}