@@ -274,7 +274,8 @@ class TaskGroupTests: XCTestCase {
274
274
XCTAssertEqual ( taskGroup. heading? . detachedFromParent. format ( ) , " ### Something Swift only " )
275
275
XCTAssertEqual ( taskGroup. abstract? . paragraph. detachedFromParent. format ( ) , " This link is only for Swift " )
276
276
XCTAssertEqual ( taskGroup. directives. count, 1 )
277
- for directive in taskGroup. directives {
277
+ XCTAssertEqual ( taskGroup. directives [ SupportedLanguage . directiveName] ? . count, 1 )
278
+ for directive in taskGroup. directives [ SupportedLanguage . directiveName] ?? [ ] {
278
279
XCTAssertEqual ( directive. name, " SupportedLanguage " )
279
280
XCTAssertEqual ( directive. arguments ( ) . count, 1 )
280
281
}
@@ -286,7 +287,8 @@ class TaskGroupTests: XCTestCase {
286
287
XCTAssertEqual ( taskGroup. heading? . detachedFromParent. format ( ) , " ### Something Objective-C only " )
287
288
XCTAssertEqual ( taskGroup. abstract? . paragraph. detachedFromParent. format ( ) , " This link is only for Objective-C " )
288
289
XCTAssertEqual ( taskGroup. directives. count, 1 )
289
- for directive in taskGroup. directives {
290
+ XCTAssertEqual ( taskGroup. directives [ SupportedLanguage . directiveName] ? . count, 1 )
291
+ for directive in taskGroup. directives [ SupportedLanguage . directiveName] ?? [ ] {
290
292
XCTAssertEqual ( directive. name, " SupportedLanguage " )
291
293
XCTAssertEqual ( directive. arguments ( ) . count, 1 )
292
294
}
@@ -297,8 +299,9 @@ class TaskGroupTests: XCTestCase {
297
299
let taskGroup = try XCTUnwrap ( topicSection. taskGroups. dropFirst ( 2 ) . first)
298
300
XCTAssertEqual ( taskGroup. heading? . detachedFromParent. format ( ) , " ### Something for both " )
299
301
XCTAssertEqual ( taskGroup. abstract? . paragraph. detachedFromParent. format ( ) , " This link is for both Swift and Objective-C " )
300
- XCTAssertEqual ( taskGroup. directives. count, 2 )
301
- for directive in taskGroup. directives {
302
+ XCTAssertEqual ( taskGroup. directives. count, 1 )
303
+ XCTAssertEqual ( taskGroup. directives [ SupportedLanguage . directiveName] ? . count, 2 )
304
+ for directive in taskGroup. directives [ SupportedLanguage . directiveName] ?? [ ] {
302
305
XCTAssertEqual ( directive. name, " SupportedLanguage " )
303
306
XCTAssertEqual ( directive. arguments ( ) . count, 1 )
304
307
}
@@ -314,6 +317,74 @@ class TaskGroupTests: XCTestCase {
314
317
}
315
318
}
316
319
320
+ func testOtherDirectivesAreIgnored( ) throws {
321
+ let markupSource = """
322
+ # Title
323
+
324
+ Abstract.
325
+
326
+ ## Topics
327
+
328
+ ### Something
329
+
330
+ A mix of different directives that aren't supported in task groups.
331
+
332
+ @Comment {
333
+ Some commented out markup
334
+ }
335
+
336
+ @Metadata {
337
+ }
338
+
339
+ @SomeUnknownDirective()
340
+
341
+ @SupportedLanguage(swift)
342
+
343
+ - ``SomeLink``
344
+
345
+ """
346
+ let document = Document ( parsing: markupSource, options: [ . parseBlockDirectives, . parseSymbolLinks] )
347
+ let markupModel = DocumentationMarkup ( markup: document)
348
+
349
+ XCTAssertEqual ( " Abstract. " , Paragraph ( markupModel. abstractSection? . content. compactMap { $0 as? InlineMarkup } ?? [ ] ) . detachedFromParent. format ( ) )
350
+
351
+ let topicSection = try XCTUnwrap ( markupModel. topicsSection)
352
+ XCTAssertEqual ( topicSection. taskGroups. count, 1 )
353
+
354
+ let taskGroup = try XCTUnwrap ( topicSection. taskGroups. first)
355
+ XCTAssertEqual ( taskGroup. heading? . detachedFromParent. format ( ) , " ### Something " )
356
+ XCTAssertEqual ( taskGroup. abstract? . paragraph. detachedFromParent. format ( ) , " A mix of different directives that aren’t supported in task groups. " )
357
+ XCTAssertEqual ( taskGroup. directives. count, 4 )
358
+
359
+ XCTAssertEqual ( taskGroup. directives [ Comment . directiveName] ? . count, 1 )
360
+ if let comment = taskGroup. directives [ Comment . directiveName] ? . first {
361
+ XCTAssertEqual ( comment. name, " Comment " )
362
+ XCTAssertEqual ( comment. childCount, 1 )
363
+ XCTAssert ( comment. arguments ( ) . isEmpty)
364
+ }
365
+
366
+ XCTAssertEqual ( taskGroup. directives [ Metadata . directiveName] ? . count, 1 )
367
+ if let metadata = taskGroup. directives [ Metadata . directiveName] ? . first {
368
+ XCTAssertEqual ( metadata. name, " Metadata " )
369
+ XCTAssertEqual ( metadata. childCount, 0 )
370
+ XCTAssertEqual ( metadata. childCount, 0 )
371
+ XCTAssert ( metadata. arguments ( ) . isEmpty)
372
+ }
373
+
374
+ if let directive = taskGroup. directives [ " SomeUnknownDirective " ] ? . first {
375
+ XCTAssertEqual ( directive. childCount, 0 )
376
+ XCTAssert ( directive. arguments ( ) . isEmpty)
377
+ }
378
+ XCTAssertEqual ( taskGroup. directives [ SupportedLanguage . directiveName] ? . count, 1 )
379
+ if let supportedLanguage = taskGroup. directives [ SupportedLanguage . directiveName] ? . first {
380
+ XCTAssertEqual ( supportedLanguage. name, " SupportedLanguage " )
381
+ XCTAssertEqual ( supportedLanguage. childCount, 0 )
382
+ XCTAssertEqual ( supportedLanguage. arguments ( ) . count, 1 )
383
+ }
384
+
385
+ XCTAssertEqual ( taskGroup. links. count, 1 )
386
+ }
387
+
317
388
func testTopicContentOrder( ) throws {
318
389
func assertExpectedParsedTaskGroupContent( _ content: String , file: StaticString = #file, line: UInt = #line) throws {
319
390
let document = Document ( parsing: """
@@ -340,8 +411,9 @@ class TaskGroupTests: XCTestCase {
340
411
" Discussion paragraph 2 " ,
341
412
] , file: file, line: line)
342
413
XCTAssertEqual ( taskGroup. directives. count, 1 , file: file, line: line)
343
- XCTAssertEqual ( taskGroup. directives. first? . name, " SupportedLanguage " , file: file, line: line)
344
- XCTAssertEqual ( taskGroup. directives. first? . arguments ( ) . count, 1 , file: file, line: line)
414
+ XCTAssertEqual ( taskGroup. directives. keys. first, SupportedLanguage . directiveName, file: file, line: line)
415
+ XCTAssertEqual ( taskGroup. directives [ SupportedLanguage . directiveName] ? . first? . name, " SupportedLanguage " , file: file, line: line)
416
+ XCTAssertEqual ( taskGroup. directives [ SupportedLanguage . directiveName] ? . first? . arguments ( ) . count, 1 , file: file, line: line)
345
417
XCTAssertEqual ( taskGroup. links. map ( \. destination) , [ " Link1 " , " Link2 " ] , file: file, line: line)
346
418
}
347
419
0 commit comments