@@ -1214,4 +1214,85 @@ class Foo
12141214 end
12151215 end
12161216 end
1217+
1218+ def test__one_ancestors__ruby_include_extend_prepend
1219+ SignatureManager . new ( system_builtin : true ) do |manager |
1220+ manager . files [ Pathname ( "mixin.rbs" ) ] = <<~EOF
1221+ module TestMixin
1222+ end
1223+ EOF
1224+
1225+ manager . ruby_files [ Pathname ( "lib/test.rb" ) ] = <<~EOF
1226+ module TestMixin
1227+ end
1228+
1229+ class TestClass
1230+ include TestMixin
1231+ end
1232+
1233+ class TestExtendClass
1234+ extend TestMixin
1235+ end
1236+
1237+ class TestPrependClass
1238+ prepend TestMixin
1239+ end
1240+ EOF
1241+
1242+ manager . build do |env |
1243+ builder = DefinitionBuilder ::AncestorBuilder . new ( env : env )
1244+
1245+ # Test include
1246+ builder . one_instance_ancestors ( type_name ( "::TestClass" ) ) . tap do |a |
1247+ assert_equal type_name ( "::TestClass" ) , a . type_name
1248+ assert_equal [ ] , a . params
1249+
1250+ assert_equal Ancestor ::Instance . new ( name : type_name ( "::Object" ) , args : [ ] , source : :super ) , a . super_class
1251+ assert_equal 1 , a . included_modules . size
1252+ assert_equal type_name ( "::TestMixin" ) , a . included_modules [ 0 ] . name
1253+ assert_equal [ ] , a . included_modules [ 0 ] . args
1254+ assert_instance_of AST ::Ruby ::Members ::IncludeMember , a . included_modules [ 0 ] . source
1255+ assert_equal [ ] , a . included_interfaces
1256+ assert_equal [ ] , a . prepended_modules
1257+ assert_nil a . extended_modules
1258+ assert_nil a . extended_interfaces
1259+ assert_nil a . self_types
1260+ end
1261+
1262+ # Test extend
1263+ builder . one_singleton_ancestors ( type_name ( "::TestExtendClass" ) ) . tap do |a |
1264+ assert_equal type_name ( "::TestExtendClass" ) , a . type_name
1265+ assert_nil a . params
1266+
1267+ assert_equal Ancestor ::Singleton . new ( name : type_name ( "::Object" ) ) , a . super_class
1268+ assert_nil a . included_modules
1269+ assert_nil a . included_interfaces
1270+ assert_nil a . prepended_modules
1271+ assert_equal 1 , a . extended_modules . size
1272+ assert_equal type_name ( "::TestMixin" ) , a . extended_modules [ 0 ] . name
1273+ assert_equal [ ] , a . extended_modules [ 0 ] . args
1274+ assert_instance_of AST ::Ruby ::Members ::ExtendMember , a . extended_modules [ 0 ] . source
1275+ assert_equal [ ] , a . extended_interfaces
1276+ assert_nil a . self_types
1277+ end
1278+
1279+ # Test prepend
1280+ builder . one_instance_ancestors ( type_name ( "::TestPrependClass" ) ) . tap do |a |
1281+ assert_equal type_name ( "::TestPrependClass" ) , a . type_name
1282+ assert_equal [ ] , a . params
1283+
1284+ assert_equal Ancestor ::Instance . new ( name : type_name ( "::Object" ) , args : [ ] , source : :super ) , a . super_class
1285+ assert_equal [ ] , a . included_modules
1286+ assert_equal [ ] , a . included_interfaces
1287+ assert_equal 1 , a . prepended_modules . size
1288+ assert_equal type_name ( "::TestMixin" ) , a . prepended_modules [ 0 ] . name
1289+ assert_equal [ ] , a . prepended_modules [ 0 ] . args
1290+ assert_instance_of AST ::Ruby ::Members ::PrependMember , a . prepended_modules [ 0 ] . source
1291+ assert_nil a . extended_modules
1292+ assert_nil a . extended_interfaces
1293+ assert_nil a . self_types
1294+ end
1295+ end
1296+ end
1297+ end
12171298end
0 commit comments