ruby / prism

Prism Ruby parser
https://ruby.github.io/prism/
MIT License
825 stars 139 forks source link

Running zeitwerk unit tests raise `NameError: uninitialized constant` #2908

Closed yahonda closed 3 months ago

yahonda commented 3 months ago

zeitwerk is Rails default autoloader. I have run zeitwerk unit test with prism enabled Ruby, it raises these NameError: uninitialized constant

Steps to reproduce

git clone https://github.com/fxn/zeitwerk
cd zeitwerk
bundle install
RUBYOPT=--parser=prism bundle exec rake test

Expected result

All of tests should pass as follows.

$ ruby -v
ruby 3.4.0dev (2024-06-25T03:42:16Z master 3b4ff810d2) [x86_64-linux]
$ bundle exec rake test
/home/yahonda/.gem/ruby/3.4.0+0/gems/rake-13.1.0/lib/rake.rb:33: warning: ostruct was loaded from the standard library, but will no longer be part of the default gems since Ruby 3.5.0. Add ostruct to your Gemfile or gemspec.

# Running tests with run options --seed 31720:

.................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Finished tests in 1.113170s, 403.3525 tests/s, 962.1169 assertions/s.

449 tests, 1071 assertions, 0 failures, 0 errors, 0 skips
$

Actual result

It raises these NameError: uninitialized constant.

$ RUBYOPT=--parser=prism ruby -v
ruby 3.4.0dev (2024-06-25T03:42:16Z master 3b4ff810d2) +PRISM [x86_64-linux]
$ RUBYOPT=--parser=prism bundle exec rake test
/home/yahonda/.gem/ruby/3.4.0+0/gems/rake-13.1.0/lib/rake.rb:33: warning: ostruct was loaded from the standard library, but will no longer be part of the default gems since Ruby 3.5.0. Add ostruct to your Gemfile or gemspec.

# Running tests with run options --seed 27719:

..........E....F..E........E......................................E.....F.F.........................E..............EE..E................................EE........................................................F........................F....FE...........................E....................EEE........................................F...E.........E....E....E.........................................E.....E.EE.....................E.......E..E.......

Finished tests in 1.069152s, 419.9592 tests/s, 942.8037 assertions/s.

Error:
TestEagerLoadDir#test_eager_loads_all_files_in_a_subdirectory__ignoring_what_is_above:
NameError: uninitialized constant M::N::P::Q
    lib/zeitwerk/loader/eager_load.rb:180:in 'Module#const_get'
    lib/zeitwerk/loader/eager_load.rb:180:in 'block in Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/helpers.rb:47:in 'block in Zeitwerk::Loader::Helpers#ls'
    <internal:array>:54:in 'Array#each'
    lib/zeitwerk/loader/helpers.rb:25:in 'Zeitwerk::Loader::Helpers#ls'
    lib/zeitwerk/loader/eager_load.rb:168:in 'Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/eager_load.rb:70:in 'Zeitwerk::Loader::EagerLoad#eager_load_dir'
    test/lib/zeitwerk/test_eager_load_dir.rb:138:in 'block (2 levels) in <class:TestEagerLoadDir>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_eager_load_dir.rb:137:in 'block in <class:TestEagerLoadDir>'

Failure:
TestEagerLoadDir#test_eager_loads_excluded_explicit_namespaces_if_some_subtree_is_not_excluded [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_eager_load_dir.rb:81]
Minitest::Assertion: Expected false to be truthy.

Error:
TestEagerLoadDir#test_eager_loads_all_files:
NameError: uninitialized constant M::N::P::Q
    lib/zeitwerk/loader/eager_load.rb:180:in 'Module#const_get'
    lib/zeitwerk/loader/eager_load.rb:180:in 'block in Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/helpers.rb:47:in 'block in Zeitwerk::Loader::Helpers#ls'
    <internal:array>:54:in 'Array#each'
    lib/zeitwerk/loader/helpers.rb:25:in 'Zeitwerk::Loader::Helpers#ls'
    lib/zeitwerk/loader/eager_load.rb:168:in 'Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/eager_load.rb:70:in 'Zeitwerk::Loader::EagerLoad#eager_load_dir'
    test/lib/zeitwerk/test_eager_load_dir.rb:16:in 'block (2 levels) in <class:TestEagerLoadDir>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_eager_load_dir.rb:15:in 'block in <class:TestEagerLoadDir>'

Error:
TestEagerLoadDir#test_eager_loads_all_files__Pathname_:
NameError: uninitialized constant M::N::P::Q
    lib/zeitwerk/loader/eager_load.rb:180:in 'Module#const_get'
    lib/zeitwerk/loader/eager_load.rb:180:in 'block in Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/helpers.rb:47:in 'block in Zeitwerk::Loader::Helpers#ls'
    <internal:array>:54:in 'Array#each'
    lib/zeitwerk/loader/helpers.rb:25:in 'Zeitwerk::Loader::Helpers#ls'
    lib/zeitwerk/loader/eager_load.rb:168:in 'Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/eager_load.rb:70:in 'Zeitwerk::Loader::EagerLoad#eager_load_dir'
    test/lib/zeitwerk/test_eager_load_dir.rb:33:in 'block (2 levels) in <class:TestEagerLoadDir>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_eager_load_dir.rb:32:in 'block in <class:TestEagerLoadDir>'

Error:
TestEagerLoad#test_eager_loads_dependent_loaders:
NameError: uninitialized constant App0::Foo
    test/tmp/lib1/app1/foo/bar/baz.rb:2:in '<class:Baz>'
    test/tmp/lib1/app1/foo/bar/baz.rb:1:in '<top (required)>'
    /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:69:in 'Kernel.require'
    /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:69:in 'block (2 levels) in Kernel#replace_require'
    lib/zeitwerk/kernel.rb:26:in 'Kernel#require'
    lib/zeitwerk/cref.rb:91:in 'Module#const_get'
    lib/zeitwerk/cref.rb:91:in 'Zeitwerk::Cref#get'
    lib/zeitwerk/loader/eager_load.rb:173:in 'block in Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/helpers.rb:47:in 'block in Zeitwerk::Loader::Helpers#ls'
    <internal:array>:54:in 'Array#each'
    lib/zeitwerk/loader/helpers.rb:25:in 'Zeitwerk::Loader::Helpers#ls'
    lib/zeitwerk/loader/eager_load.rb:168:in 'Zeitwerk::Loader::EagerLoad#actual_eager_load_dir'
    lib/zeitwerk/loader/eager_load.rb:17:in 'block (2 levels) in Zeitwerk::Loader::EagerLoad#eager_load'
    lib/zeitwerk/loader/eager_load.rb:16:in 'Hash#each'
    lib/zeitwerk/loader/eager_load.rb:16:in 'block in Zeitwerk::Loader::EagerLoad#eager_load'
    lib/zeitwerk/loader/eager_load.rb:10:in 'Thread::Mutex#synchronize'
    lib/zeitwerk/loader/eager_load.rb:10:in 'Zeitwerk::Loader::EagerLoad#eager_load'
    lib/zeitwerk/loader.rb:413:in 'block in Zeitwerk::Loader.eager_load_all'
    <internal:array>:54:in 'Array#each'
    lib/zeitwerk/loader.rb:411:in 'Zeitwerk::Loader.eager_load_all'
    test/lib/zeitwerk/test_eager_load.rb:85:in 'block (2 levels) in <class:TestEagerLoad>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_eager_load.rb:78:in 'block in <class:TestEagerLoad>'

Failure:
TestEagerLoad#test_eager_loads_independent_files__Object_ [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_eager_load.rb:27]
Minitest::Assertion: Expected false to be truthy.

Failure:
TestEagerLoad#test_eager_loads_independent_files__Namespace_ [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_eager_load.rb:49]
Minitest::Assertion: Expected false to be truthy.

Error:
TestRequireInteraction#test_files_deep_down_the_current_visited_level_are_recognized_as_managed__explicit_:
NameError: uninitialized constant Foo::Bar::Baz::Zoo::Wadus
    test/tmp/foo/bar/baz/zoo.rb:1:in '<module:Zoo>'
    test/tmp/foo/bar/baz/zoo.rb:1:in '<top (required)>'
    /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:69:in 'Kernel.require'
    /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:69:in 'block (2 levels) in Kernel#replace_require'
    lib/zeitwerk/kernel.rb:26:in 'Kernel#require'
    test/tmp/foo/bar/baz/zoo/woo.rb:1:in '<top (required)>'
    /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:69:in 'Kernel.require'
    /home/yahonda/.rbenv/versions/trunk/lib/ruby/3.4.0+0/bundled_gems.rb:69:in 'block (2 levels) in Kernel#replace_require'
    lib/zeitwerk/kernel.rb:34:in 'Kernel#require'
    test/lib/zeitwerk/test_require_interaction.rb:8:in 'TestRequireInteraction#assert_required'
    test/lib/zeitwerk/test_require_interaction.rb:110:in 'block (2 levels) in <class:TestRequireInteraction>'
    test/support/loader_test.rb:107:in 'block (2 levels) in LoaderTest#with_setup'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/support/loader_test.rb:107:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_require_interaction.rb:109:in 'block in <class:TestRequireInteraction>'

Error:
TestMultipleLoaders#test_multiple_independent_loaders:
NameError: uninitialized constant App0::Foo
    test/lib/zeitwerk/test_multiple_loaders.rb:17:in 'block (2 levels) in <class:TestMultipleLoaders>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_multiple_loaders.rb:13:in 'block in <class:TestMultipleLoaders>'

Error:
TestMultipleLoaders#test_multiple_dependent_loaders:
NameError: uninitialized constant App0::Foo
    test/lib/zeitwerk/test_multiple_loaders.rb:49:in 'block (2 levels) in <class:TestMultipleLoaders>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_multiple_loaders.rb:45:in 'block in <class:TestMultipleLoaders>'

Error:
TestUTF8#test_autoloads_explicit_namespaces_that_start_with_a_Greek_letter:
NameError: uninitialized constant Ω::À
    test/lib/zeitwerk/test_utf8.rb:45:in 'block (2 levels) in <class:TestUTF8>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_utf8.rb:44:in 'block in <class:TestUTF8>'

Error:
TestForGemExtension#test_configures_the_gem_inflector_by_default:
NameError: uninitialized constant TestForGemExtension::MyGemExtension::VERSION
    test/lib/zeitwerk/test_for_gem_extension.rb:74:in 'block (2 levels) in <class:TestForGemExtension>'
    test/lib/zeitwerk/test_for_gem_extension.rb:23:in 'block (2 levels) in TestForGemExtension#with_my_gem_extension'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/zeitwerk/test_for_gem_extension.rb:18:in 'block in TestForGemExtension#with_my_gem_extension'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_for_gem_extension.rb:17:in 'TestForGemExtension#with_my_gem_extension'
    test/lib/zeitwerk/test_for_gem_extension.rb:72:in 'block in <class:TestForGemExtension>'

Error:
TestForGemExtension#test_sets_things_correctly:
NameError: uninitialized constant TestForGemExtension::MyGemExtension::Foo
    test/lib/zeitwerk/test_for_gem_extension.rb:35:in 'block (2 levels) in <class:TestForGemExtension>'
    test/lib/zeitwerk/test_for_gem_extension.rb:23:in 'block (2 levels) in TestForGemExtension#with_my_gem_extension'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/zeitwerk/test_for_gem_extension.rb:18:in 'block in TestForGemExtension#with_my_gem_extension'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_for_gem_extension.rb:17:in 'TestForGemExtension#with_my_gem_extension'
    test/lib/zeitwerk/test_for_gem_extension.rb:34:in 'block in <class:TestForGemExtension>'

Failure:
TestRubyCompatibility#test_tracing__class_calls_you_back_on_creation_and_on_reopening [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_ruby_compatibility.rb:283]
Minitest::Assertion: --- expected
+++ actual
@@ -1 +1 @@
-[TestRubyCompatibility::C, TestRubyCompatibility::M, TestRubyCompatibility::C, TestRubyCompatibility::M]
+[TestRubyCompatibility::C, TestRubyCompatibility::C]

Failure:
TestOnLoad#test_on_load_for_namespaces_gets_called_with_child_constants_available__explicit_ [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_on_load.rb:153]
Minitest::Assertion: Expected false to be truthy.

Failure:
TestOnLoad#test_on_load__ANY_for_namespaces_gets_called_with_child_constants_available__explicit_ [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_on_load.rb:173]
Minitest::Assertion: Expected false to be truthy.

Error:
TestOnLoad#test_on_load_is_called_in_the_expected_order__explicit_namespace:
NameError: uninitialized constant X::A
    test/lib/zeitwerk/test_on_load.rb:53:in 'block (2 levels) in <class:TestOnLoad>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_on_load.rb:48:in 'block in <class:TestOnLoad>'

Error:
TestMarshal#test_Marshal_load_autoloads_a_namespaced_class__explicit_:
NameError: uninitialized constant M::N
    test/lib/zeitwerk/test_marshal.rb:30:in 'block (2 levels) in <class:TestMarshal>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_marshal.rb:29:in 'block in <class:TestMarshal>'

Error:
TestGemInflector#test_other_possible_version_rb_are_inflected_normally:
NameError: uninitialized constant MyGem::Ns
    test/lib/test_gem_inflector.rb:33:in 'block (2 levels) in <class:TestGemInflector>'
    test/lib/test_gem_inflector.rb:23:in 'block (2 levels) in TestGemInflector#with_setup'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/test_gem_inflector.rb:21:in 'block in TestGemInflector#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/test_gem_inflector.rb:20:in 'TestGemInflector#with_setup'
    test/lib/test_gem_inflector.rb:33:in 'block in <class:TestGemInflector>'

Error:
TestGemInflector#test_the_constant_for_my_gem_version_rb_is_inflected_as_VERSION:
NameError: uninitialized constant MyGem::VERSION
    test/lib/test_gem_inflector.rb:29:in 'block (2 levels) in <class:TestGemInflector>'
    test/lib/test_gem_inflector.rb:23:in 'block (2 levels) in TestGemInflector#with_setup'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/test_gem_inflector.rb:21:in 'block in TestGemInflector#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/test_gem_inflector.rb:20:in 'TestGemInflector#with_setup'
    test/lib/test_gem_inflector.rb:29:in 'block in <class:TestGemInflector>'

Error:
TestGemInflector#test_works_as_expected_for_other_files:
NameError: uninitialized constant MyGem::Foo
    test/lib/test_gem_inflector.rb:37:in 'block (2 levels) in <class:TestGemInflector>'
    test/lib/test_gem_inflector.rb:23:in 'block (2 levels) in TestGemInflector#with_setup'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/test_gem_inflector.rb:21:in 'block in TestGemInflector#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/test_gem_inflector.rb:20:in 'TestGemInflector#with_setup'
    test/lib/test_gem_inflector.rb:37:in 'block in <class:TestGemInflector>'

Failure:
TestExplicitNamespace#test_the_tracer_is_enabled_until_everything_is_loaded [/home/yahonda/src/github.com/fxn/zeitwerk/test/lib/zeitwerk/test_explicit_namespace.rb:216]
Minitest::Assertion: Expected false to be truthy.

Error:
TestExplicitNamespace#test_explicit_namespaces_managed_by_different_instances:
NameError: uninitialized constant M::N
    test/lib/zeitwerk/test_explicit_namespace.rb:81:in 'block (2 levels) in <class:TestExplicitNamespace>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_explicit_namespace.rb:77:in 'block in <class:TestExplicitNamespace>'

Error:
TestExplicitNamespace#test_non_hashable_explicit_namespaces_are_supported:
NameError: uninitialized constant M::X
    test/lib/zeitwerk/test_explicit_namespace.rb:256:in 'block (2 levels) in <class:TestExplicitNamespace>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_explicit_namespace.rb:255:in 'block in <class:TestExplicitNamespace>'

Error:
TestCollapse#test_explicit_namespaces_are_honored_downwards:
NameError: uninitialized constant Foo::X
    test/lib/zeitwerk/test_collapse.rb:42:in 'block (2 levels) in <class:TestCollapse>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_collapse.rb:37:in 'block in <class:TestCollapse>'

Error:
TestCollapse#test_explicit_namespaces_are_honored_downwards__deeper:
NameError: uninitialized constant Foo::X
    test/lib/zeitwerk/test_collapse.rb:56:in 'block (2 levels) in <class:TestCollapse>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_collapse.rb:51:in 'block in <class:TestCollapse>'

Error:
TestUnloadableCpath#test_unloadable_cpaths_returns_actual_constant_paths_even_if__name_is_overridden:
NameError: uninitialized constant X::C
    test/lib/zeitwerk/test_unloadable_cpath.rb:43:in 'block (2 levels) in <class:TestUnloadableCpath>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_unloadable_cpath.rb:42:in 'block in <class:TestUnloadableCpath>'

Error:
TestReloading#test_reloading_works_if_the_flag_is_set__Object_:
NameError: uninitialized constant Y::A
    test/lib/zeitwerk/test_reloading.rb:42:in 'block (2 levels) in <class:TestReloading>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_reloading.rb:40:in 'block in <class:TestReloading>'

Error:
TestReloading#test_reloading_works_if_the_flag_is_set__Namespace_:
NameError: uninitialized constant TestReloading::Namespace::Y::A
    test/lib/zeitwerk/test_reloading.rb:74:in 'block (2 levels) in <class:TestReloading>'
    test/support/loader_test.rb:109:in 'block in LoaderTest#with_setup'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/support/loader_test.rb:87:in 'LoaderTest#with_setup'
    test/lib/zeitwerk/test_reloading.rb:72:in 'block in <class:TestReloading>'

Error:
TestReloading#test_if_reloading_is_disabled__autoloading_metadata_shrinks_while_autoloading__performance_test_:
NameError: uninitialized constant Y::A
    test/lib/zeitwerk/test_reloading.rb:133:in 'block (2 levels) in <class:TestReloading>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_reloading.rb:127:in 'block in <class:TestReloading>'

Error:
TestForGem#test_version_inflection_works_with_a_symlinked_lib:
NameError: uninitialized constant MyGem::VERSION
    test/lib/zeitwerk/test_for_gem.rb:276:in 'block (3 levels) in <class:TestForGem>'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/zeitwerk/test_for_gem.rb:274:in 'block (2 levels) in <class:TestForGem>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_for_gem.rb:272:in 'block in <class:TestForGem>'

Error:
TestForGem#test_version_inflection_works_with_symlinked_files:
NameError: uninitialized constant MyGem::VERSION
    test/lib/zeitwerk/test_for_gem.rb:262:in 'block (3 levels) in <class:TestForGem>'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/zeitwerk/test_for_gem.rb:260:in 'block (2 levels) in <class:TestForGem>'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_for_gem.rb:256:in 'block in <class:TestForGem>'

Error:
TestForGem#test_sets_things_correctly:
NameError: uninitialized constant MyGem::Foo
    test/lib/zeitwerk/test_for_gem.rb:35:in 'block (2 levels) in <class:TestForGem>'
    test/lib/zeitwerk/test_for_gem.rb:23:in 'block (2 levels) in TestForGem#with_my_gem'
    test/support/loader_test.rb:81:in 'LoaderTest#with_load_path'
    test/lib/zeitwerk/test_for_gem.rb:18:in 'block in TestForGem#with_my_gem'
    test/support/loader_test.rb:72:in 'block in LoaderTest#with_files'
    test/support/loader_test.rb:63:in 'Dir.chdir'
    test/support/loader_test.rb:63:in 'LoaderTest#with_files'
    test/lib/zeitwerk/test_for_gem.rb:17:in 'TestForGem#with_my_gem'
    test/lib/zeitwerk/test_for_gem.rb:34:in 'block in <class:TestForGem>'

449 tests, 1008 assertions, 7 failures, 26 errors, 0 skips
rake aborted!
Command failed with status (1)
<internal:array>:54:in 'Array#each'
<internal:array>:54:in 'Array#each'
/home/yahonda/.gem/ruby/3.4.0+0/gems/rake-13.1.0/exe/rake:27:in '<top (required)>'
/home/yahonda/.rbenv/versions/trunk/bin/bundle:25:in 'Kernel#load'
/home/yahonda/.rbenv/versions/trunk/bin/bundle:25:in '<main>'
Tasks: TOP => test
(See full trace by running task with --trace)
yahonda@myryzen:~/src/github.com/fxn/zeitwerk$ bundle exec rake test
/home/yahonda/.gem/ruby/3.4.0+0/gems/rake-13.1.0/lib/rake.rb:33: warning: ostruct was loaded from the standard library, but will no longer be part of the default gems since Ruby 3.5.0. Add ostruct to your Gemfile or gemspec.

# Running tests with run options --seed 47110:

.................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Finished tests in 1.061199s, 423.1064 tests/s, 1009.2359 assertions/s.

449 tests, 1071 assertions, 0 failures, 0 errors, 0 skips
$
kddnewton commented 3 months ago

Thank you for the report!

These should all be fixed by https://github.com/ruby/ruby/pull/11058. I didn't realize that modules also emitted the "CLASS" event (because they're not classes...). Adding that tracepoint event fixes the tests.