@@ -347,6 +347,20 @@ def test_kotlin_emits_in_file_calls():
347347 assert ("createClient()" , "HttpClient" ) in calls
348348
349349
350+ def test_kotlin_splits_inherits_and_implements ():
351+ r = extract_kotlin (FIXTURES / "sample.kt" )
352+ assert ("DataProcessor" , "BaseProcessor" ) in _edge_labels (r , "inherits" )
353+ assert ("DataProcessor" , "Loggable" ) in _edge_labels (r , "implements" )
354+
355+
356+ def test_kotlin_parameter_return_generic_and_field_contexts ():
357+ r = extract_kotlin (FIXTURES / "sample.kt" )
358+ assert ("run" , "DataProcessor" ) in _edge_labels (r , "references" , "parameter_type" )
359+ assert ("run" , "Result" ) in _edge_labels (r , "references" , "return_type" )
360+ assert ("run" , "DataProcessor" ) in _edge_labels (r , "references" , "generic_arg" )
361+ assert ("DataProcessor" , "Result" ) in _edge_labels (r , "references" , "field" )
362+
363+
350364# ── Scala ─────────────────────────────────────────────────────────────────────
351365
352366def test_scala_no_error ():
@@ -473,6 +487,20 @@ def test_php_event_listener_links_event_to_listener():
473487 assert any ("UserRegistered" in src and "SendWelcomeEmail" in tgt for src , tgt in listened )
474488
475489
490+ def test_php_splits_inherits_implements_mixes_in ():
491+ r = extract_php (FIXTURES / "sample.php" )
492+ assert ("DataProcessor" , "BaseProcessor" ) in _edge_labels (r , "inherits" )
493+ assert ("DataProcessor" , "Loggable" ) in _edge_labels (r , "implements" )
494+ assert ("DataProcessor" , "HasName" ) in _edge_labels (r , "mixes_in" )
495+
496+
497+ def test_php_property_parameter_and_return_contexts ():
498+ r = extract_php (FIXTURES / "sample.php" )
499+ assert ("DataProcessor" , "Result" ) in _edge_labels (r , "references" , "field" )
500+ assert ("run" , "DataProcessor" ) in _edge_labels (r , "references" , "parameter_type" )
501+ assert ("run" , "Result" ) in _edge_labels (r , "references" , "return_type" )
502+
503+
476504# ── Swift ────────────────────────────────────────────────────────────────────
477505
478506def test_swift_no_error ():
@@ -567,31 +595,28 @@ def test_swift_extension_does_not_duplicate_type_node():
567595 config_nodes = [n for n in r ["nodes" ] if n ["label" ] == "Config" ]
568596 assert len (config_nodes ) == 1 , f"Config should appear once, got { len (config_nodes )} "
569597
570- def test_swift_conformance_edge ():
598+ def test_swift_protocol_conformance_emits_implements ():
571599 r = extract_swift (FIXTURES / "sample.swift" )
572- inherits_edges = [e for e in r ["edges" ] if e ["relation" ] == "inherits" ]
573- node_by_id = {n ["id" ]: n ["label" ] for n in r ["nodes" ]}
574- found = False
575- for e in inherits_edges :
576- src_label = node_by_id .get (e ["source" ], "" )
577- tgt_label = node_by_id .get (e ["target" ], "" )
578- if "DataProcessor" in src_label and "Processor" in tgt_label :
579- found = True
580- break
581- assert found , "DataProcessor should have inherits edge to Processor"
600+ assert ("DataProcessor" , "Processor" ) in _edge_labels (r , "implements" )
582601
583- def test_swift_extension_conformance_edge ():
602+
603+ def test_swift_extension_conformance_emits_implements ():
584604 r = extract_swift (FIXTURES / "sample.swift" )
585- inherits_edges = [e for e in r ["edges" ] if e ["relation" ] == "inherits" ]
586- node_by_id = {n ["id" ]: n ["label" ] for n in r ["nodes" ]}
587- found = False
588- for e in inherits_edges :
589- src_label = node_by_id .get (e ["source" ], "" )
590- tgt_label = node_by_id .get (e ["target" ], "" )
591- if "DataProcessor" in src_label and "Loggable" in tgt_label :
592- found = True
593- break
594- assert found , "extension should add conformance edge DataProcessor -> Loggable"
605+ assert ("DataProcessor" , "Loggable" ) in _edge_labels (r , "implements" )
606+
607+
608+ def test_swift_splits_inherits_and_implements ():
609+ r = extract_swift (FIXTURES / "sample.swift" )
610+ assert ("DataProcessor" , "BaseProcessor" ) in _edge_labels (r , "inherits" )
611+ assert ("DataProcessor" , "Processor" ) in _edge_labels (r , "implements" )
612+
613+
614+ def test_swift_parameter_return_generic_and_field_contexts ():
615+ r = extract_swift (FIXTURES / "sample.swift" )
616+ assert ("run" , "DataProcessor" ) in _edge_labels (r , "references" , "parameter_type" )
617+ assert ("run" , "Result" ) in _edge_labels (r , "references" , "return_type" )
618+ assert ("run" , "DataProcessor" ) in _edge_labels (r , "references" , "generic_arg" )
619+ assert ("DataProcessor" , "Result" ) in _edge_labels (r , "references" , "field" )
595620
596621def test_swift_emits_calls ():
597622 r = extract_swift (FIXTURES / "sample.swift" )
0 commit comments