Skip to content

Tracking: all skipped esbuild and rollup tests #8688

@Boshen

Description

@Boshen

This issue tracks all currently skipped/ignored esbuild and rollup compatibility tests, categorized by whether the fix belongs in rolldown or oxc.

Legend: 🔵 = rolldown, 🟠 = oxc

2026-05-19 sync with reasons.ts: removed 15 enum-related tests (previously listed under "🟠 oxc — Enum inlining") that have graduated out of notSupportedReasons and now pass. Removed default/legal_comments_inline from the Failed table — closed by #7387 and graduated out of failedReasons. Moved ts/ts_print_non_finite_number_inside_with from "Enum inlining" to the Failed table (its actual reasons.ts category; the entry was misclassified). Totals updated.

esbuild tests

Source: scripts/src/esbuild-tests/reasons.ts

Failed tests (24) — tests that run but produce sub-optimal output
Test Owner Reason
dce/dce_of_iife 🟠 oxc oxc-project/oxc#17480 — IIFEs not unwrapped
dce/tree_shaking_lowered_class_static_field 🔵 rolldown sub optimal: REMOVE_ME class can be removed
dce/tree_shaking_react_elements 🔵 rolldown sub optimal: React.Fragment should be removed
dce/tree_shaking_unary_operators 🔵 rolldown rejected due to #7009
default/comment_preservation_preserve_jsx 🟠 oxc comments not kept properly (oxc_codegen)
default/comment_preservation_transform_jsx 🟠 oxc comments not kept properly (oxc_codegen)
default/comment_preservation 🔵 rolldown with statement rejected due to #7009
default/direct_eval_tainting_no_bundle 🔵 rolldown rejected due to #7009
default/export_forms_with_minify_identifiers_and_no_bundle 🔵 rolldown sub optimal: should not generate duplicate export binding
default/external_es6_converted_to_common_js 🔵 rolldown sub optimal: redundant import statements
default/false_require 🔵 rolldown should rename require when it appears in param position
default/jsx_dev_self_edge_cases 🟠 oxc oxc-project/oxc#16654
default/mangle_props_import_export 🔵 rolldown sub optimal: no ModePassThrough
default/no_warn_common_js_exports_in_esm_pass_through 🔵 rolldown sub optimal: no pass through mode
default/top_level_await_allowed_import_with_splitting 🔵 rolldown sub optimal: empty chunks should be removed
loader/jsx_preserve_capital_letter_minify 🟠 oxc oxc minifier does not support JSX (oxc-project/oxc#13248)
loader/jsx_preserve_capital_letter_minify_nested 🟠 oxc oxc minifier does not support JSX (oxc-project/oxc#13248)
loader/loader_data_url_base64_invalid_utf8 🔵 rolldown mime type should be data:text/plain
loader/loader_file_one_source_two_different_output_paths_css 🔵 rolldown wrong output when css as entry and has shared css
packagejson/common_js_variable_in_esm_type_module 🔵 rolldown sub optimal: redundant __commonJS wrapper
packagejson/package_json_browser_issue2002_b 🟠 oxc sub is not resolved (oxc_resolver browser field)
packagejson/package_json_disabled_type_module_issue3367 🔵 rolldown ignored module debug name seems not correct
ts/ts_export_default_type_issue316 🔵 rolldown related to #3048
ts/ts_print_non_finite_number_inside_with 🔵 rolldown with statement rejected due to #7009
Not supported tests (65) — features not yet implemented

🟠 oxc — Mangle props (8)

  • default/mangle_props_jsx_transform_namespace
  • default/mangle_props_type_script_features
  • ts/ts_experimental_decorators_mangle_props_assign_semantics
  • ts/ts_experimental_decorators_mangle_props_define_semantics
  • ts/ts_experimental_decorators_mangle_props_methods
  • ts/ts_experimental_decorators_mangle_props_static_assign_semantics
  • ts/ts_experimental_decorators_mangle_props_static_define_semantics
  • ts/ts_experimental_decorators_mangle_props_static_methods

🟠 oxc — Label mangling (1)

  • default/minify_nested_labels_no_bundle

🟠 oxc — verbatimModuleSyntax (1)

  • ts/export_type_issue379verbatimModuleSyntax=false not supported in oxc_transformer

🔵 rolldown — Legal comments (14)

  • default/legal_comments_avoid_slash_tag_end_of_file
  • default/legal_comments_avoid_slash_tag_external
  • default/legal_comments_avoid_slash_tag_inline
  • default/legal_comments_end_of_file
  • default/legal_comments_escape_slash_script_and_style_end_of_file
  • default/legal_comments_escape_slash_script_and_style_external
  • default/legal_comments_external
  • default/legal_comments_linked
  • default/legal_comments_many_end_of_file
  • default/legal_comments_many_linked
  • default/legal_comments_no_escape_slash_script_end_of_file
  • default/legal_comments_no_escape_slash_style_end_of_file
  • default/legal_comments_none

🔵 rolldown — Copy loader (14)

  • default/metafile_various_cases
  • default/metafile_very_long_external_paths
  • loader/loader_bundle_with_unknown_import_attributes_and_copy_loader
  • loader/loader_copy_entry_point_advanced
  • loader/loader_copy_explicit_output_file
  • loader/loader_copy_starts_with_dot_abs_path
  • loader/loader_copy_starts_with_dot_rel_path
  • loader/loader_copy_use_index
  • loader/loader_copy_with_bundle_entry_point
  • loader/loader_copy_with_bundle_from_css
  • loader/loader_copy_with_bundle_from_js
  • loader/loader_copy_with_format
  • loader/loader_copy_with_injected_file_bundle
  • loader/loader_copy_with_transform

🔵 rolldown — Empty/extensionless loader (2)

  • loader/empty_loader_css
  • loader/extensionless_loader_css

🔵 rolldown — Glob (10)

  • glob/glob_basic_no_splitting
  • glob/glob_basic_splitting
  • glob/glob_entry_point_abs_path
  • glob/glob_no_matches
  • glob/glob_wildcard_no_slash
  • glob/glob_wildcard_slash
  • glob/ts_glob_basic_no_splitting
  • glob/ts_glob_basic_splitting
  • default/require_and_dynamic_import_invalid_template
  • loader/with_type_bytes_override_loader_glob

🔵 rolldown — publicPath (4)

  • loader/loader_file_public_path_js
  • loader/loader_file_public_path_css
  • loader/loader_file_public_path_asset_names_js
  • loader/loader_file_public_path_asset_names_css

🔵 rolldown — File reference URL difference (4)

  • loader/loader_file_relative_path_asset_names_css
  • loader/loader_file_relative_path_asset_names_js
  • loader/loader_file_relative_path_css
  • loader/loader_file_relative_path_js

🔵 rolldown — Import attributes (9)

  • default/comment_preservation_import_assertions
  • default/metafile_import_with_type_json
  • default/output_for_assert_type_json
  • loader/loader_bundle_with_import_attributes
  • loader/loader_bundle_with_unknown_import_attributes_and_js_loader
  • loader/with_bad_attribute
  • loader/with_bad_type
  • loader/with_type_bytes_override_loader
  • loader/with_type_json_override_loader

🔵 rolldown — Other (4)

  • default/conditional_require_resolve — converting conditional require.resolve not supported
  • default/require_shim_substitution — require second argument not supported
  • dce/dead_code_inside_unused_cases — dce inside unused switch cases not supported
  • default/import_with_hash_parameter / default/import_with_query_parameter / loader/loader_file_with_query_parameter / loader/loader_from_extension_with_query_parameter — stripping hash/query parameters not supported
Ignored tests (39) — intentional behavior differences or test infra limitations

🔵 rolldown — Test infra limitations (5)

  • default/import_abs_path_as_dir
  • default/import_abs_path_as_file
  • default/entry_names_non_portable_character
  • loader/loader_inline_source_map_absolute_path_issue4075_unix
  • loader/loader_inline_source_map_absolute_path_issue4075_windows

🔵 rolldown — Intentional: hacky esbuild behavior (3)

  • dce/package_json_side_effects_array_keep_main_implicit_main
  • dce/package_json_side_effects_array_keep_module_implicit_main
  • dce/package_json_side_effects_array_keep_module_use_main

🔵 rolldown — Compiler hints spec (1)

  • dce/remove_unused_no_side_effects_tagged_templates

🔵 rolldown — ES5 target not supported (2)

  • default/define_import_meta_es5
  • loader/loader_json_prototype_es5

🔵 rolldown — Resolve alias behavior difference (3)

  • default/package_alias_match_longest
  • default/package_alias
  • default/warnings_inside_node_modules

🟠 oxc — Extension resolution difference (2) — oxc_resolver prefers .js over .ts in node_modules

  • ts/ts_import_in_node_modules_name_collision_with_css
  • ts/ts_prefer_js_over_ts_inside_node_modules

🔵 rolldown — Inject feature aligned with @rollup/plugin-inject (5)

  • default/inject_duplicate
  • default/inject_import_order
  • default/inject_import_ts
  • default/inject_with_string_export_name_bundle
  • default/inject_with_string_export_name_no_bundle

🔵 rolldown — Multi-pass transformer architecture limitation (3)

  • default/inject_jsx
  • default/jsx_import_meta_property
  • default/jsx_import_meta_value

🟠 oxc — Covered by minifier (1)

  • default/quoted_property_mangle

🔵 rolldown — Irrelevant/will not support (4)

  • default/entry_names_no_slash_after_dir — no [dir] placeholder
  • default/error_message_crash_stdin_issue2913 — stdin not supported
  • default/line_limit_minified — lineLimit will not be supported
  • default/line_limit_not_minified — lineLimit will not be supported

🔵 rolldown — CSS bundling not supported (10)#4271

  • dce/tree_shaking_js_with_associated_css (+ 6 variants)
  • default/entry_names_chunk_names_ext_placeholder
  • default/legal_comments_modify_indent
  • default/metafile_no_bundle
  • loader/loader_data_url_text_css

Rollup tests

Ignored tests (100) — behavior differences (excluding 37 ported tests)

Source: packages/rollup-tests/src/ignored-tests.js

🔵 rolldown — Build timing difference (3) — rolldown builds on bundle.generate/write vs rollup()

  • rollup@hooks@supports buildStart and buildEnd hooks
  • rollup@hooks@supports warnings in buildStart and buildEnd hooks
  • rollup@hooks@passes errors to the buildEnd hook

🔵 rolldown — import.meta.url polyfill difference (5)

  • rollup@function@import-meta-url-b
  • rollup@form@import-meta-url
  • rollup@form@resolve-import-meta-url-export
  • rollup@form@resolve-import-meta-url
  • rollup@function@import-meta-url-with-compact

🔵 rolldown — Module type guessing difference (3)

  • rollup@function@non-js-extensions
  • rollup@function@error-parse-unknown-extension
  • rollup@function@error-parse-json

🔵 rolldown — Bundle assignment not supported (8)

  • rollup@function@error-file-name-absolute-path
  • rollup@function@error-file-name-deep-traversal
  • rollup@function@error-file-name-dot-dot
  • rollup@function@error-file-name-escaped-via-filename-property
  • rollup@function@error-file-name-path-traversal-plugin
  • rollup@function@error-file-name-windows-absolute-path
  • rollup@function@file-name-double-dot-prefix-is-valid
  • rollup@function@file-name-leading-dot-slash-is-valid

🔵 rolldown — Warning/error differences (22)

  • rollup@function@plugin-hook-filters
  • rollup@function@generate-bundle-mutation
  • rollup@function@missing-entry-export
  • rollup@hooks@Throws when using the "file" option for multiple chunks
  • 8 logging-related tests
  • rollup@function@cannot-call-external-namespace
  • rollup@function@cannot-call-internal-namespace
  • 3 reassign-import tests
  • rollup@function@warning-const-reassign
  • rollup@function@namespace-reassign-import-fails
  • rollup@function@namespace-update-import-fails

🔵 rolldown — Plugin dependencies (5)

  • rollup@function@no-treeshake-react
  • rollup@function@strip-bom-1
  • rollup@form@supports-core-js
  • rollup@form@supports-es5-shim
  • rollup@form@supports-es6-shim

🔵 rolldown — Parallelism ordering (2)

  • rollup@hooks@assigns chunk IDs before creating outputBundle chunks
  • rollup@function@external-resolved

🔵 rolldown — external: true not supported (3)

  • rollup@function@external-namespace-and-default-reexport-compat2
  • rollup@function@external-namespace-and-default-reexport-compat3
  • rollup@function@external-namespace-and-default-reexport-compat

🔵 rolldown — Test infra (3)

  • rollup@function@preserve-symlink
  • rollup@function@symlink
  • rollup@form@sourcemaps-inline

🔵 rolldown — Other behavior differences (9)

  • rollup@hooks@Throws when not specifying "file" or "dir"
  • rollup@function@bundle-facade-order
  • rollup@function@argument-deoptimization@global-calls
  • rollup@function@es5-class-called-without-new
  • rollup@function@jsx@unknown-mode
  • rollup@function@jsx@unnecessary-import-source
  • rollup@function@catch-rust-panic
  • rollup@function@exports-are-not-defined
  • rollup@function@dynamic-import-call-method-with-this-await
🔵 rolldown — Treeshaking tests (278) — treeshaking algorithm differences

Source: packages/rollup-tests/src/ignored-treeshaking-tests.js + ignored-treeshaking-tests.json

All 278 tests are rolldown — tree-shaking is implemented in rolldown's link stage.

49 manually listed tests in ignored-treeshaking-tests.js covering:

  • Scope handling and variable shadowing
  • Deoptimization of recursive functions
  • Const folding across modules
  • Parameter optimization
  • Property access side-effects tracking
  • Namespace mutation tracking
  • Class static block tree-shaking
  • Proxy tree-shaking

229 auto-generated tests in ignored-treeshaking-tests.json covering:

  • Array element tracking, arrow/function call parameters
  • Async function effects, binary/unary expressions
  • Break control flow, builtin prototypes
  • Class fields/constructors/static blocks
  • Conditional/logical expressions, dead branch elimination
  • Decorator tree-shaking, empty statement removal
  • Function mutation tracking, getter/setter side-effects
  • Object expression tree-shaking, optional chaining
  • Pattern assignments, property setters/getters
  • Pure comment handling, recursive calls/values
  • Self-calling functions, sequence expressions
  • Side-effect detection (a through t, plus variants)
  • Switch/try statement deoptimization, template literals
  • Tree-shake literal parameters, unused imports/vars/functions

Full list in packages/rollup-tests/src/ignored-treeshaking-tests.json.

Passed but snapshot different (173) — functionally correct but different output

Source: packages/rollup-tests/src/ignored-passed-snapshot-different-tests.js

🔵 rolldown — Deconflict logic differences (~30)

  • rollup@form@catch-parameter-shadowing
  • rollup@form@body-less-for-loops
  • rollup@form@import-specifier-deshadowing
  • rollup@form@base64-deshadow
  • rollup@form@conflicting-imports
  • rollup@form@deconflict-format-specific-exports
  • rollup@form@deconflict-format-specific-globals
  • rollup@form@internal-conflict-resolution
  • rollup@form@large-var-cnt-deduping
  • rollup@form@deconflict-module-priority
  • (and ~20 more deconflict-related tests)

🔵 rolldown — Reexport handling (~20) — rolldown converts reexport to import+export

  • rollup@form@reexport-external-default-and-name
  • rollup@form@reexport-external-default-and-namespace
  • rollup@form@reexport-external-default-as-name-and-name
  • rollup@form@reexport-external-default
  • rollup@form@reexport-external-name-as-default2
  • rollup@form@reexport-external-name-as-default
  • rollup@form@reexport-external-name
  • rollup@form@reexport-external-namespace-as
  • rollup@form@reexport-external-namespace
  • rollup@form@reexport-used-external-namespace-as
  • rollup@form@external-export-tracing
  • (and more)

🔵 rolldown — Dynamic import inlining (~5)

  • rollup@form@dynamic-import-inlining
  • rollup@form@dynamic-import-inlining-array
  • rollup@form@inline-with-reexport
  • rollup@form@nested-inlined-dynamic-import
  • rollup@form@inlined-treeshaken-dynamic-import (from treeshaking json)

🔵 rolldown — Class rendering differences (~15)class Avar A = class

  • rollup@form@use-class-name-in-static-block
  • rollup@form@static-method-deoptimization
  • rollup@form@reassigned-exported-functions-and-classes
  • rollup@form@computed-properties
  • rollup@form@empty-statament-class-member
  • rollup@form@exported-class-declaration-conflict
  • rollup@form@support-decorators-after-export
  • rollup@form@support-decorators-before-export
  • rollup@form@default-export-anonymous-class-extends
  • rollup@form@default-export-class
  • (and more)

🟠 oxc — undefinedvoid 0 replacement (2) — oxc_codegen behavior

  • rollup@form@proper-this-context
  • rollup@form@this-is-undefined

🔵 rolldown — Sourcemap mapping differences (~8)

  • rollup@function@sourcemap-true-generatebundle
  • rollup@function@sourcemap-inline-generatebundle
  • rollup@form@sourcemaps-external
  • rollup@form@sourcemaps-hidden
  • rollup@sourcemaps@render-chunk-babili
  • rollup@form@render-chunk-plugin-sourcemaps
  • rollup@sourcemaps@transform-low-resolution
  • rollup@sourcemaps@names
  • rollup@sourcemaps@basic-support

🔵 rolldown — Inlining/optimization differences (~20)

  • rollup@form@assignment-to-exports
  • rollup@form@deep-properties-access
  • rollup@form@deep-properties
  • rollup@form@handles-async-await
  • rollup@form@recursive-computed-members
  • rollup@form@recursive-multi-expressions
  • rollup@form@reexport-star-deshadow
  • rollup@form@function-id-as-parameter
  • rollup@form@remove-whitespace-of-logical-expression
  • rollup@form@pure-comment-scenarios-complex
  • rollup@form@non-empty-block-statement
  • rollup@form@nested-pure-comments
  • rollup@form@unary-expressions-preserve-constants
  • (and more)

🔵 rolldown — Other output differences (~70)

  • Format-specific rendering, namespace objects, hash values, export handling, emit-asset, etc.
  • rollup@form@hoisted-vars-in-dead-branches — var hoisting happens in Rollup but not Rolldown
  • rollup@form@export-__proto__ — Rolldown uses __export helper
  • rollup@function@emit-chunk-hash — hash value difference
  • rollup@function@cycles-export-star — cycle handling
  • (and many more — full list in source file)
Unsupported features (219) — features not yet implemented

Source: packages/rollup-tests/src/ignored-by-unsupported-features.md

🔵 rolldown — Plugin-related (31)

  • NormalizedOptions at hooks not compatible (2)
  • load hook ast return not supported (2)
  • resolveId hook resolvedBy not supported (1)
  • shouldTransformCachedModule hook not supported (1)
  • resolveDynamicImport hook specifier: AstNode not supported (2)
  • Plugin sequential not supported (2)
  • renderDynamicImport/resolveFileUrl/resolveImportMeta hooks not supported (3)
  • PluginContext.parse allowReturnOutsideFunction not supported (1)
  • PluginContext.cache not supported (7)
  • PluginContext.load not fully supported (4)
  • maxParallelFileOps not supported (5)
  • PluginContext.emitFile emit chunk partially supported (13)
  • PluginContext.emitFile prebuilt chunk not supported (3)
  • PluginContext.setAssetSource not supported (9)
  • originalFileName/originalFileNames not supported (3)

🔵 rolldown — Options-related (102)

  • output.format systemjs not supported (15)
  • input.perf and bundle.getTimings() not supported (2)
  • input.moduleContext not supported (2)
  • output.compact not supported (4)
  • output.validate not supported (1)
  • output.interop not supported (16)
  • Bundle.cache not supported (2)
  • output.generatedCode not supported (21)
  • output.preserveModules not compatible (11)
  • output.manualChunks not compatible (8)
  • format: amd not supported (3)
  • output.sourcemapExcludeSources not supported (1)
  • output.sourcemapBaseUrl not compatible (3)
  • output.treeshake.preset not supported (1)
  • output.treeshake.moduleSideEffect not compatible (2)
  • ModuleInfo not compatible (8)
  • Chunk information not compatible (2)

🔵 rolldown — Features (86)

  • syntheticNamedExports not supported (25)
  • Import assertions/attributes not supported (28)
  • Watch behavior not compatible (1)
  • Escaping external id not supported (1)
  • Remove use strict from function body (1)
  • Namespace object not compatible (12)
  • hasOwnProperty export handling (1)
  • __proto__ export handling (2)
  • Source map combine logic (1)
  • strictDeprecations option not supported (7)
  • Error/warning information not compatible (52) — includes missing error codes like VALIDATION_ERROR, EMPTY_BUNDLE, ASSET_SOURCE_MISSING, UNUSED_EXTERNAL_IMPORT, etc.

Summary

Category 🔵 rolldown 🟠 oxc Total
esbuild — failed 16 8 24
esbuild — not supported 46 12 58
esbuild — ignored 34 3 37
rollup — ignored 100 0 100
rollup — treeshaking 278 0 278
rollup — snapshot different 171 2 173
rollup — unsupported features 219 0 219
Total 864 25 889

Note: 37 ported rollup tests are excluded from the ignored count as they are already moved to other test locations and are not actually skipped.

Metadata

Metadata

Assignees

Labels

Type

No type

Priority

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions