@@ -3196,6 +3196,78 @@ class ConvertActionTests: XCTestCase {
3196
3196
XCTAssertEqual ( logLines. filter { $0. hasPrefix ( " warning: No symbol matched 'ModuleThatDoesNotExist'. Can't resolve 'ModuleThatDoesNotExist'. " ) } . count, 1 )
3197
3197
}
3198
3198
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
+ 
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
+
3246
+ │ ├─ image-name~dark.png
3247
+
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
+
3199
3271
#endif
3200
3272
}
3201
3273
0 commit comments