@@ -2820,7 +2820,85 @@ class PathHierarchyTests: XCTestCase {
2820
2820
XCTAssertEqual ( paths [ containerID] , " /ModuleName/ContainerName " )
2821
2821
XCTAssertEqual ( paths [ memberID] , " /ModuleName/ContainerName/memberName " ) // The Swift spelling is preferred
2822
2822
}
2823
-
2823
+
2824
+ func testLanguageRepresentationsWithDifferentParentKinds( ) throws {
2825
+ enableFeatureFlag ( \. isExperimentalLinkHierarchySerializationEnabled)
2826
+
2827
+ let containerID = " some-container-symbol-id "
2828
+ let memberID = " some-member-symbol-id "
2829
+
2830
+ let catalog = Folder ( name: " unit-test.docc " , content: [
2831
+ Folder ( name: " clang " , content: [
2832
+ JSONFile ( name: " ModuleName.symbols.json " , content: makeSymbolGraph (
2833
+ moduleName: " ModuleName " ,
2834
+ symbols: [
2835
+ makeSymbol ( id: containerID, language: . objectiveC, kind: . union, pathComponents: [ " ContainerName " ] ) ,
2836
+ makeSymbol ( id: memberID, language: . objectiveC, kind: . property, pathComponents: [ " ContainerName " , " MemberName " ] ) ,
2837
+ ] ,
2838
+ relationships: [
2839
+ . init( source: memberID, target: containerID, kind: . memberOf, targetFallback: nil )
2840
+ ]
2841
+ ) ) ,
2842
+ ] ) ,
2843
+
2844
+ Folder ( name: " swift " , content: [
2845
+ JSONFile ( name: " ModuleName.symbols.json " , content: makeSymbolGraph (
2846
+ moduleName: " ModuleName " ,
2847
+ symbols: [
2848
+ makeSymbol ( id: containerID, kind: . struct, pathComponents: [ " ContainerName " ] ) ,
2849
+ makeSymbol ( id: memberID, kind: . property, pathComponents: [ " ContainerName " , " MemberName " ] ) ,
2850
+ ] ,
2851
+ relationships: [
2852
+ . init( source: memberID, target: containerID, kind: . memberOf, targetFallback: nil )
2853
+ ]
2854
+ ) ) ,
2855
+ ] )
2856
+ ] )
2857
+
2858
+ let ( _, context) = try loadBundle ( catalog: catalog)
2859
+ let tree = context. linkResolver. localResolver. pathHierarchy
2860
+
2861
+ let resolvedSwiftContainerID = try tree. find ( path: " /ModuleName/ContainerName-struct " , onlyFindSymbols: true )
2862
+ let resolvedSwiftContainer = try XCTUnwrap ( tree. lookup [ resolvedSwiftContainerID] )
2863
+ XCTAssertEqual ( resolvedSwiftContainer. name, " ContainerName " )
2864
+ XCTAssertEqual ( resolvedSwiftContainer. symbol? . identifier. precise, containerID)
2865
+ XCTAssertEqual ( resolvedSwiftContainer. symbol? . kind. identifier, . struct)
2866
+ XCTAssertEqual ( resolvedSwiftContainer. languages, [ . swift] )
2867
+
2868
+ let resolvedObjcContainerID = try tree. find ( path: " /ModuleName/ContainerName-union " , onlyFindSymbols: true )
2869
+ let resolvedObjcContainer = try XCTUnwrap ( tree. lookup [ resolvedObjcContainerID] )
2870
+ XCTAssertEqual ( resolvedObjcContainer. name, " ContainerName " )
2871
+ XCTAssertEqual ( resolvedObjcContainer. symbol? . identifier. precise, containerID)
2872
+ XCTAssertEqual ( resolvedObjcContainer. symbol? . kind. identifier, . union)
2873
+ XCTAssertEqual ( resolvedObjcContainer. languages, [ . objectiveC] )
2874
+
2875
+ let resolvedContainerID = try tree. find ( path: " /ModuleName/ContainerName " , onlyFindSymbols: true )
2876
+ XCTAssertEqual ( resolvedContainerID, resolvedSwiftContainerID)
2877
+
2878
+ let resolvedSwiftMemberID = try tree. find ( path: " /ModuleName/ContainerName-struct/MemberName " , onlyFindSymbols: true )
2879
+ let resolvedSwiftMember = try XCTUnwrap ( tree. lookup [ resolvedSwiftMemberID] )
2880
+ XCTAssertEqual ( resolvedSwiftMember. name, " MemberName " )
2881
+ XCTAssertEqual ( resolvedSwiftMember. parent? . identifier, resolvedSwiftContainerID)
2882
+ XCTAssertEqual ( resolvedSwiftMember. symbol? . identifier. precise, memberID)
2883
+ XCTAssertEqual ( resolvedSwiftMember. symbol? . kind. identifier, . property)
2884
+ XCTAssertEqual ( resolvedSwiftMember. languages, [ . swift] )
2885
+
2886
+ let resolvedObjcMemberID = try tree. find ( path: " /ModuleName/ContainerName-union/MemberName " , onlyFindSymbols: true )
2887
+ let resolvedObjcMember = try XCTUnwrap ( tree. lookup [ resolvedObjcMemberID] )
2888
+ XCTAssertEqual ( resolvedObjcMember. name, " MemberName " )
2889
+ XCTAssertEqual ( resolvedObjcMember. parent? . identifier, resolvedObjcContainerID)
2890
+ XCTAssertEqual ( resolvedObjcMember. symbol? . identifier. precise, memberID)
2891
+ XCTAssertEqual ( resolvedObjcMember. symbol? . kind. identifier, . property)
2892
+ XCTAssertEqual ( resolvedObjcMember. languages, [ . objectiveC] )
2893
+
2894
+ let resolvedMemberID = try tree. find ( path: " /ModuleName/ContainerName/MemberName " , onlyFindSymbols: true )
2895
+ XCTAssertEqual ( resolvedMemberID, resolvedSwiftMemberID)
2896
+
2897
+ let paths = tree. caseInsensitiveDisambiguatedPaths ( )
2898
+ XCTAssertEqual ( paths [ containerID] , " /ModuleName/ContainerName " )
2899
+ XCTAssertEqual ( paths [ memberID] , " /ModuleName/ContainerName/MemberName " )
2900
+ }
2901
+
2824
2902
func testMixedLanguageSymbolAndItsExtendingModuleWithDifferentContainerNames( ) throws {
2825
2903
let containerID = " some-container-symbol-id "
2826
2904
let memberID = " some-member-symbol-id "
0 commit comments