Skip to content

Commit 8f2fbc8

Browse files
authored
Use the asset's per module file path in the render JSON (#832)
rdar://123145729
1 parent 491d26a commit 8f2fbc8

File tree

2 files changed

+72
-2
lines changed

2 files changed

+72
-2
lines changed

Sources/SwiftDocCUtilities/Action/Actions/Convert/JSONEncodingRenderNodeWriter.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,6 @@ class JSONEncodingRenderNodeWriter {
7878
}
7979
}
8080

81-
let encoder = RenderJSONEncoder.makeEncoder()
82-
8381
let data = try renderNode.encodeToJSON(with: encoder, renderReferenceCache: renderReferenceCache)
8482
try fileManager.createFile(at: renderNodeTargetFileURL, contents: data, options: nil)
8583

Tests/SwiftDocCUtilitiesTests/ConvertActionTests.swift

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3196,6 +3196,78 @@ class ConvertActionTests: XCTestCase {
31963196
XCTAssertEqual(logLines.filter { $0.hasPrefix("warning: No symbol matched 'ModuleThatDoesNotExist'. Can't resolve 'ModuleThatDoesNotExist'.") }.count, 1)
31973197
}
31983198

3199+
func testEncodedImagePaths() throws {
3200+
let catalog = Folder(name: "unit-test.docc", content: [
3201+
TextFile(name: "Something.md", utf8Content: """
3202+
# Something
3203+
3204+
This article links to some assets
3205+
3206+
![Some alt text](image-name)
3207+
"""),
3208+
3209+
// Image variants
3210+
DataFile(name: "image-name.png", data: Data()),
3211+
DataFile(name: "image-name~dark.png", data: Data()),
3212+
DataFile(name: "[email protected]", data: Data()),
3213+
DataFile(name: "[email protected]", data: Data()),
3214+
])
3215+
3216+
let fileSystem = try TestFileSystem(folders: [catalog])
3217+
let targetURL = URL(fileURLWithPath: "/Output.doccarchive")
3218+
3219+
var action = try ConvertAction(
3220+
documentationBundleURL: catalog.absoluteURL,
3221+
outOfProcessResolver: nil,
3222+
analyze: false,
3223+
targetDirectory: targetURL,
3224+
htmlTemplateDirectory: Folder.emptyHTMLTemplateDirectory.absoluteURL,
3225+
emitDigest: false,
3226+
currentPlatforms: nil,
3227+
dataProvider: fileSystem,
3228+
fileManager: fileSystem,
3229+
temporaryDirectory: fileSystem.temporaryDirectory
3230+
)
3231+
3232+
let result = try action.perform(logHandle: .none)
3233+
XCTAssertEqual(result.outputs, [targetURL])
3234+
3235+
XCTAssertEqual(fileSystem.dump(subHierarchyFrom: targetURL.path), """
3236+
Output.doccarchive/
3237+
├─ data/
3238+
│ ╰─ documentation/
3239+
│ ╰─ something.json
3240+
├─ downloads/
3241+
│ ╰─ unit-test/
3242+
├─ images/
3243+
│ ╰─ unit-test/
3244+
│ ├─ image-name.png
3245+
│ ├─ [email protected]
3246+
│ ├─ image-name~dark.png
3247+
│ ╰─ [email protected]
3248+
├─ metadata.json
3249+
╰─ videos/
3250+
╰─ unit-test/
3251+
""")
3252+
3253+
XCTAssert(fileSystem.fileExists(atPath: targetURL.appendingPathComponent("images/unit-test/image-name.png").path))
3254+
let pageURL = targetURL.appendingPathComponent("data/documentation/something.json")
3255+
XCTAssert(fileSystem.fileExists(atPath: pageURL.path))
3256+
3257+
let renderNode = try JSONDecoder().decode(RenderNode.self, from: fileSystem.contentsOfURL(pageURL))
3258+
3259+
XCTAssertEqual(renderNode.references.keys.sorted(), ["image-name"])
3260+
let imageReference = try XCTUnwrap(renderNode.references["image-name"] as? ImageReference)
3261+
3262+
XCTAssertEqual(imageReference.altText, "Some alt text")
3263+
XCTAssertEqual(imageReference.asset.variants.values.map(\.absoluteString).sorted(), [
3264+
"/images/unit-test/image-name.png",
3265+
"/images/unit-test/[email protected]",
3266+
"/images/unit-test/image-name~dark.png",
3267+
"/images/unit-test/[email protected]"
3268+
])
3269+
}
3270+
31993271
#endif
32003272
}
32013273

0 commit comments

Comments
 (0)