@@ -14,11 +14,12 @@ import XCTest
14
14
@testable import SwiftDocC
15
15
16
16
class PageKindTests : XCTestCase {
17
- func testPageKindSampleCode( ) throws {
18
- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
17
+
18
+ private func generateRenderNodeFromBundle( bundleName: String , resolvedTopicPath: String ) throws -> RenderNode {
19
+ let ( bundle, context) = try testBundleAndContext ( named: bundleName)
19
20
let reference = ResolvedTopicReference (
20
21
bundleIdentifier: bundle. identifier,
21
- path: " /documentation/SampleBundle/MyLocalSample " ,
22
+ path: resolvedTopicPath ,
22
23
sourceLanguage: . swift
23
24
)
24
25
let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
@@ -28,70 +29,43 @@ class PageKindTests: XCTestCase {
28
29
identifier: reference,
29
30
source: nil
30
31
)
31
- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
32
-
32
+ return try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
33
+ }
34
+
35
+ func testPageKindSampleCode( ) throws {
36
+ let renderNode = try generateRenderNodeFromBundle (
37
+ bundleName: " SampleBundle " ,
38
+ resolvedTopicPath: " /documentation/SampleBundle/MyLocalSample "
39
+ )
33
40
XCTAssertEqual ( renderNode. metadata. role, RenderMetadata . Role. sampleCode. rawValue)
34
41
XCTAssertEqual ( renderNode. metadata. roleHeading, Metadata . PageKind. Kind. sampleCode. titleHeading)
35
42
}
36
43
37
44
func testPageKindArticle( ) throws {
38
- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
39
- let reference = ResolvedTopicReference (
40
- bundleIdentifier: bundle. identifier,
41
- path: " /documentation/SampleBundle/MySample " ,
42
- sourceLanguage: . swift
45
+ let renderNode = try generateRenderNodeFromBundle (
46
+ bundleName: " SampleBundle " ,
47
+ resolvedTopicPath: " /documentation/SampleBundle/MySample "
43
48
)
44
- let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
45
- var translator = RenderNodeTranslator (
46
- context: context,
47
- bundle: bundle,
48
- identifier: reference,
49
- source: nil
50
- )
51
- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
52
49
53
50
XCTAssertEqual ( renderNode. metadata. role, RenderMetadata . Role. article. rawValue)
54
51
XCTAssertEqual ( renderNode. metadata. roleHeading, Metadata . PageKind. Kind. article. titleHeading)
55
52
}
56
53
57
54
func testPageKindDefault( ) throws {
58
- let ( bundle, context) = try testBundleAndContext ( named: " AvailabilityBundle " )
59
- let reference = ResolvedTopicReference (
60
- bundleIdentifier: bundle. identifier,
61
- path: " /documentation/AvailabilityBundle/ComplexAvailable " ,
62
- sourceLanguage: . swift
55
+ let renderNode = try generateRenderNodeFromBundle (
56
+ bundleName: " AvailabilityBundle " ,
57
+ resolvedTopicPath: " /documentation/AvailabilityBundle/ComplexAvailable "
63
58
)
64
- let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
65
- var translator = RenderNodeTranslator (
66
- context: context,
67
- bundle: bundle,
68
- identifier: reference,
69
- source: nil
70
- )
71
- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
72
-
73
59
XCTAssertEqual ( renderNode. metadata. role, " article " )
74
60
XCTAssertEqual ( renderNode. metadata. roleHeading, " Article " )
75
61
}
76
62
77
63
func testPageKindReference( ) throws {
78
- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
79
- let reference = ResolvedTopicReference (
80
- bundleIdentifier: bundle. identifier,
81
- path: " /documentation/SomeSample " ,
82
- sourceLanguage: . swift
83
- )
84
- let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
85
- var translator = RenderNodeTranslator (
86
- context: context,
87
- bundle: bundle,
88
- identifier: reference,
89
- source: nil
64
+ let renderNode = try generateRenderNodeFromBundle (
65
+ bundleName: " SampleBundle " ,
66
+ resolvedTopicPath: " /documentation/SomeSample "
90
67
)
91
- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
92
-
93
68
let sampleReference = try XCTUnwrap ( renderNode. references [ " doc://org.swift.docc.sample/documentation/SampleBundle/MyLocalSample " ] as? TopicRenderReference )
94
-
95
69
XCTAssertEqual ( sampleReference. role, RenderMetadata . Role. sampleCode. rawValue)
96
70
}
97
71
@@ -118,4 +92,24 @@ class PageKindTests: XCTestCase {
118
92
XCTAssert ( problems. isEmpty)
119
93
}
120
94
}
95
+
96
+ // Verify that we assign the `Collection` role to the root article of a
97
+ // documentation catalog that contains only one article.
98
+ func testRoleForSingleArticleCatalog( ) throws {
99
+ let renderNode = try generateRenderNodeFromBundle (
100
+ bundleName: " BundleWithSingleArticle " ,
101
+ resolvedTopicPath: " /documentation/Article "
102
+ )
103
+ XCTAssertEqual ( renderNode. metadata. role, RenderMetadata . Role. collection. rawValue)
104
+ }
105
+
106
+ // Verify we assign the `Collection` role to the root article of an article-only
107
+ // documentation catalog that doesn't include manual curation
108
+ func testRoleForArticleOnlyCatalogWithNoCuration( ) throws {
109
+ let renderNode = try generateRenderNodeFromBundle (
110
+ bundleName: " BundleWithArticlesNoCurated " ,
111
+ resolvedTopicPath: " /documentation/Article "
112
+ )
113
+ XCTAssertEqual ( renderNode. metadata. role, RenderMetadata . Role. collection. rawValue)
114
+ }
121
115
}
0 commit comments