@@ -5340,6 +5340,78 @@ let expected = """
5340
5340
}
5341
5341
}
5342
5342
}
5343
+
5344
+ func testResolveExternalLinkFromTechnologyRoot( ) throws {
5345
+ enableFeatureFlag ( \. isExperimentalLinkHierarchySerializationEnabled)
5346
+
5347
+ let externalModuleName = " ExternalModuleName "
5348
+
5349
+ func makeExternalResolver( ) throws -> ExternalPathHierarchyResolver {
5350
+ let ( bundle, context) = try loadBundle (
5351
+ catalog: Folder ( name: " Dependency.docc " , content: [
5352
+ JSONFile ( name: " \( externalModuleName) .symbols.json " , content: makeSymbolGraph ( moduleName: externalModuleName) ) ,
5353
+ TextFile ( name: " Extension.md " , utf8Content: """
5354
+ # `` \( externalModuleName) ``
5355
+
5356
+ Some description of this module.
5357
+ """ )
5358
+ ] )
5359
+ )
5360
+
5361
+ // Retrieve the link information from the dependency, as if '--enable-experimental-external-link-support' was passed to DocC
5362
+ let converter = DocumentationNodeConverter ( bundle: bundle, context: context)
5363
+ let linkSummaries : [ LinkDestinationSummary ] = try context. knownPages. flatMap { reference in
5364
+ let entity = try context. entity ( with: reference)
5365
+ let renderNode = try XCTUnwrap ( converter. convert ( entity) )
5366
+
5367
+ return entity. externallyLinkableElementSummaries ( context: context, renderNode: renderNode, includeTaskGroups: false )
5368
+ }
5369
+ let linkResolutionInformation = try context. linkResolver. localResolver. prepareForSerialization ( bundleID: bundle. identifier)
5370
+
5371
+ return ExternalPathHierarchyResolver ( linkInformation: linkResolutionInformation, entityInformation: linkSummaries)
5372
+ }
5373
+
5374
+ let catalog = Folder ( name: " unit-test.docc " , content: [
5375
+ TextFile ( name: " Root.md " , utf8Content: """
5376
+ # Some root page
5377
+
5378
+ A single-file article-only catalog.
5379
+
5380
+ This root links to an external module ``/ \( externalModuleName) ``
5381
+ """ ) ,
5382
+ ] )
5383
+
5384
+ let ( _, bundle, context) = try loadBundle ( from: createTempFolder ( content: [ catalog] ) ) { context in
5385
+ context. linkResolver. externalResolvers = [ externalModuleName: try makeExternalResolver ( ) ]
5386
+ }
5387
+
5388
+ XCTAssert ( context. problems. isEmpty, " Unexpected problems: \( context. problems. map ( \. diagnostic. summary) ) " )
5389
+ let reference = try XCTUnwrap ( context. soleRootModuleReference)
5390
+ let node = try context. entity ( with: reference)
5391
+
5392
+ let converter = DocumentationNodeConverter ( bundle: bundle, context: context)
5393
+ let renderNode = try converter. convert ( node)
5394
+
5395
+ let externalReference = " doc://Dependency/documentation/ExternalModuleName "
5396
+
5397
+ // Verify that the rendered page contains the resolved reference
5398
+ let discussionSection = try XCTUnwrap ( renderNode. primaryContentSections. first as? ContentRenderSection )
5399
+ XCTAssertEqual ( discussionSection. content, [
5400
+ . heading( . init( level: 2 , text: " Overview " , anchor: " overview " ) ) ,
5401
+
5402
+ . paragraph( . init( inlineContent: [
5403
+ . text( " This root links to an external module " ) ,
5404
+ . reference( identifier: RenderReferenceIdentifier ( externalReference) , isActive: true , overridingTitle: nil , overridingTitleInlineContent: nil )
5405
+ ] ) )
5406
+ ] )
5407
+
5408
+ // Verify that the rendered page has the render details about the resolved reference
5409
+ XCTAssertEqual ( renderNode. references. keys. sorted ( ) , [ externalReference] )
5410
+
5411
+ let externalRenderReference = try XCTUnwrap ( renderNode. references [ externalReference] as? TopicRenderReference )
5412
+ XCTAssertEqual ( externalRenderReference. title, externalModuleName)
5413
+ XCTAssertEqual ( externalRenderReference. abstract, [ . text( " Some description of this module. " ) ] )
5414
+ }
5343
5415
}
5344
5416
5345
5417
func assertEqualDumps( _ lhs: String , _ rhs: String , file: StaticString = #file, line: UInt = #line) {
0 commit comments