swc/crates/swc_ecma_codegen/tests/fixture.rs
2021-11-10 19:00:54 +09:00

78 lines
2.0 KiB
Rust

use std::path::{Path, PathBuf};
use swc_common::input::SourceFileInput;
use swc_ecma_ast::EsVersion;
use swc_ecma_codegen::{
text_writer::{JsWriter, WriteJs},
Emitter,
};
use swc_ecma_parser::{lexer::Lexer, Parser, Syntax};
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 lexer = Lexer::new(
Syntax::Typescript(Default::default()),
EsVersion::latest(),
SourceFileInput::from(&*fm),
None,
);
let mut parser = Parser::new_from(lexer);
let m = parser
.parse_module()
.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 },
cm: cm.clone(),
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")]
fn ts(input: PathBuf) {
run(&input, false);
}
#[testing::fixture("tests/fixture/**/input.js")]
fn js(input: PathBuf) {
run(&input, false);
run(&input, true);
}