@@ -746,4 +746,51 @@ module World
746746 assert_equal 2 , module_decl . context_decls . size
747747 end
748748 end
749+
750+ def test__ruby__constant_declarations
751+ result = parse_inline ( <<~RUBY )
752+ A = "123"
753+ B = [1, 2] #: Object
754+ Object::FOO = :FOO
755+
756+ class Object
757+ BAR = "BAR"
758+ end
759+ RUBY
760+
761+ env = Environment . new
762+ env . add_source ( RBS ::Source ::Ruby . new ( result . buffer , result . prism_result , result . declarations , result . diagnostics ) )
763+ resolved_env = env . resolve_type_names
764+
765+ # Check top-level constant A with inferred type
766+ assert_operator resolved_env . constant_decls , :key? , type_name ( "::A" )
767+ resolved_env . constant_decls [ type_name ( "::A" ) ] . tap do |entry |
768+ assert_equal type_name ( "::A" ) , entry . name
769+ assert_equal "::String" , entry . decl . type . to_s
770+ end
771+
772+ # Check top-level constant B with type annotation
773+ assert_operator resolved_env . constant_decls , :key? , type_name ( "::B" )
774+ resolved_env . constant_decls [ type_name ( "::B" ) ] . tap do |entry |
775+ assert_equal type_name ( "::B" ) , entry . name
776+ assert_equal "::Object" , entry . decl . type . to_s
777+ end
778+
779+ # Check constant path Object::FOO
780+ assert_operator resolved_env . constant_decls , :key? , type_name ( "::Object::FOO" )
781+ resolved_env . constant_decls [ type_name ( "::Object::FOO" ) ] . tap do |entry |
782+ assert_equal type_name ( "::Object::FOO" ) , entry . name
783+ assert_equal "::Symbol" , entry . decl . type . to_s
784+ end
785+
786+ # Check constant inside class Object
787+ assert_operator resolved_env . constant_decls , :key? , type_name ( "::Object::BAR" )
788+ resolved_env . constant_decls [ type_name ( "::Object::BAR" ) ] . tap do |entry |
789+ assert_equal type_name ( "::Object::BAR" ) , entry . name
790+ assert_equal "::String" , entry . decl . type . to_s
791+ end
792+
793+ # Verify that Object class is created
794+ assert_operator resolved_env . class_decls , :key? , type_name ( "::Object" )
795+ end
749796end
0 commit comments