@@ -75,20 +75,8 @@ class SampleDownloadTests: XCTestCase {
7575 }
7676
7777 func testParseSampleDownload( ) throws {
78- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
79- let reference = ResolvedTopicReference (
80- bundleIdentifier: bundle. identifier,
81- path: " /documentation/SampleBundle/MySample " ,
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
90- )
91- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
78+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/MySample " )
79+
9280 let sampleCodeDownload = try XCTUnwrap ( renderNode. sampleDownload)
9381 guard case . reference( identifier: let ident, isActive: true , overridingTitle: " Download " , overridingTitleInlineContent: nil ) = sampleCodeDownload. action else {
9482 XCTFail ( " Unexpected action in callToAction " )
@@ -98,20 +86,8 @@ class SampleDownloadTests: XCTestCase {
9886 }
9987
10088 func testParseSampleLocalDownload( ) throws {
101- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
102- let reference = ResolvedTopicReference (
103- bundleIdentifier: bundle. identifier,
104- path: " /documentation/SampleBundle/MyLocalSample " ,
105- sourceLanguage: . swift
106- )
107- let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
108- var translator = RenderNodeTranslator (
109- context: context,
110- bundle: bundle,
111- identifier: reference,
112- source: nil
113- )
114- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
89+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/MyLocalSample " )
90+
11591 let sampleCodeDownload = try XCTUnwrap ( renderNode. sampleDownload)
11692 guard case . reference( identifier: let ident, isActive: true , overridingTitle: " Download " , overridingTitleInlineContent: nil ) = sampleCodeDownload. action else {
11793 XCTFail ( " Unexpected action in callToAction " )
@@ -121,20 +97,7 @@ class SampleDownloadTests: XCTestCase {
12197 }
12298
12399 func testSampleDownloadRoundtrip( ) throws {
124- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
125- let reference = ResolvedTopicReference (
126- bundleIdentifier: bundle. identifier,
127- path: " /documentation/SampleBundle/MySample " ,
128- sourceLanguage: . swift
129- )
130- let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
131- var translator = RenderNodeTranslator (
132- context: context,
133- bundle: bundle,
134- identifier: reference,
135- source: nil
136- )
137- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
100+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/MySample " )
138101
139102 let encoder = JSONEncoder ( )
140103 let decoder = JSONDecoder ( )
@@ -161,12 +124,12 @@ class SampleDownloadTests: XCTestCase {
161124
162125 XCTAssertEqual ( origIdent, decodedIdent)
163126 }
164-
165- func testSampleDownloadRelativeURL ( ) throws {
127+
128+ private func renderNodeFromSampleBundle ( at referencePath : String ) throws -> RenderNode {
166129 let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
167130 let reference = ResolvedTopicReference (
168131 bundleIdentifier: bundle. identifier,
169- path: " /documentation/SampleBundle/RelativeURLSample " ,
132+ path: referencePath ,
170133 sourceLanguage: . swift
171134 )
172135 let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
@@ -176,7 +139,11 @@ class SampleDownloadTests: XCTestCase {
176139 identifier: reference,
177140 source: nil
178141 )
179- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
142+ return try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
143+ }
144+
145+ func testSampleDownloadRelativeURL( ) throws {
146+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/RelativeURLSample " )
180147 let sampleCodeDownload = try XCTUnwrap ( renderNode. sampleDownload)
181148 guard case . reference( identifier: let ident, isActive: true , overridingTitle: " Download " , overridingTitleInlineContent: nil ) = sampleCodeDownload. action else {
182149 XCTFail ( " Unexpected action in callToAction " )
@@ -197,20 +164,7 @@ class SampleDownloadTests: XCTestCase {
197164 }
198165
199166 func testExternalLocationRoundtrip( ) throws {
200- let ( bundle, context) = try testBundleAndContext ( named: " SampleBundle " )
201- let reference = ResolvedTopicReference (
202- bundleIdentifier: bundle. identifier,
203- path: " /documentation/SampleBundle/RelativeURLSample " ,
204- sourceLanguage: . swift
205- )
206- let article = try XCTUnwrap ( context. entity ( with: reference) . semantic as? Article )
207- var translator = RenderNodeTranslator (
208- context: context,
209- bundle: bundle,
210- identifier: reference,
211- source: nil
212- )
213- let renderNode = try XCTUnwrap ( translator. visitArticle ( article) as? RenderNode )
167+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/RelativeURLSample " )
214168 let sampleCodeDownload = try XCTUnwrap ( renderNode. sampleDownload)
215169 guard case . reference( identifier: let ident, isActive: true , overridingTitle: " Download " , overridingTitleInlineContent: nil ) = sampleCodeDownload. action else {
216170 XCTFail ( " Unexpected action in callToAction " )
@@ -260,4 +214,30 @@ class SampleDownloadTests: XCTestCase {
260214 XCTAssertEqual ( firstJson, finalJson)
261215 }
262216 }
217+
218+ func testExternalLinkOnSampleCodePage( ) throws {
219+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/MyExternalSample " )
220+ let sampleCodeDownload = try XCTUnwrap ( renderNode. sampleDownload)
221+ guard case . reference( identifier: let identifier, isActive: true , overridingTitle: " View Source " , overridingTitleInlineContent: nil ) = sampleCodeDownload. action else {
222+ XCTFail ( " Unexpected action in callToAction " )
223+ return
224+ }
225+
226+ XCTAssertEqual ( identifier. identifier, " https://www.example.com/source-repository.git " )
227+ let reference = try XCTUnwrap ( renderNode. references [ identifier. identifier] )
228+ XCTAssert ( reference is ExternalLocationReference )
229+ }
230+
231+ func testExternalLinkOnRegularArticlePage( ) throws {
232+ let renderNode = try renderNodeFromSampleBundle ( at: " /documentation/SampleBundle/MyArticle " )
233+ let sampleCodeDownload = try XCTUnwrap ( renderNode. sampleDownload)
234+ guard case . reference( identifier: let identifier, isActive: true , overridingTitle: " Visit " , overridingTitleInlineContent: nil ) = sampleCodeDownload. action else {
235+ XCTFail ( " Unexpected action in callToAction " )
236+ return
237+ }
238+
239+ XCTAssertEqual ( identifier. identifier, " https://www.example.com " )
240+ let reference = try XCTUnwrap ( renderNode. references [ identifier. identifier] )
241+ XCTAssert ( reference is ExternalLocationReference )
242+ }
263243}
0 commit comments