From 85f5e5b955f65ad6b21b9f4aee5b8dacd8a71e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Tue, 8 Oct 2024 12:27:03 +0900 Subject: [PATCH] fix(es/testing): Revert #9264 (#9621) Reverts swc-project/swc#9264 --- .changeset/wild-fans-travel.md | 5 + .../swc_ecma_transforms/tests/decorators.rs | 17 - .../swc_ecma_transforms_module/tests/amd.rs | 5 +- .../tests/common_js.rs | 5 +- .../tests/path_node.rs | 6 +- .../tests/system_js.rs | 10 +- .../swc_ecma_transforms_module/tests/umd.rs | 4 +- .../src/inline_globals.rs | 15 +- .../src/simplify/inlining/mod.rs | 6 +- .../tests/decorator_evanw.rs | 4 +- .../tests/decorators.rs | 6 +- .../src/jsx/tests.rs | 62 +--- .../src/jsx_self/tests.rs | 1 - .../src/jsx_src/tests.rs | 1 - .../src/refresh/tests.rs | 35 -- crates/swc_ecma_transforms_testing/src/lib.rs | 332 ++++-------------- 16 files changed, 94 insertions(+), 420 deletions(-) create mode 100644 .changeset/wild-fans-travel.md diff --git a/.changeset/wild-fans-travel.md b/.changeset/wild-fans-travel.md new file mode 100644 index 000000000000..b9a065a83f9b --- /dev/null +++ b/.changeset/wild-fans-travel.md @@ -0,0 +1,5 @@ +--- +swc_ecma_transforms_testing: breaking +--- + +Revert "feat(es/testing): Parse test code as a `Program` instead of a `Module`" diff --git a/crates/swc_ecma_transforms/tests/decorators.rs b/crates/swc_ecma_transforms/tests/decorators.rs index e6635d31f084..de0063687985 100644 --- a/crates/swc_ecma_transforms/tests/decorators.rs +++ b/crates/swc_ecma_transforms/tests/decorators.rs @@ -91,7 +91,6 @@ fn transformation(t: &Tester) -> impl Fold { // transformation_declaration test!( - module, syntax(false), |t| transformation(t), transformation_declaration, @@ -102,7 +101,6 @@ class A {} ); // transformation_initialize_after_super_multiple test!( - module, syntax(false), |t| transformation(t), transformation_initialize_after_super_multiple, @@ -136,7 +134,6 @@ export default @dec() class {} ); // transformation_initialize_after_super_statement test!( - module, syntax(false), |t| transformation(t), transformation_initialize_after_super_statement, @@ -214,7 +211,6 @@ expect(A).toBe(C); ); // misc_method_name_not_shadow test!( - module, syntax(false), |t| tr(t), misc_method_name_not_shadow, @@ -324,7 +320,6 @@ expect(() => { ); // duplicated_keys_computed_keys_same_value test!( - module, syntax(false), |t| tr(t), duplicated_keys_computed_keys_same_value, @@ -400,7 +395,6 @@ expect(log).toEqual(numsFrom0to9); ); // transformation_initializer_after_super_bug_8808 test!( - module, syntax(false), |t| transformation(t), transformation_initiailzer_after_super_bug_8808, @@ -440,7 +434,6 @@ expect(A.prototype.method()).toBe(2); ); // transformation_arguments test!( - module, syntax(false), |t| transformation(t), transformation_arguments, @@ -539,7 +532,6 @@ expect(calls).toBe(1); // ordering // transformation_initialize_after_super_expression test!( - module, syntax(false), |t| transformation(t), transformation_initialize_after_super_expression, @@ -911,7 +903,6 @@ expect(Object.getOwnPropertyDescriptor(A.prototype, "foo")).toEqual({ ); // transformation_extends test!( - module, syntax(false), |t| transformation(t), transformation_extends, @@ -923,7 +914,6 @@ test!( // finishers // transformation_extends_await test!( - module, syntax(false), |t| transformation(t), transformation_extends_await, @@ -936,7 +926,6 @@ async function g() { ); // transformation_extends_yield test!( - module, syntax(false), |t| transformation(t), transformation_extends_yield, @@ -1103,7 +1092,6 @@ expect(i).toBe(2); ); // transformation_initialize_after_super_bug_8931 test!( - module, syntax(false), |t| transformation(t), transformation_initialize_after_super_bug_8931, @@ -1330,7 +1318,6 @@ expect(Foo.prototype.bar).toBe(value2); ); // transformation_expression test!( - module, syntax(false), |t| transformation(t), transformation_expression, @@ -1367,7 +1354,6 @@ expect(A.method()).toBe(2); // element_descriptors // duplicated_keys_computed_keys_same_ast test!( - module, syntax(false), |t| tr(t), duplicated_keys_computed_keys_same_ast, @@ -1517,7 +1503,6 @@ expect(desc.set()).toBe(2); // misc // transformation_extends_exec test_exec!( - module, syntax(false), |t| tr(t), transformation_extends_exec, @@ -1564,7 +1549,6 @@ expect(() => { ); // duplicated_keys_computed_keys_same_value_exec test_exec!( - module, syntax(false), |t| tr(t), duplicated_keys_computed_keys_same_value_exec, @@ -3898,7 +3882,6 @@ eval: function () { ); test!( - module, ts(), |_| decorators(Default::default()), issue_846_1, diff --git a/crates/swc_ecma_transforms_module/tests/amd.rs b/crates/swc_ecma_transforms_module/tests/amd.rs index 6a4603e4bdb8..674a16c1307e 100644 --- a/crates/swc_ecma_transforms_module/tests/amd.rs +++ b/crates/swc_ecma_transforms_module/tests/amd.rs @@ -5,7 +5,7 @@ use swc_ecma_parser::{Syntax, TsSyntax}; use swc_ecma_transforms_base::{feature::FeatureFlag, resolver}; use swc_ecma_transforms_compat::es2015::for_of; use swc_ecma_transforms_module::amd::{self, amd}; -use swc_ecma_transforms_testing::{test, test_module_fixture}; +use swc_ecma_transforms_testing::{test, test_fixture}; use swc_ecma_transforms_typescript::typescript; use swc_ecma_visit::Fold; @@ -60,7 +60,7 @@ fn esm_to_amd(input: PathBuf) { Err(..) => Default::default(), }; - test_module_fixture( + test_fixture( if is_ts { ts_syntax() } else { syntax() }, &|t| tr(config.clone(), is_ts, t.comments.clone()), &input, @@ -70,7 +70,6 @@ fn esm_to_amd(input: PathBuf) { } test!( - module, syntax(), |t| chain!( for_of(for_of::Config { diff --git a/crates/swc_ecma_transforms_module/tests/common_js.rs b/crates/swc_ecma_transforms_module/tests/common_js.rs index 18fd09107485..6857f9fe44dc 100644 --- a/crates/swc_ecma_transforms_module/tests/common_js.rs +++ b/crates/swc_ecma_transforms_module/tests/common_js.rs @@ -5,7 +5,7 @@ use swc_ecma_parser::{Syntax, TsSyntax}; use swc_ecma_transforms_base::{feature::FeatureFlag, resolver}; use swc_ecma_transforms_compat::es2015::for_of; use swc_ecma_transforms_module::common_js::{self, common_js}; -use swc_ecma_transforms_testing::{test, test_module_fixture, FixtureTestConfig}; +use swc_ecma_transforms_testing::{test, test_fixture, FixtureTestConfig}; use swc_ecma_transforms_typescript::typescript; use swc_ecma_visit::Fold; @@ -52,7 +52,7 @@ fn esm_to_cjs(input: PathBuf) { Err(..) => Default::default(), }; - test_module_fixture( + test_fixture( if is_ts { ts_syntax() } else { syntax() }, &|_| tr(config.clone(), is_ts), &input, @@ -65,7 +65,6 @@ fn esm_to_cjs(input: PathBuf) { } test!( - module, syntax(), |_| chain!( for_of(for_of::Config { diff --git a/crates/swc_ecma_transforms_module/tests/path_node.rs b/crates/swc_ecma_transforms_module/tests/path_node.rs index 5e91c6086fd9..435e648e4ce3 100644 --- a/crates/swc_ecma_transforms_module/tests/path_node.rs +++ b/crates/swc_ecma_transforms_module/tests/path_node.rs @@ -12,7 +12,7 @@ use swc_ecma_transforms_module::{ path::{ImportResolver, NodeImportResolver}, rewriter::import_rewriter, }; -use swc_ecma_transforms_testing::test_module_fixture; +use swc_ecma_transforms_testing::test_fixture; use testing::run_test2; type TestProvider = NodeImportResolver; @@ -43,7 +43,7 @@ fn issue_4730() { let input_dir = dir.join("input"); let output_dir = dir.join("output"); - test_module_fixture( + test_fixture( Syntax::default(), &|_| { let mut paths = IndexMap::new(); @@ -136,7 +136,7 @@ fn fixture(input_dir: PathBuf) { .canonicalize() .unwrap(); dbg!(&base_dir); - test_module_fixture( + test_fixture( Syntax::default(), &|_| { let rules = config.paths.clone().into_iter().collect(); diff --git a/crates/swc_ecma_transforms_module/tests/system_js.rs b/crates/swc_ecma_transforms_module/tests/system_js.rs index 0a3597bc14cf..d07e2c4425dc 100644 --- a/crates/swc_ecma_transforms_module/tests/system_js.rs +++ b/crates/swc_ecma_transforms_module/tests/system_js.rs @@ -6,7 +6,7 @@ use swc_common::{chain, Mark}; use swc_ecma_parser::Syntax; use swc_ecma_transforms_base::resolver; use swc_ecma_transforms_module::system_js::{system_js, Config}; -use swc_ecma_transforms_testing::{test, test_module_fixture, Tester}; +use swc_ecma_transforms_testing::{test, test_fixture, Tester}; use swc_ecma_visit::Fold; fn syntax() -> Syntax { @@ -23,7 +23,6 @@ fn tr(_tester: &mut Tester<'_>, config: Config) -> impl Fold { } test!( - module, syntax(), |tester| tr(tester, Default::default()), allow_continuous_assignment, @@ -31,7 +30,6 @@ test!( ); test!( - module, syntax(), |tester| tr( tester, @@ -45,7 +43,6 @@ test!( ); test!( - module, syntax(), |tester| tr( tester, @@ -63,7 +60,6 @@ test!( ); test!( - module, syntax(), |tester| tr( tester, @@ -86,7 +82,6 @@ test!( ); test!( - module, syntax(), |tester| tr( tester, @@ -104,7 +99,6 @@ test!( ); test!( - module, syntax(), |tester| tr(tester, Default::default()), imports, @@ -123,7 +117,7 @@ fn fixture(input: PathBuf) { let output = dir.join("output.mjs"); - test_module_fixture( + test_fixture( syntax(), &|tester| tr(tester, Default::default()), &input, diff --git a/crates/swc_ecma_transforms_module/tests/umd.rs b/crates/swc_ecma_transforms_module/tests/umd.rs index b56d0f2bde20..0512aa30635f 100644 --- a/crates/swc_ecma_transforms_module/tests/umd.rs +++ b/crates/swc_ecma_transforms_module/tests/umd.rs @@ -4,7 +4,7 @@ use swc_common::{chain, Mark}; use swc_ecma_parser::{Syntax, TsSyntax}; use swc_ecma_transforms_base::{feature::FeatureFlag, resolver}; use swc_ecma_transforms_module::umd::{umd, Config}; -use swc_ecma_transforms_testing::{test_module_fixture, Tester}; +use swc_ecma_transforms_testing::{test_fixture, Tester}; use swc_ecma_transforms_typescript::typescript; use swc_ecma_visit::Fold; @@ -58,7 +58,7 @@ fn esm_to_umd(input: PathBuf) { Err(..) => Default::default(), }; - test_module_fixture( + test_fixture( if is_ts { ts_syntax() } else { syntax() }, &|tester| tr(tester, config.clone(), is_ts), &input, diff --git a/crates/swc_ecma_transforms_optimization/src/inline_globals.rs b/crates/swc_ecma_transforms_optimization/src/inline_globals.rs index 70ed4693d592..8ddd29273162 100644 --- a/crates/swc_ecma_transforms_optimization/src/inline_globals.rs +++ b/crates/swc_ecma_transforms_optimization/src/inline_globals.rs @@ -202,7 +202,7 @@ impl VisitMut for InlineGlobals { #[cfg(test)] mod tests { use swc_ecma_transforms_testing::{test, Tester}; - use swc_ecma_utils::{DropSpan, StmtOrModuleItem}; + use swc_ecma_utils::DropSpan; use super::*; @@ -220,7 +220,7 @@ mod tests { (*v).into() }; - let v = tester + let mut v = tester .apply_transform( as_folder(DropSpan), "global.js", @@ -228,14 +228,9 @@ mod tests { &v, ) .unwrap(); - - let v = match v { - Program::Module(mut m) => m.body.pop().and_then(|x| x.into_stmt().ok()), - Program::Script(mut s) => s.body.pop(), - }; - assert!(v.is_some()); - let v = match v.unwrap() { - Stmt::Expr(ExprStmt { expr, .. }) => *expr, + assert_eq!(v.body.len(), 1); + let v = match v.body.pop().unwrap() { + ModuleItem::Stmt(Stmt::Expr(ExprStmt { expr, .. })) => *expr, _ => unreachable!(), }; diff --git a/crates/swc_ecma_transforms_optimization/src/simplify/inlining/mod.rs b/crates/swc_ecma_transforms_optimization/src/simplify/inlining/mod.rs index 2157c7ae14d6..90341b5f7e43 100644 --- a/crates/swc_ecma_transforms_optimization/src/simplify/inlining/mod.rs +++ b/crates/swc_ecma_transforms_optimization/src/simplify/inlining/mod.rs @@ -468,19 +468,19 @@ impl VisitMut for Inlining<'_> { self.visit_with_child(ScopeKind::Cond, &mut stmt.alt); } - fn visit_mut_program(&mut self, program: &mut Program) { + fn visit_mut_module_items(&mut self, items: &mut Vec) { let _tracing = span!(Level::ERROR, "inlining", pass = self.pass).entered(); let old_phase = self.phase; self.phase = Phase::Analysis; - program.visit_mut_children_with(self); + items.visit_mut_children_with(self); tracing::trace!("Switching to Inlining phase"); // Inline self.phase = Phase::Inlining; - program.visit_mut_children_with(self); + items.visit_mut_children_with(self); self.phase = old_phase; } diff --git a/crates/swc_ecma_transforms_proposal/tests/decorator_evanw.rs b/crates/swc_ecma_transforms_proposal/tests/decorator_evanw.rs index 77f48138ed49..d077a1c645f4 100644 --- a/crates/swc_ecma_transforms_proposal/tests/decorator_evanw.rs +++ b/crates/swc_ecma_transforms_proposal/tests/decorator_evanw.rs @@ -2,7 +2,7 @@ use std::{fs, path::PathBuf}; use swc_ecma_parser::{EsSyntax, Syntax}; use swc_ecma_transforms_proposal::decorator_2022_03::decorator_2022_03; -use swc_ecma_transforms_testing::exec_module_tr; +use swc_ecma_transforms_testing::exec_tr; use swc_ecma_visit::as_folder; const HELPERS: &str = r###" @@ -57,7 +57,7 @@ fn fixture(input: PathBuf) { {code}" ); - exec_module_tr( + exec_tr( &input.file_name().unwrap().to_string_lossy(), Syntax::Es(EsSyntax { decorators: true, diff --git a/crates/swc_ecma_transforms_proposal/tests/decorators.rs b/crates/swc_ecma_transforms_proposal/tests/decorators.rs index bd27fc3d3ba7..fe10f8bbf0b6 100644 --- a/crates/swc_ecma_transforms_proposal/tests/decorators.rs +++ b/crates/swc_ecma_transforms_proposal/tests/decorators.rs @@ -10,7 +10,7 @@ use swc_common::{chain, comments::SingleThreadedComments, Mark}; use swc_ecma_parser::{EsSyntax, Syntax, TsSyntax}; use swc_ecma_transforms_base::{assumptions::Assumptions, resolver}; use swc_ecma_transforms_proposal::{decorator_2022_03::decorator_2022_03, DecoratorVersion}; -use swc_ecma_transforms_testing::{test_module_fixture, FixtureTestConfig}; +use swc_ecma_transforms_testing::{test_fixture, FixtureTestConfig}; use swc_ecma_visit::Fold; fn syntax_default() -> Syntax { @@ -39,7 +39,7 @@ fn exec(input: PathBuf) { fn exec_inner(input: PathBuf) { let code = std::fs::read_to_string(&input).unwrap(); - swc_ecma_transforms_testing::exec_module_tr( + swc_ecma_transforms_testing::exec_tr( "decorator", Syntax::Typescript(TsSyntax { decorators: true, @@ -65,7 +65,7 @@ fn fixture_inner(input: PathBuf) { input.extension().unwrap().to_string_lossy() )); - test_module_fixture( + test_fixture( if input.to_string_lossy().ends_with(".ts") { syntax_default_ts() } else { diff --git a/crates/swc_ecma_transforms_react/src/jsx/tests.rs b/crates/swc_ecma_transforms_react/src/jsx/tests.rs index bcd74b4b2c47..c7461a3eba45 100644 --- a/crates/swc_ecma_transforms_react/src/jsx/tests.rs +++ b/crates/swc_ecma_transforms_react/src/jsx/tests.rs @@ -13,9 +13,7 @@ use swc_ecma_transforms_compat::{ es2015::{arrow, classes}, es3::property_literals, }; -use swc_ecma_transforms_testing::{ - parse_options, test, test_module_fixture, FixtureTestConfig, Tester, -}; +use swc_ecma_transforms_testing::{parse_options, test, test_fixture, FixtureTestConfig, Tester}; use swc_ecma_visit::FoldWith; use testing::NormalizedOutput; @@ -110,7 +108,6 @@ fn integration_tr(t: &mut Tester, mut options: FixtureOptions) -> impl Fold { ) } test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -125,7 +122,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -144,7 +140,6 @@ var bar = function () { ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -169,7 +164,6 @@ var x = ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -185,7 +179,6 @@ Component = React.createClass({ ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -202,7 +195,6 @@ export default React.createClass({ ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -227,7 +219,6 @@ var Bar = React.createClass({ ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -245,7 +236,6 @@ exports = { ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -262,7 +252,6 @@ exports.Component = React.createClass({ ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -279,7 +268,6 @@ var Component = React.createClass({ ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -295,7 +283,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -313,7 +300,6 @@ var profile =
); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -333,7 +319,6 @@ var profile =
); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -358,7 +343,6 @@ var profile =
); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -369,7 +353,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -410,7 +393,6 @@ class App extends React.Component { ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -424,7 +406,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -435,7 +416,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -446,7 +426,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -457,7 +436,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -468,7 +446,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -492,7 +469,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -507,7 +483,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -523,7 +498,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -550,7 +524,6 @@ var x = ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -561,7 +534,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -572,7 +544,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -587,7 +558,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -609,7 +579,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -622,7 +591,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -647,7 +615,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -670,7 +637,6 @@ React.render( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -726,7 +690,6 @@ var x = ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -737,7 +700,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -748,7 +710,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -759,7 +720,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -770,7 +730,6 @@ test!( ); test!( - module, // Comments are currently stripped out ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, @@ -793,7 +752,6 @@ var x = ( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -804,7 +762,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -823,7 +780,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -834,7 +790,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -848,7 +803,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -859,7 +813,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -870,7 +823,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -881,7 +833,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -892,7 +843,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -903,7 +853,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -915,7 +864,6 @@ const b =
test
" ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -931,7 +879,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -943,7 +890,6 @@ test!( // https://github.com/swc-project/swc/issues/517 test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -966,7 +912,6 @@ fn jsx_text() { // https://github.com/swc-project/swc/issues/542 test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -1021,7 +966,6 @@ return ( ); test!( - module, Syntax::Es(EsSyntax { jsx: true, ..Default::default() @@ -1054,7 +998,7 @@ fn fixture(input: PathBuf) { output = input.with_file_name("output.mjs"); } - test_module_fixture( + test_fixture( Syntax::Es(EsSyntax { jsx: true, ..Default::default() @@ -1079,7 +1023,7 @@ fn integration(input: PathBuf) { output = input.with_file_name("output.mjs"); } - test_module_fixture( + test_fixture( Syntax::Es(EsSyntax { jsx: true, ..Default::default() diff --git a/crates/swc_ecma_transforms_react/src/jsx_self/tests.rs b/crates/swc_ecma_transforms_react/src/jsx_self/tests.rs index 1315aecf2a64..ad6b332311af 100644 --- a/crates/swc_ecma_transforms_react/src/jsx_self/tests.rs +++ b/crates/swc_ecma_transforms_react/src/jsx_self/tests.rs @@ -7,7 +7,6 @@ fn tr() -> impl Fold { } test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() diff --git a/crates/swc_ecma_transforms_react/src/jsx_src/tests.rs b/crates/swc_ecma_transforms_react/src/jsx_src/tests.rs index 9523617842f0..f20fa8cb082e 100644 --- a/crates/swc_ecma_transforms_react/src/jsx_src/tests.rs +++ b/crates/swc_ecma_transforms_react/src/jsx_src/tests.rs @@ -35,7 +35,6 @@ expect(actual).toBe(expected); ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() diff --git a/crates/swc_ecma_transforms_react/src/refresh/tests.rs b/crates/swc_ecma_transforms_react/src/refresh/tests.rs index 8d5c63c1d332..f8012a87d33e 100644 --- a/crates/swc_ecma_transforms_react/src/refresh/tests.rs +++ b/crates/swc_ecma_transforms_react/src/refresh/tests.rs @@ -25,7 +25,6 @@ fn tr(t: &mut Tester) -> impl Fold { } test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -44,7 +43,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -70,7 +68,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -92,7 +89,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -109,7 +105,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -124,7 +119,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -146,7 +140,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -167,7 +160,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -194,7 +186,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -218,7 +209,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -229,7 +219,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -250,7 +239,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -265,7 +253,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -280,7 +267,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -297,7 +283,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -316,7 +301,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -352,7 +336,6 @@ test!( // A doesn't get registered because it's not declared locally. // Alias doesn't get registered because its definition is just an identifier. test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -410,7 +393,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -428,7 +410,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -445,7 +426,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -471,7 +451,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -501,7 +480,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -518,7 +496,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -536,7 +513,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -560,7 +536,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Typescript(::swc_ecma_parser::TsSyntax { tsx: true, ..Default::default() @@ -603,7 +578,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -628,7 +602,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Typescript(::swc_ecma_parser::TsSyntax { tsx: true, ..Default::default() @@ -656,7 +629,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -680,7 +652,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -697,7 +668,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -731,7 +701,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Typescript(::swc_ecma_parser::TsSyntax { tsx: true, ..Default::default() @@ -748,7 +717,6 @@ test!( ); test!( - module, Default::default(), tr, next_001, @@ -760,7 +728,6 @@ test!( ); test!( - module, Default::default(), tr, issue_2261, @@ -774,7 +741,6 @@ test!( ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() @@ -793,7 +759,6 @@ const a = (a) => { ); test!( - module, ::swc_ecma_parser::Syntax::Es(::swc_ecma_parser::EsSyntax { jsx: true, ..Default::default() diff --git a/crates/swc_ecma_transforms_testing/src/lib.rs b/crates/swc_ecma_transforms_testing/src/lib.rs index 270df75e429f..9bda5e768e12 100644 --- a/crates/swc_ecma_transforms_testing/src/lib.rs +++ b/crates/swc_ecma_transforms_testing/src/lib.rs @@ -58,19 +58,6 @@ pub struct Tester<'a> { pub comments: Rc, } -/// Used to determine how src for a test should be parsed. -#[derive(Debug, Clone, Copy)] -pub enum SrcType { - /// Parsed using `parse_program`. - Program, - - /// Parsed using `parse_module`. - Module, - - /// Parsed using `parse_script`. - Script, -} - impl<'a> Tester<'a> { pub fn run(op: F) -> Ret where @@ -175,67 +162,42 @@ impl<'a> Tester<'a> { Ok(stmts.pop().unwrap()) } - /// Applies transform using [SrcType] to determine the parsed AST type. - fn apply_transform_with( + pub fn apply_transform( &mut self, mut tr: T, name: &str, syntax: Syntax, src: &str, - src_type: SrcType, - ) -> Result { - let program = - self.with_parser( - name, + ) -> Result { + let fm = self + .cm + .new_source_file(FileName::Real(name.into()).into(), src.into()); + + let module = { + let mut p = Parser::new_from(Lexer::new( syntax, - src, - |parser: &mut Parser| match src_type { - SrcType::Program => parser.parse_program(), - SrcType::Module => parser.parse_module().map(Program::Module), - SrcType::Script => parser.parse_script().map(Program::Script), - }, - )?; - - Ok(program.fold_with(&mut tr)) - } + EsVersion::latest(), + StringInput::from(&*fm), + Some(&self.comments), + )); + let res = p + .parse_module() + .map_err(|e| e.into_diagnostic(self.handler).emit()); + + for e in p.take_errors() { + e.into_diagnostic(self.handler).emit() + } - /// Applies transform, parsing the given src as a [Program]. - pub fn apply_transform( - &mut self, - tr: T, - name: &str, - syntax: Syntax, - src: &str, - ) -> Result { - self.apply_transform_with(tr, name, syntax, src, SrcType::Program) - } + res? + }; - /// Same as [apply_transform][`Self::apply_transform`], but parses the given - /// src as a [Module][Program::Module]. - pub fn apply_module_transform( - &mut self, - tr: T, - name: &str, - syntax: Syntax, - src: &str, - ) -> Result { - self.apply_transform_with(tr, name, syntax, src, SrcType::Module) - } + let module = Program::Module(module).fold_with(&mut tr); - /// Same as [apply_transform][`Self::apply_transform`], but parses the given - /// src as a [Script][Program::Script]. - pub fn apply_script_transform( - &mut self, - tr: T, - name: &str, - syntax: Syntax, - src: &str, - ) -> Result { - self.apply_transform_with(tr, name, syntax, src, SrcType::Script) + Ok(module.expect_module()) } - pub fn print(&mut self, program: &Program, comments: &Rc) -> String { - to_code_default(self.cm.clone(), Some(comments), program) + pub fn print(&mut self, module: &Module, comments: &Rc) -> String { + to_code_default(self.cm.clone(), Some(comments), module) } } @@ -295,8 +257,13 @@ where } #[track_caller] -fn test_transform_with(syntax: Syntax, src_type: SrcType, tr: F, input: &str, expected: &str) -where +pub fn test_transform( + syntax: Syntax, + tr: F, + input: &str, + expected: &str, + _always_ok_if_code_eq: bool, +) where F: FnOnce(&mut Tester) -> P, P: Fold, { @@ -313,7 +280,7 @@ where println!("----- Actual -----"); let tr = make_tr(tr, tester); - let actual = tester.apply_transform_with(tr, "input.js", syntax, input, src_type)?; + let actual = tester.apply_transform(tr, "input.js", syntax, input)?; match ::std::env::var("PRINT_HYGIENE") { Ok(ref s) if s == "1" => { @@ -370,41 +337,6 @@ where }); } -/// Tests transform, parsing input as a [Program]. -#[track_caller] -pub fn test_transform( - syntax: Syntax, - tr: F, - input: &str, - expected: &str, - _always_ok_if_code_eq: bool, -) where - F: FnOnce(&mut Tester) -> P, - P: Fold, -{ - test_transform_with(syntax, SrcType::Program, tr, input, expected) -} - -/// Same as [test_transform], but parses input as a [Module][Program::Module]. -#[track_caller] -pub fn test_module_transform(syntax: Syntax, tr: F, input: &str, expected: &str) -where - F: FnOnce(&mut Tester) -> P, - P: Fold, -{ - test_transform_with(syntax, SrcType::Module, tr, input, expected) -} - -/// Same as [test_transform], but parses input as a [Script][Program::Script]. -#[track_caller] -pub fn test_script_transform(syntax: Syntax, tr: F, input: &str, expected: &str) -where - F: FnOnce(&mut Tester) -> P, - P: Fold, -{ - test_transform_with(syntax, SrcType::Script, tr, input, expected) -} - /// NOT A PUBLIC API. DO NOT USE. #[doc(hidden)] #[track_caller] @@ -418,9 +350,9 @@ where let expected = output; let expected_src = Tester::run(|tester| { - let expected_program = tester.apply_transform(noop(), "expected.js", syntax, expected)?; + let expected_module = tester.apply_transform(noop(), "expected.js", syntax, expected)?; - let expected_src = tester.print(&expected_program, &Default::default()); + let expected_src = tester.print(&expected_module, &Default::default()); println!( "----- {} -----\n{}", @@ -472,14 +404,11 @@ where ); } +/// NOT A PUBLIC API. DO NOT USE. +#[doc(hidden)] #[track_caller] -fn test_inlined_transform_with( - test_name: &str, - syntax: Syntax, - src_type: SrcType, - tr: F, - input: &str, -) where +pub fn test_inlined_transform(test_name: &str, syntax: Syntax, tr: F, input: &str) +where F: FnOnce(&mut Tester) -> P, P: Fold, { @@ -497,7 +426,6 @@ fn test_inlined_transform_with( test_fixture_inner( syntax, - src_type, Box::new(move |tester| Box::new(tr(tester))), input, &snapshot_dir.join(format!("{test_name}.js")), @@ -505,39 +433,6 @@ fn test_inlined_transform_with( ) } -/// NOT A PUBLIC API. DO NOT USE. -#[doc(hidden)] -#[track_caller] -pub fn test_inlined_transform(test_name: &str, syntax: Syntax, tr: F, input: &str) -where - F: FnOnce(&mut Tester) -> P, - P: Fold, -{ - test_inlined_transform_with(test_name, syntax, SrcType::Program, tr, input) -} - -/// NOT A PUBLIC API. DO NOT USE. -#[doc(hidden)] -#[track_caller] -pub fn test_inlined_module_transform(test_name: &str, syntax: Syntax, tr: F, input: &str) -where - F: FnOnce(&mut Tester) -> P, - P: Fold, -{ - test_inlined_transform_with(test_name, syntax, SrcType::Module, tr, input) -} - -/// NOT A PUBLIC API. DO NOT USE. -#[doc(hidden)] -#[track_caller] -pub fn test_inlined_script_transform(test_name: &str, syntax: Syntax, tr: F, input: &str) -where - F: FnOnce(&mut Tester) -> P, - P: Fold, -{ - test_inlined_transform_with(test_name, syntax, SrcType::Script, tr, input) -} - /// NOT A PUBLIC API. DO NOT USE. #[doc(hidden)] #[macro_export] @@ -605,20 +500,6 @@ macro_rules! test { } }; - (module, $syntax:expr, $tr:expr, $test_name:ident, $input:expr) => { - #[test] - fn $test_name() { - $crate::test_inlined_module_transform(stringify!($test_name), $syntax, $tr, $input) - } - }; - - (script, $syntax:expr, $tr:expr, $test_name:ident, $input:expr) => { - #[test] - fn $test_name() { - $crate::test_inlined_script_transform(stringify!($test_name), $syntax, $tr, $input) - } - }; - ($syntax:expr, $tr:expr, $test_name:ident, $input:expr, ok_if_code_eq) => { #[test] fn $test_name() { @@ -637,12 +518,12 @@ where Tester::run(|tester| { let tr = make_tr(tr, tester); - let program = tester.apply_transform(tr, "input.js", syntax, input)?; + let module = tester.apply_transform(tr, "input.js", syntax, input)?; match ::std::env::var("PRINT_HYGIENE") { Ok(ref s) if s == "1" => { let hygiene_src = tester.print( - &program.clone().fold_with(&mut HygieneVisualizer), + &module.clone().fold_with(&mut HygieneVisualizer), &tester.comments.clone(), ); println!("----- Hygiene -----\n{}", hygiene_src); @@ -650,14 +531,14 @@ where _ => {} } - let mut program = program + let mut module = module .fold_with(&mut hygiene::hygiene()) .fold_with(&mut fixer::fixer(Some(&tester.comments))); - let src_without_helpers = tester.print(&program, &tester.comments.clone()); - program = program.fold_with(&mut inject_helpers(Mark::fresh(Mark::root()))); + let src_without_helpers = tester.print(&module, &tester.comments.clone()); + module = module.fold_with(&mut inject_helpers(Mark::fresh(Mark::root()))); - let transformed_src = tester.print(&program, &tester.comments.clone()); + let transformed_src = tester.print(&module, &tester.comments.clone()); println!( "\t>>>>> Orig <<<<<\n{}\n\t>>>>> Code <<<<<\n{}", @@ -676,7 +557,8 @@ where }) } -fn exec_tr_with(syntax: Syntax, src_type: SrcType, tr: F, input: &str) +/// Execute `jest` after transpiling `input` using `tr`. +pub fn exec_tr(_test_name: &str, syntax: Syntax, tr: F, input: &str) where F: FnOnce(&mut Tester<'_>) -> P, P: Fold, @@ -684,7 +566,7 @@ where Tester::run(|tester| { let tr = make_tr(tr, tester); - let program = tester.apply_transform_with( + let module = tester.apply_transform( tr, "input.js", syntax, @@ -694,12 +576,11 @@ where }})", input ), - src_type, )?; match ::std::env::var("PRINT_HYGIENE") { Ok(ref s) if s == "1" => { let hygiene_src = tester.print( - &program.clone().fold_with(&mut HygieneVisualizer), + &module.clone().fold_with(&mut HygieneVisualizer), &tester.comments.clone(), ); println!("----- Hygiene -----\n{}", hygiene_src); @@ -707,14 +588,14 @@ where _ => {} } - let mut program = program + let mut module = module .fold_with(&mut hygiene::hygiene()) .fold_with(&mut fixer::fixer(Some(&tester.comments))); - let src_without_helpers = tester.print(&program, &tester.comments.clone()); - program = program.fold_with(&mut inject_helpers(Mark::fresh(Mark::root()))); + let src_without_helpers = tester.print(&module, &tester.comments.clone()); + module = module.fold_with(&mut inject_helpers(Mark::fresh(Mark::root()))); - let src = tester.print(&program, &tester.comments.clone()); + let src = tester.print(&module, &tester.comments.clone()); println!( "\t>>>>> {} <<<<<\n{}\n\t>>>>> {} <<<<<\n{}", @@ -728,33 +609,6 @@ where }) } -/// Execute `jest` after transpiling `input` using `tr`. -pub fn exec_tr(_test_name: &str, syntax: Syntax, tr: F, input: &str) -where - F: FnOnce(&mut Tester<'_>) -> P, - P: Fold, -{ - exec_tr_with(syntax, SrcType::Program, tr, input) -} - -/// Same as [exec_tr], but parses input as a [Module][Program::Module]. -pub fn exec_module_tr(_test_name: &str, syntax: Syntax, tr: F, input: &str) -where - F: FnOnce(&mut Tester<'_>) -> P, - P: Fold, -{ - exec_tr_with(syntax, SrcType::Module, tr, input) -} - -/// Same as [exec_tr], but parses input as a [Script][Program::Script]. -pub fn exec_script_tr(_test_name: &str, syntax: Syntax, tr: F, input: &str) -where - F: FnOnce(&mut Tester<'_>) -> P, - P: Fold, -{ - exec_tr_with(syntax, SrcType::Script, tr, input) -} - fn calc_hash(s: &str) -> String { let mut hasher = Sha256::new(); hasher.update(s.as_bytes()); @@ -839,12 +693,6 @@ fn stdout_of(code: &str) -> Result { /// Test transformation. #[macro_export] macro_rules! test_exec { - (@check) => { - if ::std::env::var("EXEC").unwrap_or(String::from("")) == "0" { - return; - } - }; - (ignore, $syntax:expr, $tr:expr, $test_name:ident, $input:expr) => { #[test] #[ignore] @@ -856,24 +704,11 @@ macro_rules! test_exec { ($syntax:expr, $tr:expr, $test_name:ident, $input:expr) => { #[test] fn $test_name() { - test_exec!(@check); - $crate::exec_tr(stringify!($test_name), $syntax, $tr, $input) - } - }; - - (module, $syntax:expr, $tr:expr, $test_name:ident, $input:expr) => { - #[test] - fn $test_name() { - test_exec!(@check); - $crate::exec_module_tr(stringify!($test_name), $syntax, $tr, $input) - } - }; + if ::std::env::var("EXEC").unwrap_or(String::from("")) == "0" { + return; + } - (script, $syntax:expr, $tr:expr, $test_name:ident, $input:expr) => { - #[test] - fn $test_name() { - test_exec!(@check); - $crate::exec_script_tr(stringify!($test_name), $syntax, $tr, $input) + $crate::exec_tr(stringify!($test_name), $syntax, $tr, $input) } }; } @@ -983,10 +818,9 @@ pub struct FixtureTestConfig { /// Defaults to false. pub allow_error: bool, } - -fn test_fixture_with

( +/// You can do `UPDATE=1 cargo test` to update fixtures. +pub fn test_fixture

( syntax: Syntax, - src_type: SrcType, tr: &dyn Fn(&mut Tester) -> P, input: &Path, output: &Path, @@ -998,7 +832,6 @@ fn test_fixture_with

( test_fixture_inner( syntax, - src_type, Box::new(|tester| Box::new(tr(tester))), &input, output, @@ -1006,48 +839,8 @@ fn test_fixture_with

( ); } -/// You can do `UPDATE=1 cargo test` to update fixtures. -pub fn test_fixture

( - syntax: Syntax, - tr: &dyn Fn(&mut Tester) -> P, - input: &Path, - output: &Path, - config: FixtureTestConfig, -) where - P: Fold, -{ - test_fixture_with(syntax, SrcType::Program, tr, input, output, config) -} - -/// Same as [test_fixture] but parses input as a [Module][SrcType::Module]. -pub fn test_module_fixture

( - syntax: Syntax, - tr: &dyn Fn(&mut Tester) -> P, - input: &Path, - output: &Path, - config: FixtureTestConfig, -) where - P: Fold, -{ - test_fixture_with(syntax, SrcType::Module, tr, input, output, config) -} - -/// Same as [test_fixture] but parses input as a [Script][SrcType::Script]. -pub fn test_script_fixture

( - syntax: Syntax, - tr: &dyn Fn(&mut Tester) -> P, - input: &Path, - output: &Path, - config: FixtureTestConfig, -) where - P: Fold, -{ - test_fixture_with(syntax, SrcType::Script, tr, input, output, config) -} - fn test_fixture_inner<'a>( syntax: Syntax, - src_type: SrcType, tr: Box Box>, input: &str, output: &Path, @@ -1060,10 +853,9 @@ fn test_fixture_inner<'a>( let expected = expected.unwrap_or_default(); let expected_src = Tester::run(|tester| { - let expected_program = - tester.apply_transform_with(noop(), "expected.js", syntax, &expected, src_type)?; + let expected_module = tester.apply_transform(noop(), "expected.js", syntax, &expected)?; - let expected_src = tester.print(&expected_program, &tester.comments.clone()); + let expected_src = tester.print(&expected_module, &tester.comments.clone()); println!( "----- {} -----\n{}", @@ -1089,7 +881,7 @@ fn test_fixture_inner<'a>( eprintln!("----- {} -----", Color::Green.paint("Actual")); - let actual = tester.apply_transform_with(tr, "input.js", syntax, input, src_type)?; + let actual = tester.apply_transform(tr, "input.js", syntax, input)?; eprintln!("----- {} -----", Color::Green.paint("Comments")); eprintln!("{:?}", tester.comments);