feat(transform_conformance): add jsx and ts tests

This commit is contained in:
Boshen 2023-09-18 15:29:34 +08:00
parent 9c259a4ddf
commit 46d2623c1f
No known key found for this signature in database
GPG key ID: 234DA6A7079C6801
10 changed files with 445 additions and 62 deletions

1
Cargo.lock generated
View file

@ -1730,6 +1730,7 @@ dependencies = [
"oxc_span",
"oxc_tasks_common",
"oxc_transformer",
"pico-args",
"walkdir",
]

View file

@ -1,7 +1,7 @@
[workspace]
resolver = "2"
members = ["crates/*", "tasks/*", "editor/vscode/server"]
exclude = ["crates/oxc_minifier", "tasks/minsize"]
exclude = ["crates/oxc_minifier", "tasks/minsize"]
[workspace.package]
authors = ["Boshen <boshenc@gmail.com>", "Oxc contributors"]
@ -23,10 +23,10 @@ oxc_diagnostics = { version = "0.2.0", path = "crates/oxc_diagnostics" }
oxc_formatter = { version = "0.2.0", path = "crates/oxc_formatter" }
oxc_index = { version = "0.2.0", path = "crates/oxc_index" }
# oxc_minifier = { version = "0.2.0", path = "crates/oxc_minifier" }
oxc_parser = { version = "0.2.0", path = "crates/oxc_parser" }
oxc_semantic = { version = "0.2.0", path = "crates/oxc_semantic" }
oxc_span = { version = "0.2.0", path = "crates/oxc_span" }
oxc_syntax = { version = "0.2.0", path = "crates/oxc_syntax" }
oxc_parser = { version = "0.2.0", path = "crates/oxc_parser" }
oxc_semantic = { version = "0.2.0", path = "crates/oxc_semantic" }
oxc_span = { version = "0.2.0", path = "crates/oxc_span" }
oxc_syntax = { version = "0.2.0", path = "crates/oxc_syntax" }
# publish = false
oxc_macros = { path = "crates/oxc_macros" }

View file

@ -13,11 +13,11 @@ rust-version.workspace = true
categories.workspace = true
[dependencies]
oxc_ast = { workspace = true }
oxc_span = { workspace = true }
oxc_allocator = { workspace = true }
oxc_syntax = { workspace = true }
oxc_ast = { workspace = true }
oxc_span = { workspace = true }
oxc_allocator = { workspace = true }
oxc_syntax = { workspace = true }
[dev-dependencies]
oxc_parser = { workspace = true }
oxc_formatter = { workspace = true }
oxc_parser = { workspace = true }
oxc_formatter = { workspace = true }

View file

@ -25,11 +25,11 @@ oxc_linter = { workspace = true }
oxc_formatter = { workspace = true }
oxc_type_synthesis = { workspace = true }
# oxc_minifier = { workspace = true }
oxc_span = { workspace = true }
oxc_query = { workspace = true }
serde_json = { workspace = true }
trustfall = { workspace = true }
serde = { workspace = true }
oxc_span = { workspace = true }
oxc_query = { workspace = true }
serde_json = { workspace = true }
trustfall = { workspace = true }
serde = { workspace = true }
wasm-bindgen = { version = "0.2" }
serde-wasm-bindgen = "0.6.0"

View file

@ -38,9 +38,9 @@ name = "resolver"
harness = false
[dependencies]
oxc_span = { workspace = true }
oxc_allocator = { workspace = true }
oxc_parser = { workspace = true }
oxc_span = { workspace = true }
oxc_allocator = { workspace = true }
oxc_parser = { workspace = true }
# oxc_minifier = { workspace = true }
oxc_tasks_common = { workspace = true }
oxc_semantic = { workspace = true }

View file

@ -18,8 +18,8 @@ oxc_formatter = { workspace = true }
oxc_diagnostics = { workspace = true }
oxc_semantic = { workspace = true }
# oxc_minifier = { workspace = true }
oxc_span = { workspace = true }
oxc_tasks_common= { workspace = true }
oxc_span = { workspace = true }
oxc_tasks_common = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }

View file

@ -11,11 +11,12 @@ license.workspace = true
repository.workspace = true
[dependencies]
oxc_span = { workspace = true }
oxc_allocator = { workspace = true }
oxc_parser = { workspace = true }
oxc_formatter = { workspace = true }
oxc_transformer = { workspace = true }
oxc_span = { workspace = true }
oxc_allocator = { workspace = true }
oxc_parser = { workspace = true }
oxc_formatter = { workspace = true }
oxc_transformer = { workspace = true }
oxc_tasks_common = { workspace = true }
walkdir = { workspace = true }
walkdir = { workspace = true }
pico-args = { workspace = true }

View file

@ -1,4 +1,4 @@
Passed: 43/742
Passed: 88/1099
# babel-plugin-transform-unicode-sets-regex
* Failed: basic/basic/input.js
@ -517,9 +517,14 @@ Passed: 43/742
* Failed: export-namespace/namespace-typescript/input.mjs
# babel-plugin-transform-dynamic-import
* Failed: amd/missing-plugin/input.mjs
* Failed: amd/module/input.mjs
* Failed: amd/no-interop/input.js
* Failed: amd/script/input.js
* Failed: amd/to-string/input.js
* Failed: amd/with-other-import-export/input.mjs
* Failed: commonjs/missing-plugin/input.mjs
* Failed: commonjs/module/input.mjs
* Failed: commonjs/no-interop/input.js
* Failed: commonjs/script/input.js
* Failed: commonjs/shadowed-require/input.js
@ -529,11 +534,6 @@ Passed: 43/742
* Failed: systemjs/module/input.mjs
* Failed: systemjs/script/input.js
* Failed: systemjs/to-string/input.js
* Passed: amd/missing-plugin/input.mjs
* Passed: amd/module/input.mjs
* Passed: amd/with-other-import-export/input.mjs
* Passed: commonjs/missing-plugin/input.mjs
* Passed: commonjs/module/input.mjs
* Passed: missing-module-transform/missing-module-transform/input.js
* Passed: systemjs/missing-plugin/input.mjs
@ -594,16 +594,16 @@ Passed: 43/742
* Failed: general/super-method-call-loose/input.js
* Failed: general/unary/input.js
* Failed: loose/cast-to-boolean/input.js
* Failed: regression/10959-transform-optional-chaining/input.ts
* Failed: regression/10959-transform-ts-and-optional-chaining/input.ts
* Failed: regression/7642/input.js
* Passed: regression/10959-transform-optional-chaining/input.ts
* Failed: transparent-expr-wrappers/ts-as-call-context/input.ts
* Failed: transparent-expr-wrappers/ts-as-call-context-in-if/input.ts
* Failed: transparent-expr-wrappers/ts-as-function-call-loose/input.ts
* Failed: transparent-expr-wrappers/ts-as-in-conditional/input.ts
* Failed: transparent-expr-wrappers/ts-as-member-expression/input.ts
* Failed: transparent-expr-wrappers/ts-parenthesized-expression-member-call/input.ts
* Passed: regression/10959-transform-ts/input.ts
* Passed: regression/10959-transform-ts-and-optional-chaining/input.ts
* Passed: transparent-expr-wrappers/ts-as-call-context/input.ts
* Passed: transparent-expr-wrappers/ts-as-call-context-in-if/input.ts
* Passed: transparent-expr-wrappers/ts-as-function-call-loose/input.ts
* Passed: transparent-expr-wrappers/ts-as-in-conditional/input.ts
* Passed: transparent-expr-wrappers/ts-as-member-expression/input.ts
* Passed: transparent-expr-wrappers/ts-parenthesized-expression-member-call/input.ts
# babel-plugin-transform-optional-catch-binding
[All passed]
@ -700,12 +700,12 @@ Passed: 43/742
* Failed: object-spread-loose-builtins/expression/input.js
* Failed: object-spread-loose-builtins/side-effect/input.js
* Failed: object-spread-loose-builtins/variable-declaration/input.js
* Failed: regression/T7178/input.mjs
* Failed: regression/gh-4904/input.js
* Failed: regression/gh-5151/input.js
* Failed: regression/gh-7304/input.mjs
* Failed: regression/gh-7388/input.js
* Failed: regression/gh-8323/input.js
* Passed: regression/T7178/input.mjs
* Passed: regression/gh-7304/input.mjs
# babel-plugin-transform-unicode-property-regex
* Failed: with-unicode-flag/script-extensions/input.js
@ -766,6 +766,10 @@ Passed: 43/742
* Failed: bluebird-coroutines/expression/input.js
* Failed: bluebird-coroutines/named-expression/input.js
* Failed: bluebird-coroutines/statement/input.js
* Failed: export-async/default-arrow-export/input.mjs
* Failed: export-async/default-export/input.mjs
* Failed: export-async/import-and-export/input.mjs
* Failed: export-async/lone-export/input.mjs
* Failed: regression/4599/input.js
* Failed: regression/4943/input.js
* Failed: regression/7178/input.js
@ -775,10 +779,6 @@ Passed: 43/742
* Failed: regression/gh-6923/input.js
* Failed: regression/in-uncompiled-class-fields/input.js
* Passed: assumption-noNewArrows-false/bluebird/input.js
* Passed: export-async/default-arrow-export/input.mjs
* Passed: export-async/default-export/input.mjs
* Passed: export-async/import-and-export/input.mjs
* Passed: export-async/lone-export/input.mjs
# babel-plugin-transform-exponentiation-operator
* Failed: exponentiation-operator/assignment/input.js
@ -786,3 +786,364 @@ Passed: 43/742
* Failed: regression/4403/input.js
* Passed: exponentiation-operator/binary/input.js
# babel-plugin-transform-typescript
* Failed: class/abstract-class-decorated/input.ts
* Failed: class/abstract-class-decorated-method/input.ts
* Failed: class/abstract-class-decorated-parameter/input.ts
* Failed: class/accessor-allowDeclareFields-false/input.ts
* Failed: class/accessor-allowDeclareFields-true/input.ts
* Failed: class/accessor-allowDeclareFields-true-babel-7/input.ts
* Failed: class/declare/input.ts
* Failed: class/declare-babel-7/input.ts
* Failed: class/decorated-declare-properties/input.ts
* Failed: class/field-not-initialized-babel-7/input.ts
* Failed: class/methods/input.ts
* Failed: class/parameter-properties/input.ts
* Failed: class/parameter-properties-late-super/input.ts
* Failed: class/parameter-properties-with-class/input.ts
* Failed: class/parameter-properties-with-class-and-super/input.ts
* Failed: class/parameter-properties-with-parameters/input.ts
* Failed: class/parameter-properties-with-super/input.ts
* Failed: class/private-method-override/input.ts
* Failed: class/private-method-override-transform-private/input.ts
* Failed: class/properties/input.ts
* Failed: class/properties-babel-7/input.ts
* Failed: class/uninitialized-definite-with-declare-disabled-babel-7/input.ts
* Failed: declarations/erased/input.ts
* Failed: declarations/export-declare-enum/input.ts
* Failed: declarations/nested-namespace/input.mjs
* Failed: enum/boolean-value/input.ts
* Failed: enum/const/input.ts
* Failed: enum/constant-folding/input.ts
* Failed: enum/export/input.ts
* Failed: enum/inferred/input.ts
* Failed: enum/inner-references/input.ts
* Failed: enum/mix-references/input.ts
* Failed: enum/non-foldable-constant/input.ts
* Failed: enum/non-scoped/input.ts
* Failed: enum/outer-references/input.ts
* Failed: enum/scoped/input.ts
* Failed: enum/string-value/input.ts
* Failed: enum/string-value-template/input.ts
* Failed: enum/string-values-computed/input.ts
* Failed: enum/ts5.0-const-foldable/input.ts
* Failed: exports/declare-namespace/input.ts
* Failed: exports/declare-shadowed/input.ts
* Failed: exports/declared-types/input.ts
* Failed: exports/default-function/input.ts
* Failed: exports/export-const-enums/input.ts
* Failed: exports/export-from/input.ts
* Failed: exports/export-type/input.ts
* Failed: exports/export-type-from/input.ts
* Failed: exports/export-type-star-from/input.ts
* Failed: exports/export=-to-cjs/input.ts
* Failed: exports/imported-types/input.ts
* Failed: exports/imported-types-only-remove-type-imports/input.ts
* Failed: exports/interface/input.ts
* Failed: exports/issue-9916-1/input.ts
* Failed: exports/issue-9916-2/input.ts
* Failed: exports/issue-9916-3/input.ts
* Failed: exports/type-only-export-specifier-1/input.ts
* Failed: exports/type-only-export-specifier-2/input.ts
* Failed: exports/type-only-export-specifier-3/input.ts
* Failed: function/overloads/input.ts
* Failed: function/overloads-exports/input.mjs
* Failed: function/this-parameter/input.ts
* Failed: imports/elide-injected/input.ts
* Failed: imports/elide-jsx-pragma-namespace-no/input.ts
* Failed: imports/elide-jsx-pragma-namespace-no-babel-7/input.ts
* Failed: imports/elide-jsx-pragma-no/input.ts
* Failed: imports/elide-jsx-pragma-no-babel-7/input.ts
* Failed: imports/elide-jsx-pragmaFrag-namespace-no/input.ts
* Failed: imports/elide-jsx-pragmaFrag-namespace-no-babel-7/input.ts
* Failed: imports/elide-jsx-pragmaFrag-no/input.ts
* Failed: imports/elide-jsx-pragmaFrag-no-babel-7/input.ts
* Failed: imports/elide-no-import-specifiers/input.ts
* Failed: imports/elide-preact/input.ts
* Failed: imports/elide-preact-no-1/input.ts
* Failed: imports/elide-preact-no-1-babel-7/input.ts
* Failed: imports/elide-preact-no-2/input.ts
* Failed: imports/elide-preact-no-2-babel-7/input.ts
* Failed: imports/elide-react/input.ts
* Failed: imports/elide-react-no-1/input.ts
* Failed: imports/elide-react-no-1-babel-7/input.ts
* Failed: imports/elide-react-no-2/input.ts
* Failed: imports/elide-react-no-2-babel-7/input.ts
* Failed: imports/elide-react-no-3/input.ts
* Failed: imports/elide-react-no-3-babel-7/input.ts
* Failed: imports/elide-type-referenced-in-imports-equal-no/input.ts
* Failed: imports/elide-typeof/input.ts
* Failed: imports/elision/input.ts
* Failed: imports/elision-export-type/input.ts
* Failed: imports/elision-locations/input.ts
* Failed: imports/elision-qualifiedname/input.ts
* Failed: imports/elision-rename/input.ts
* Failed: imports/enum-id/input.ts
* Failed: imports/enum-value/input.ts
* Failed: imports/import-named-type/input.ts
* Failed: imports/import-named-type-default-and-named/input.ts
* Failed: imports/import-removed-exceptions/input.ts
* Failed: imports/import-type/input.ts
* Failed: imports/import-type-func-with-duplicate-name/input.ts
* Failed: imports/import-type-not-removed/input.ts
* Failed: imports/import=-declaration/input.ts
* Failed: imports/import=-module-to-cjs/input.ts
* Failed: imports/only-remove-type-imports/input.ts
* Failed: imports/parameter-decorators/input.ts
* Failed: imports/property-signature/input.ts
* Failed: imports/type-only-export-specifier-1/input.ts
* Failed: imports/type-only-export-specifier-2/input.ts
* Failed: imports/type-only-import-specifier-1/input.ts
* Failed: imports/type-only-import-specifier-2/input.ts
* Failed: imports/type-only-import-specifier-3/input.ts
* Failed: imports/type-only-import-specifier-4/input.ts
* Failed: namespace/alias/input.ts
* Failed: namespace/canonical/input.ts
* Failed: namespace/clobber-class/input.ts
* Failed: namespace/clobber-enum/input.ts
* Failed: namespace/clobber-export/input.ts
* Failed: namespace/clobber-import/input.ts
* Failed: namespace/contentious-names/input.ts
* Failed: namespace/declare/input.ts
* Failed: namespace/declare-global-nested-namespace/input.ts
* Failed: namespace/export/input.ts
* Failed: namespace/module-nested/input.ts
* Failed: namespace/module-nested-export/input.ts
* Failed: namespace/multiple/input.ts
* Failed: namespace/namespace-nested-module/input.ts
* Failed: namespace/nested/input.ts
* Failed: namespace/nested-destructuring/input.ts
* Failed: namespace/nested-shorthand/input.ts
* Failed: namespace/same-name/input.ts
* Failed: namespace/undeclared/input.ts
* Failed: optimize-const-enums/custom-values/input.ts
* Failed: optimize-const-enums/custom-values-exported/input.ts
* Failed: optimize-const-enums/declare/input.ts
* Failed: optimize-const-enums/export-const-enum/input.ts
* Failed: optimize-const-enums/export-const-enum-type-and-value/input.ts
* Failed: optimize-const-enums/export-const-enum-type-no-deopt/input.ts
* Failed: optimize-const-enums/exported/input.ts
* Failed: optimize-const-enums/local/input.ts
* Failed: optimize-const-enums/local-shadowed/input.ts
* Failed: optimize-const-enums/merged/input.ts
* Failed: optimize-const-enums/merged-exported/input.ts
* Failed: regression/10162/input.ts
* Failed: regression/10338/input.ts
* Failed: regression/11061/input.mjs
* Failed: type-arguments/tsx/input.ts
* Failed: type-arguments/tsx-babel-7/input.ts
* Failed: variable-declaration/non-null-in-optional-chain/input.ts
* Failed: variable-declaration/types-erased/input.ts
* Passed: cast/as-expression/input.ts
* Passed: cast/multiple-assert-and-assign/input.ts
* Passed: cast/non-null-assertion/input.ts
* Passed: cast/type-assertion/input.ts
* Passed: catch-clause/param-type/input.ts
* Passed: class/abstract-allowDeclareFields-false/input.ts
* Passed: class/abstract-allowDeclareFields-true/input.ts
* Passed: class/declare-not-enabled-babel-7/input.ts
* Passed: class/export-default-abstract/input.ts
* Passed: class/field-not-initialized/input.ts
* Passed: class/head/input.ts
* Passed: class/index-signature/input.ts
* Passed: class/override/input.ts
* Passed: class/transform-properties-declare-wrong-order/input.ts
* Passed: class/uninitialized-definite/input.ts
* Passed: class/uninitialized-definite-babel-7/input.ts
* Passed: declarations/const-enum/input.ts
* Passed: exports/default-literal/input.ts
* Passed: exports/export-context-variables/input.ts
* Passed: exports/export-globals/input.ts
* Passed: exports/export=/input.ts
* Passed: exports/simple/input.ts
* Passed: function/parameters/input.ts
* Passed: function/tuple-parameter/input.ts
* Passed: imports/import=-module/input.ts
* Passed: lvalues/as-expression/input.ts
* Passed: lvalues/non-null/input.ts
* Passed: lvalues/type-assertion/input.ts
* Passed: namespace/ambient-module-nested/input.ts
* Passed: namespace/ambient-module-nested-exported/input.ts
* Passed: namespace/mutable-fail/input.ts
* Passed: namespace/namespace-flag/input.ts
* Passed: type-arguments/call/input.ts
* Passed: type-arguments/expr/input.ts
* Passed: type-arguments/new/input.ts
* Passed: type-arguments/optional-call/input.ts
* Passed: type-arguments/tagged-template/input.ts
* Passed: variable-declaration/exclamation/input.ts
# babel-plugin-transform-react-jsx
* Failed: autoImport/after-polyfills/input.mjs
* Failed: autoImport/after-polyfills-2/input.mjs
* Failed: autoImport/after-polyfills-compiled-to-cjs/input.mjs
* Failed: autoImport/after-polyfills-script-not-supported/input.js
* Failed: autoImport/auto-import-react-source-type-module/input.js
* Failed: autoImport/auto-import-react-source-type-script/input.js
* Failed: autoImport/complicated-scope-module/input.js
* Failed: autoImport/complicated-scope-script/input.js
* Failed: autoImport/import-source/input.js
* Failed: autoImport/import-source-pragma/input.js
* Failed: autoImport/react-defined/input.js
* Failed: pure/false-default-pragma-automatic-runtime/input.js
* Failed: pure/false-default-pragma-classic-runtime/input.js
* Failed: pure/false-pragma-comment-classic-runtime/input.js
* Failed: pure/false-pragma-option-classic-runtime/input.js
* Failed: pure/true-default-pragma-automatic-runtime/input.js
* Failed: pure/true-default-pragma-classic-runtime/input.js
* Failed: pure/true-pragma-comment-classic-runtime/input.js
* Failed: pure/true-pragma-option-classic-runtime/input.js
* Failed: pure/unset-default-pragma-automatic-runtime/input.js
* Failed: pure/unset-default-pragma-classic-runtime/input.js
* Failed: pure/unset-pragma-comment-classic-runtime/input.js
* Failed: pure/unset-pragma-option-classic-runtime/input.js
* Failed: react/adds-appropriate-newlines-when-using-spread-attribute/input.js
* Failed: react/adds-appropriate-newlines-when-using-spread-attribute-babel-7/input.js
* Failed: react/arrow-functions/input.js
* Failed: react/assignment/input.js
* Failed: react/assignment-babel-7/input.js
* Failed: react/avoids-spread-babel-7/input.js
* Failed: react/concatenates-adjacent-string-literals/input.js
* Failed: react/does-not-add-source-self/input.mjs
* Failed: react/does-not-add-source-self-babel-7/input.mjs
* Failed: react/dont-coerce-expression-containers/input.js
* Failed: react/duplicate-props/input.js
* Failed: react/flattens-spread/input.js
* Failed: react/handle-spread-with-proto/input.js
* Failed: react/handle-spread-with-proto-babel-7/input.js
* Failed: react/honor-custom-jsx-comment/input.js
* Failed: react/honor-custom-jsx-comment-if-jsx-pragma-option-set/input.js
* Failed: react/honor-custom-jsx-pragma-option/input.js
* Failed: react/jsx-with-retainlines-option/input.js
* Failed: react/jsx-without-retainlines-option/input.js
* Failed: react/optimisation.react.constant-elements/input.js
* Failed: react/pragma-works-with-no-space-at-the-end/input.js
* Failed: react/proto-in-jsx-attribute/input.js
* Failed: react/should-add-quotes-es3/input.js
* Failed: react/should-allow-constructor-as-prop/input.js
* Failed: react/should-allow-deeper-js-namespacing/input.js
* Failed: react/should-allow-elements-as-attributes/input.js
* Failed: react/should-allow-js-namespacing/input.js
* Failed: react/should-allow-jsx-docs-comment-with-pragma/input.js
* Failed: react/should-allow-nested-fragments/input.js
* Failed: react/should-allow-no-pragmafrag-if-frag-unused/input.js
* Failed: react/should-allow-pragmafrag-and-frag/input.js
* Failed: react/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js
* Failed: react/should-convert-simple-tags/input.js
* Failed: react/should-convert-simple-text/input.js
* Failed: react/should-escape-xhtml-jsxattribute/input.js
* Failed: react/should-escape-xhtml-jsxattribute-babel-7/input.js
* Failed: react/should-escape-xhtml-jsxtext/input.js
* Failed: react/should-escape-xhtml-jsxtext-babel-7/input.js
* Failed: react/should-handle-attributed-elements/input.js
* Failed: react/should-handle-has-own-property-correctly/input.js
* Failed: react/should-have-correct-comma-in-nested-children/input.js
* Failed: react/should-insert-commas-after-expressions-before-whitespace/input.js
* Failed: react/should-not-add-quotes-to-identifier-names/input.js
* Failed: react/should-not-allow-jsx-pragma-to-be-anywhere-in-comment/input.js
* Failed: react/should-not-mangle-expressioncontainer-attribute-values/input.js
* Failed: react/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js
* Failed: react/should-not-strip-tags-with-a-single-child-of-nbsp/input.js
* Failed: react/should-properly-handle-comments-between-props/input.js
* Failed: react/should-quote-jsx-attributes/input.js
* Failed: react/should-support-xml-namespaces-if-flag/input.js
* Failed: react/should-transform-known-hyphenated-tags/input.js
* Failed: react/this-tag-name/input.js
* Failed: react/weird-symbols/input.js
* Failed: react/wraps-props-in-react-spread-for-first-spread-attributes/input.js
* Failed: react/wraps-props-in-react-spread-for-first-spread-attributes-babel-7/input.js
* Failed: react/wraps-props-in-react-spread-for-last-spread-attributes/input.js
* Failed: react/wraps-props-in-react-spread-for-last-spread-attributes-babel-7/input.js
* Failed: react/wraps-props-in-react-spread-for-middle-spread-attributes/input.js
* Failed: react/wraps-props-in-react-spread-for-middle-spread-attributes-babel-7/input.js
* Failed: react-automatic/adds-appropriate-newlines-when-using-spread-attribute/input.js
* Failed: react-automatic/arrow-functions/input.js
* Failed: react-automatic/assignment/input.js
* Failed: react-automatic/concatenates-adjacent-string-literals/input.js
* Failed: react-automatic/does-not-add-source-self-automatic/input.mjs
* Failed: react-automatic/dont-coerce-expression-containers/input.js
* Failed: react-automatic/duplicate-props/input.js
* Failed: react-automatic/flattens-spread/input.js
* Failed: react-automatic/handle-fragments/input.js
* Failed: react-automatic/handle-fragments-with-key/input.js
* Failed: react-automatic/handle-fragments-with-no-children/input.js
* Failed: react-automatic/handle-nonstatic-children/input.js
* Failed: react-automatic/handle-spread-with-proto/input.js
* Failed: react-automatic/handle-static-children/input.js
* Failed: react-automatic/jsx-with-retainlines-option/input.js
* Failed: react-automatic/jsx-without-retainlines-option/input.js
* Failed: react-automatic/key-undefined-works/input.js
* Failed: react-automatic/optimisation.react.constant-elements/input.js
* Failed: react-automatic/pragma-works-with-no-space-at-the-end/input.js
* Failed: react-automatic/should-add-quotes-es3/input.js
* Failed: react-automatic/should-allow-constructor-as-prop/input.js
* Failed: react-automatic/should-allow-deeper-js-namespacing/input.js
* Failed: react-automatic/should-allow-elements-as-attributes/input.js
* Failed: react-automatic/should-allow-js-namespacing/input.js
* Failed: react-automatic/should-allow-nested-fragments/input.js
* Failed: react-automatic/should-avoid-wrapping-in-extra-parens-if-not-needed/input.js
* Failed: react-automatic/should-convert-simple-tags/input.js
* Failed: react-automatic/should-convert-simple-text/input.js
* Failed: react-automatic/should-escape-xhtml-jsxattribute/input.js
* Failed: react-automatic/should-escape-xhtml-jsxattribute-babel-7/input.js
* Failed: react-automatic/should-escape-xhtml-jsxtext/input.js
* Failed: react-automatic/should-escape-xhtml-jsxtext-babel-7/input.js
* Failed: react-automatic/should-handle-attributed-elements/input.js
* Failed: react-automatic/should-handle-has-own-property-correctly/input.js
* Failed: react-automatic/should-have-correct-comma-in-nested-children/input.js
* Failed: react-automatic/should-insert-commas-after-expressions-before-whitespace/input.js
* Failed: react-automatic/should-not-add-quotes-to-identifier-names/input.js
* Failed: react-automatic/should-not-mangle-expressioncontainer-attribute-values/input.js
* Failed: react-automatic/should-not-strip-nbsp-even-coupled-with-other-whitespace/input.js
* Failed: react-automatic/should-not-strip-tags-with-a-single-child-of-nbsp/input.js
* Failed: react-automatic/should-properly-handle-comments-between-props/input.js
* Failed: react-automatic/should-properly-handle-keys/input.js
* Failed: react-automatic/should-properly-handle-null-prop-spread/input.js
* Failed: react-automatic/should-quote-jsx-attributes/input.js
* Failed: react-automatic/should-support-xml-namespaces-if-flag/input.js
* Failed: react-automatic/should-transform-known-hyphenated-tags/input.js
* Failed: react-automatic/should-use-createElement-when-key-comes-after-spread/input.js
* Failed: react-automatic/should-use-jsx-when-key-comes-before-spread/input.js
* Failed: react-automatic/this-tag-name/input.js
* Failed: react-automatic/weird-symbols/input.js
* Failed: react-automatic/wraps-props-in-react-spread-for-last-spread-attributes/input.js
* Failed: react-automatic/wraps-props-in-react-spread-for-middle-spread-attributes/input.js
* Failed: regression/issue-12478-automatic/input.js
* Failed: regression/issue-12478-classic/input.js
* Failed: regression/issue-15353-classic/input.js
* Failed: regression/pragma-frag-set-default-classic-runtime/input.js
* Failed: runtime/classic/input.js
* Failed: runtime/defaults-to-automatic/input.js
* Failed: runtime/defaults-to-classis-babel-7/input.js
* Failed: runtime/pragma-runtime-classsic/input.js
* Failed: runtime/runtime-automatic/input.js
* Failed: sourcemaps/JSXText/input.js
* Failed: spread-transform/transform-to-babel-extend/input.js
* Failed: spread-transform/transform-to-object-assign/input.js
* Passed: autoImport/no-jsx/input.js
* Passed: pure/false-pragma-comment-automatic-runtime/input.js
* Passed: pure/false-pragma-option-automatic-runtime/input.js
* Passed: pure/true-pragma-comment-automatic-runtime/input.js
* Passed: pure/true-pragma-option-automatic-runtime/input.js
* Passed: pure/unset-pragma-comment-automatic-runtime/input.js
* Passed: pure/unset-pragma-option-automatic-runtime/input.js
* Passed: react/.should-properly-handle-comments-adjacent-to-children/input.js
* Passed: react/should-disallow-spread-children/input.js
* Passed: react/should-disallow-valueless-key/input.js
* Passed: react/should-disallow-xml-namespacing/input.js
* Passed: react/should-throw-error-namespaces-if-not-flag/input.js
* Passed: react/should-warn-when-importSource-is-set/input.js
* Passed: react/should-warn-when-importSource-pragma-is-set/input.js
* Passed: react-automatic/.should-properly-handle-comments-adjacent-to-children/input.js
* Passed: react-automatic/should-disallow-spread-children/input.js
* Passed: react-automatic/should-disallow-valueless-key/input.js
* Passed: react-automatic/should-disallow-xml-namespacing/input.js
* Passed: react-automatic/should-throw-error-namespaces-if-not-flag/input.js
* Passed: react-automatic/should-throw-when-filter-is-specified/input.js
* Passed: react-automatic/should-warn-when-pragma-or-pragmaFrag-is-set/input.js
* Passed: removed-options/invalid-use-builtins-false/input.js
* Passed: removed-options/invalid-use-builtins-true/input.js
* Passed: removed-options/invalid-use-spread-false/input.js
* Passed: removed-options/invalid-use-spread-true/input.js
* Passed: runtime/invalid-runtime/input.js

View file

@ -12,8 +12,12 @@ use oxc_span::{SourceType, VALID_EXTENSIONS};
use oxc_tasks_common::{normalize_path, project_root};
use oxc_transformer::{TransformOptions, TransformTarget, Transformer};
pub struct BabelOptions {
pub filter: Option<String>,
}
/// # Panics
pub fn babel() {
pub fn babel(options: &BabelOptions) {
let root = project_root().join("tasks/coverage/babel/packages");
let cases = [
@ -50,6 +54,10 @@ pub fn babel() {
"babel-plugin-transform-async-to-generator",
// ES2016
"babel-plugin-transform-exponentiation-operator",
// TypeScript
"babel-plugin-transform-typescript",
// React
"babel-plugin-transform-react-jsx",
];
let mut snapshot = String::new();
@ -75,7 +83,7 @@ pub fn babel() {
// Run the test
let (passed, failed): (Vec<PathBuf>, Vec<PathBuf>) =
paths.into_iter().partition(|path| babel_test(path));
paths.into_iter().partition(|path| babel_test(path, options));
all_passed += passed.len();
// Snapshot
@ -104,17 +112,25 @@ pub fn babel() {
file.write_all(snapshot.as_bytes()).unwrap();
}
fn babel_test(input_path: &Path) -> bool {
let extension = input_path.extension().unwrap().to_str().unwrap();
let output_path = input_path.parent().unwrap().join(format!("output.{extension}"));
fn babel_test(input_path: &Path, options: &BabelOptions) -> bool {
let output_path = input_path.parent().unwrap().read_dir().unwrap().find_map(|entry| {
let path = entry.ok()?.path();
let file_stem = path.file_stem()?;
(file_stem == "output").then_some(path)
});
let source_text = fs::read_to_string(input_path).unwrap();
let filtered =
options.filter.as_ref().is_some_and(|f| input_path.to_string_lossy().as_ref().contains(f));
let expected = fs::read_to_string(output_path).ok();
if filtered {
println!("{input_path:?}");
}
let allocator = Allocator::default();
let source_type = SourceType::from_path(input_path).unwrap();
let ret = Parser::new(&allocator, &source_text, source_type).parse();
let expected = output_path.and_then(|path| fs::read_to_string(path).ok());
if let Some(expected) = &expected {
let transform_options = TransformOptions { target: TransformTarget::ES2015 };
let program = allocator.alloc(ret.program);
@ -122,13 +138,12 @@ fn babel_test(input_path: &Path) -> bool {
let formatter_options = FormatterOptions::default();
let transformed = Formatter::new(source_text.len(), formatter_options).build(program);
// if !passed {
// println!("{input_path:?}");
// println!("Transformed:\n");
// println!("{transformed}");
// println!("Expected:\n");
// println!("{expected}");
// }
if filtered {
println!("Expected:\n");
println!("{expected:?}\n");
println!("Transformed:\n");
println!("{transformed}");
}
return remove_whitespace(&transformed) == remove_whitespace(expected);
}

View file

@ -1,5 +1,10 @@
use oxc_transform_conformance::babel;
use oxc_transform_conformance::{babel, BabelOptions};
use pico_args::Arguments;
fn main() {
babel();
let mut args = Arguments::from_env();
let options = BabelOptions { filter: args.opt_value_from_str("--filter").unwrap() };
babel(&options);
}