Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion tasks/transform_conformance/snapshots/babel_exec.snap.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ commit: 54a8389f

node: v22.12.0

Passed: 291 of 374 (77.81%)
Passed: 318 of 406 (78.33%)

Failures:

Expand Down Expand Up @@ -181,6 +181,11 @@ ReferenceError: _Foo_brand is not defined
at new Foo (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-assignment-exec.test.js:8:38)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-assignment-exec.test.js:15:9

./fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-async-exec.test.js
ReferenceError: _Cl_brand is not defined
at new Cl (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-async-exec.test.js:8:38)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-async-exec.test.js:17:9

./fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-before-fields-exec.test.js
ReferenceError: _Cl_brand is not defined
at new Cl (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-loose-before-fields-exec.test.js:10:38)
Expand Down Expand Up @@ -220,6 +225,11 @@ ReferenceError: _Foo_brand is not defined
at new Foo (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-assignment-exec.test.js:8:38)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-assignment-exec.test.js:15:9

./fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-async-exec.test.js
ReferenceError: _Cl_brand is not defined
at new Cl (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-async-exec.test.js:8:38)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-async-exec.test.js:17:9

./fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-before-fields-exec.test.js
ReferenceError: _Cl_brand is not defined
at new Cl (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-before-fields-exec.test.js:11:38)
Expand Down Expand Up @@ -250,6 +260,11 @@ ReferenceError: _Sub_brand is not defined
at new Sub (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-super-exec.test.js:16:38)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsProperties-super-exec.test.js:29:9

./fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsSymbols-async-exec.test.js
ReferenceError: _Cl_brand is not defined
at new Cl (./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsSymbols-async-exec.test.js:8:38)
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-method-privateFieldsAsSymbols-async-exec.test.js:17:9

./fixtures/babel/babel-plugin-transform-private-methods-test-fixtures-private-static-method-loose-basic-exec.test.js
TypeError: attempted to use private field on non-instance
at _classPrivateFieldBase (./node_modules/.pnpm/@babel+runtime@7.26.0/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js:2:44)
Expand Down Expand Up @@ -436,6 +451,14 @@ AssertionError: expected true to be false // Object.is equality
AssertionError: expected 2 to be 5 // Object.is equality
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-private-property-in-object-test-fixtures-to-native-fields-static-shadow-exec.test.js:18:25

./fixtures/babel/babel-plugin-transform-react-jsx-source-test-fixtures-react-source-basic-sample-exec.test.js
ReferenceError: transformAsync is not defined
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-react-jsx-source-test-fixtures-react-source-basic-sample-exec.test.js:4:16

./fixtures/babel/babel-plugin-transform-react-jsx-source-test-fixtures-react-source-with-source-exec.test.js
ReferenceError: transformAsync is not defined
at ./tasks/transform_conformance/fixtures/babel/babel-plugin-transform-react-jsx-source-test-fixtures-react-source-with-source-exec.test.js:4:16

./fixtures/babel/babel-preset-env-test-fixtures-plugins-integration-issue-15170-exec.test.js
AssertionError: expected [Function] to not throw an error but 'ReferenceError: x is not defined' was thrown
at Proxy.<anonymous> (./node_modules/.pnpm/@vitest+expect@2.1.2/node_modules/@vitest/expect/dist/index.js:1438:21)
Expand Down
23 changes: 21 additions & 2 deletions tasks/transform_conformance/src/driver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use oxc::{
ast::ast::Program,
codegen::{CodegenOptions, CodegenReturn},
diagnostics::OxcDiagnostic,
parser::ParseOptions,
span::SourceType,
transformer::{TransformOptions, TransformerReturn},
CompilerInterface,
Expand All @@ -12,12 +13,20 @@ use oxc_tasks_transform_checker::check_semantic_after_transform;

pub struct Driver {
check_semantic: bool,
allow_return_outside_function: bool,
options: TransformOptions,
printed: String,
errors: Vec<OxcDiagnostic>,
}

impl CompilerInterface for Driver {
fn parse_options(&self) -> ParseOptions {
ParseOptions {
allow_return_outside_function: self.allow_return_outside_function,
..Default::default()
}
}

fn transform_options(&self) -> Option<&TransformOptions> {
Some(&self.options)
}
Expand Down Expand Up @@ -61,8 +70,18 @@ impl CompilerInterface for Driver {
}

impl Driver {
pub fn new(check_semantic: bool, options: TransformOptions) -> Self {
Self { check_semantic, options, printed: String::new(), errors: vec![] }
pub fn new(
check_semantic: bool,
allow_return_outside_function: bool,
options: TransformOptions,
) -> Self {
Self {
check_semantic,
allow_return_outside_function,
options,
printed: String::new(),
errors: vec![],
}
}

pub fn errors(&mut self) -> Vec<OxcDiagnostic> {
Expand Down
28 changes: 20 additions & 8 deletions tasks/transform_conformance/src/test_case.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,15 @@ impl TestCase {
false
}

fn transform(&self, mode: HelperLoaderMode) -> Result<String, String> {
/// Transform test case source.
///
/// `allow_return_outside_function` is for exec tests which sometimes include `return` at top level.
/// This option is passed to parser to prevent it failing to pass those exec tests.
fn transform(
&self,
mode: HelperLoaderMode,
allow_return_outside_function: bool,
) -> Result<String, String> {
let path = &self.path;
let transform_options = match &self.transform_options {
Ok(transform_options) => transform_options,
Expand All @@ -227,8 +235,11 @@ impl TestCase {
.as_ref()
.and_then(|cwd| path.strip_prefix(cwd).ok().map(|p| Path::new("<CWD>").join(p)))
.unwrap_or(path.clone());
let mut driver =
Driver::new(false, options).execute(&source_text, self.source_type, cwd_path.as_path());
let mut driver = Driver::new(false, allow_return_outside_function, options).execute(
&source_text,
self.source_type,
cwd_path.as_path(),
);
let errors = driver.errors();
if !errors.is_empty() {
let source = NamedSource::new(
Expand Down Expand Up @@ -275,7 +286,7 @@ impl TestCase {
let mut actual_errors = None;
let mut transform_options = None;

match self.transform(HelperLoaderMode::External) {
match self.transform(HelperLoaderMode::External, false) {
Err(error) => {
actual_errors.replace(get_babel_error(&error));
}
Expand Down Expand Up @@ -365,7 +376,7 @@ impl TestCase {
if passed {
if let Some(options) = transform_options {
let mismatch_errors =
Driver::new(/* check transform mismatch */ true, options)
Driver::new(/* check transform mismatch */ true, false, options)
.execute(&input, self.source_type, &self.path)
.errors();
self.errors.extend(mismatch_errors);
Expand All @@ -381,13 +392,14 @@ impl TestCase {
println!("Input:\n{}\n", fs::read_to_string(&self.path).unwrap());
}

let result = match self.transform(HelperLoaderMode::Runtime) {
let result = match self.transform(HelperLoaderMode::Runtime, true) {
Ok(code) => code,
Err(error) => {
if filtered {
println!("Transform Errors:\n{error:?}\n",);
println!("Transform Errors:\n{error:?}\n");
return;
}
return;
"throw new Error('Transform error');".to_string()
}
};
self.write_to_test_files(&result);
Expand Down