@@ -3931,4 +3931,150 @@ def util_two_parsers(first_file_content, second_file_content)
3931
3931
second_file_content , @options , @stats
3932
3932
end
3933
3933
3934
+ def test_parse_const_third_party
3935
+ util_parser <<-CLASS
3936
+ class A
3937
+ true if B
3938
+ true if B::C
3939
+ true if B::C::D
3940
+
3941
+ module B
3942
+ end
3943
+ end
3944
+ CLASS
3945
+
3946
+ tk = @parser . get_tk
3947
+
3948
+ @parser . parse_class @top_level , RDoc ::Parser ::Ruby ::NORMAL , tk , @comment
3949
+
3950
+ a = @top_level . classes . first
3951
+ assert_equal 'A' , a . full_name
3952
+
3953
+ visible = @store . all_modules . reject { |mod | mod . suppressed? }
3954
+ visible = visible . map { |mod | mod . full_name }
3955
+
3956
+ assert_equal [ 'A::B' ] , visible
3957
+ end
3958
+
3959
+ def test_parse_const_alias_defined_elsewhere
3960
+ util_parser <<-CLASS
3961
+ module A
3962
+ Aliased = Defined
3963
+ end
3964
+
3965
+ module A
3966
+ class Defined
3967
+ end
3968
+ end
3969
+ CLASS
3970
+
3971
+ @parser . scan
3972
+
3973
+ a = @top_level . modules . first
3974
+ assert_equal 'A' , a . full_name
3975
+ aliased = a . constants . first
3976
+ assert_equal 'A::Aliased' , aliased . full_name
3977
+ assert_equal [ ] , a . modules . map ( &:full_name )
3978
+ assert_equal [ 'A::Defined' , 'A::Aliased' ] , a . classes . map ( &:full_name )
3979
+ assert_equal [ 'A::Aliased' ] , a . constants . map ( &:full_name )
3980
+
3981
+ visible = @store . all_modules . reject { |mod | mod . suppressed? }
3982
+ visible = visible . map { |mod | mod . full_name }
3983
+
3984
+ assert_equal [ 'A' ] , visible
3985
+ end
3986
+
3987
+ def test_parse_const_alias_defined_far_away
3988
+ util_parser <<-CLASS
3989
+ module A
3990
+ Aliased = ::B::C::Defined
3991
+ end
3992
+
3993
+ module B
3994
+ module C
3995
+ class Defined
3996
+ end
3997
+ end
3998
+ end
3999
+ CLASS
4000
+
4001
+ @parser . scan
4002
+
4003
+ a = @top_level . modules . first
4004
+ assert_equal 'A' , a . full_name
4005
+ assert_empty a . classes
4006
+ assert_empty a . modules
4007
+ assert_equal [ 'A::Aliased' ] , a . constants . map ( &:full_name )
4008
+
4009
+ defined = @store . find_class_named 'B::C::Defined'
4010
+ assert_equal 'B::C::Defined' , defined . full_name
4011
+
4012
+ aliased = @store . find_class_named 'B::C::Aliased'
4013
+ assert_equal 'B::C::Aliased' , aliased . full_name
4014
+
4015
+ visible = @store . all_modules . reject { |mod | mod . suppressed? }
4016
+ visible = visible . map { |mod | mod . full_name }
4017
+
4018
+ assert_equal [ 'A' , 'B' , 'B::C' ] , visible
4019
+ end
4020
+
4021
+ def test_parse_const_alias_defined_elsewhere
4022
+ util_parser <<-CLASS
4023
+ module A
4024
+ Aliased = Defined
4025
+ end
4026
+
4027
+ module A
4028
+ class Defined
4029
+ end
4030
+ end
4031
+ CLASS
4032
+
4033
+ @parser . scan
4034
+
4035
+ a = @top_level . modules . first
4036
+ assert_equal 'A' , a . full_name
4037
+ aliased = a . constants . first
4038
+ assert_equal 'A::Aliased' , aliased . full_name
4039
+
4040
+ visible = @store . all_modules . reject { |mod | mod . suppressed? }
4041
+ visible = visible . map { |mod | mod . full_name }
4042
+
4043
+ assert_equal [ 'A' ] , visible
4044
+ end
4045
+
4046
+ def test_parse_const_alias_defined_far_away
4047
+ util_parser <<-CLASS
4048
+ module A
4049
+ Aliased = ::B::C::Defined
4050
+ end
4051
+
4052
+ module B
4053
+ module C
4054
+ class Defined
4055
+ end
4056
+ end
4057
+ end
4058
+ CLASS
4059
+
4060
+ @parser . scan
4061
+
4062
+ a = @top_level . modules . first
4063
+ assert_equal 'A' , a . full_name
4064
+ assert_empty a . classes
4065
+ assert_empty a . modules
4066
+ assert_equal [ 'A::Aliased' ] , a . constants . map ( &:full_name )
4067
+
4068
+ defined = @store . find_class_named 'B::C::Defined'
4069
+ assert_equal 'B::C::Defined' , defined . full_name
4070
+
4071
+ aliased = @store . find_class_named 'B::C::Aliased'
4072
+ assert_equal 'B::C::Aliased' , aliased . full_name
4073
+
4074
+ visible = @store . all_modules . reject { |mod | mod . suppressed? }
4075
+ visible = visible . map { |mod | mod . full_name }
4076
+
4077
+ assert_equal [ 'A' , 'B' , 'B::C' ] , visible
4078
+ end
4079
+
3934
4080
end
0 commit comments