@@ -41,6 +41,11 @@ class ExternalRenderNodeTests: XCTestCase {
4141 title: " SwiftSymbol " ,
4242 kind: . class,
4343 language: . swift,
44+ declarationFragments: . init( declarationFragments: [
45+ . init( kind: . keyword, spelling: " class " , preciseIdentifier: nil ) ,
46+ . init( kind: . text, spelling: " " , preciseIdentifier: nil ) ,
47+ . init( kind: . identifier, spelling: " SwiftSymbol " , preciseIdentifier: nil )
48+ ] ) ,
4449 platforms: [ . init( name: " iOS " , introduced: nil , isBeta: true ) ]
4550 )
4651 )
@@ -50,6 +55,13 @@ class ExternalRenderNodeTests: XCTestCase {
5055 title: " ObjCSymbol " ,
5156 kind: . function,
5257 language: . objectiveC,
58+ declarationFragments: . init( declarationFragments: [
59+ . init( kind: . text, spelling: " - " , preciseIdentifier: nil ) ,
60+ . init( kind: . text, spelling: " ( " , preciseIdentifier: nil ) ,
61+ . init( kind: . typeIdentifier, spelling: " void " , preciseIdentifier: nil ) ,
62+ . init( kind: . text, spelling: " ) " , preciseIdentifier: nil ) ,
63+ . init( kind: . identifier, spelling: " ObjCSymbol " , preciseIdentifier: nil )
64+ ] ) ,
5365 platforms: [ . init( name: " macOS " , introduced: nil , isBeta: false ) ]
5466 )
5567 )
@@ -152,12 +164,14 @@ class ExternalRenderNodeTests: XCTestCase {
152164 )
153165 XCTAssertEqual ( swiftNavigatorExternalRenderNode. metadata. title, swiftTitle)
154166 XCTAssertFalse ( swiftNavigatorExternalRenderNode. metadata. isBeta)
155-
167+ XCTAssertEqual ( swiftNavigatorExternalRenderNode. metadata. fragments, swiftFragments)
168+
156169 let objcNavigatorExternalRenderNode = try XCTUnwrap (
157170 NavigatorExternalRenderNode ( renderNode: externalRenderNode, trait: . interfaceLanguage( SourceLanguage . objectiveC. id) )
158171 )
159172 XCTAssertEqual ( objcNavigatorExternalRenderNode. metadata. title, objcTitle)
160173 XCTAssertFalse ( objcNavigatorExternalRenderNode. metadata. isBeta)
174+ XCTAssertEqual ( objcNavigatorExternalRenderNode. metadata. fragments, objcFragments)
161175 }
162176
163177 func testNavigatorWithExternalNodes( ) async throws {
@@ -218,19 +232,38 @@ class ExternalRenderNodeTests: XCTestCase {
218232 XCTAssertEqual ( renderIndex. interfaceLanguages [ SourceLanguage . swift. id] ? . count ( where: \. isExternal) , 0 )
219233 XCTAssertEqual ( renderIndex. interfaceLanguages [ SourceLanguage . objectiveC. id] ? . count ( where: \. isExternal) , 0 )
220234
235+
236+ func externalNodes( by language: SourceLanguage ) -> [ RenderIndex . Node ] ? {
237+ renderIndex. interfaceLanguages [ language. id] ? . first? . children? . filter ( \. isExternal)
238+ }
239+
221240 // Verify that the curated external links are part of the index.
222- let swiftExternalNodes = ( renderIndex. interfaceLanguages [ SourceLanguage . swift. id] ? . first? . children? . filter ( \. isExternal) ?? [ ] ) . sorted ( by: \. title)
223- let objcExternalNodes = ( renderIndex. interfaceLanguages [ SourceLanguage . objectiveC. id] ? . first? . children? . filter ( \. isExternal) ?? [ ] ) . sorted ( by: \. title)
241+ let swiftExternalNodes = try XCTUnwrap ( externalNodes ( by: . swift) )
224242 XCTAssertEqual ( swiftExternalNodes. count, 2 )
243+
244+ let objcExternalNodes = try XCTUnwrap ( externalNodes ( by: . objectiveC) )
225245 XCTAssertEqual ( objcExternalNodes. count, 2 )
226- XCTAssertEqual ( swiftExternalNodes. map ( \. title) , [ " SwiftArticle " , " SwiftSymbol " ] )
227- XCTAssertEqual ( objcExternalNodes. map ( \. title) , [ " ObjCArticle " , " ObjCSymbol " ] )
228- XCTAssert ( swiftExternalNodes. first? . isBeta == false )
229- XCTAssert ( swiftExternalNodes. last? . isBeta == true )
230- XCTAssert ( objcExternalNodes. first? . isBeta == true )
231- XCTAssert ( objcExternalNodes. last? . isBeta == false )
232- XCTAssertEqual ( swiftExternalNodes. map ( \. type) , [ " article " , " class " ] )
233- XCTAssertEqual ( objcExternalNodes. map ( \. type) , [ " article " , " func " ] )
246+
247+ let swiftArticleExternalNode = try XCTUnwrap ( swiftExternalNodes. first ( where: { $0. path == " /path/to/external/swiftarticle " } ) )
248+ let swiftSymbolExternalNode = try XCTUnwrap ( swiftExternalNodes. first ( where: { $0. path == " /path/to/external/swiftsymbol " } ) )
249+ let objcArticleExternalNode = try XCTUnwrap ( objcExternalNodes. first ( where: { $0. path == " /path/to/external/objcarticle " } ) )
250+ let objcSymbolExternalNode = try XCTUnwrap ( objcExternalNodes. first ( where: { $0. path == " /path/to/external/objcsymbol " } ) )
251+
252+ XCTAssertEqual ( swiftArticleExternalNode. title, " SwiftArticle " )
253+ XCTAssertEqual ( swiftArticleExternalNode. isBeta, false )
254+ XCTAssertEqual ( swiftArticleExternalNode. type, " article " )
255+
256+ XCTAssertEqual ( swiftSymbolExternalNode. title, " SwiftSymbol " ) // Classes don't use declaration fragments in their navigator title
257+ XCTAssertEqual ( swiftSymbolExternalNode. isBeta, true )
258+ XCTAssertEqual ( swiftSymbolExternalNode. type, " class " )
259+
260+ XCTAssertEqual ( objcArticleExternalNode. title, " ObjCArticle " )
261+ XCTAssertEqual ( objcArticleExternalNode. isBeta, true )
262+ XCTAssertEqual ( objcArticleExternalNode. type, " article " )
263+
264+ XCTAssertEqual ( objcSymbolExternalNode. title, " - (void) ObjCSymbol " )
265+ XCTAssertEqual ( objcSymbolExternalNode. isBeta, false )
266+ XCTAssertEqual ( objcSymbolExternalNode. type, " func " )
234267 }
235268
236269 func testNavigatorWithExternalNodesOnlyAddsCuratedNodesToNavigator( ) async throws {
@@ -299,7 +332,7 @@ class ExternalRenderNodeTests: XCTestCase {
299332 XCTAssertEqual ( swiftExternalNodes. count, 1 )
300333 XCTAssertEqual ( objcExternalNodes. count, 1 )
301334 XCTAssertEqual ( swiftExternalNodes. map ( \. title) , [ " SwiftArticle " ] )
302- XCTAssertEqual ( objcExternalNodes. map ( \. title) , [ " ObjCSymbol " ] )
335+ XCTAssertEqual ( objcExternalNodes. map ( \. title) , [ " - (void) ObjCSymbol" ] )
303336 XCTAssertEqual ( swiftExternalNodes. map ( \. type) , [ " article " ] )
304337 XCTAssertEqual ( objcExternalNodes. map ( \. type) , [ " func " ] )
305338 }
0 commit comments