@@ -133,24 +133,28 @@ extension XCTestCase {
133
133
134
134
func parseDirective< Directive: DirectiveConvertible > (
135
135
_ directive: Directive . Type ,
136
- source: ( ) -> String
136
+ content: ( ) -> String ,
137
+ file: StaticString = #file,
138
+ line: UInt = #line
137
139
) throws -> ( problemIdentifiers: [ String ] , directive: Directive ? ) {
138
140
let ( bundle, context) = try testBundleAndContext ( )
139
141
140
- let document = Document ( parsing: source ( ) , options: . parseBlockDirectives)
142
+ let source = URL ( fileURLWithPath: " /path/to/test-source- \( ProcessInfo . processInfo. globallyUniqueString) " )
143
+ let document = Document ( parsing: content ( ) , source: source, options: . parseBlockDirectives)
141
144
142
- let blockDirectiveContainer = try XCTUnwrap ( document. child ( at: 0 ) as? BlockDirective )
145
+ let blockDirectiveContainer = try XCTUnwrap ( document. child ( at: 0 ) as? BlockDirective , file : file , line : line )
143
146
144
147
var problems = [ Problem] ( )
145
148
let directive = directive. init (
146
149
from: blockDirectiveContainer,
147
- source: nil ,
150
+ source: source ,
148
151
for: bundle,
149
152
in: context,
150
153
problems: & problems
151
154
)
152
155
153
156
let problemIDs = problems. map { problem -> String in
157
+ XCTAssertNotNil ( problem. diagnostic. source, " Problem \( problem. diagnostic. identifier) is missing a source URL. " , file: file, line: line)
154
158
let line = problem. diagnostic. range? . lowerBound. line. description ?? " unknown-line "
155
159
156
160
return " \( line) : \( problem. diagnostic. severity) – \( problem. diagnostic. identifier) "
@@ -162,12 +166,16 @@ extension XCTestCase {
162
166
func parseDirective< Directive: RenderableDirectiveConvertible > (
163
167
_ directive: Directive . Type ,
164
168
in bundleName: String ? = nil ,
165
- source: ( ) -> String
169
+ content: ( ) -> String ,
170
+ file: StaticString = #file,
171
+ line: UInt = #line
166
172
) throws -> ( renderBlockContent: [ RenderBlockContent ] , problemIdentifiers: [ String ] , directive: Directive ? ) {
167
173
let ( renderedContent, problems, directive, _) = try parseDirective (
168
174
directive,
169
175
in: bundleName,
170
- source: source
176
+ content: content,
177
+ file: file,
178
+ line: line
171
179
)
172
180
173
181
return ( renderedContent, problems, directive)
@@ -176,7 +184,9 @@ extension XCTestCase {
176
184
func parseDirective< Directive: RenderableDirectiveConvertible > (
177
185
_ directive: Directive . Type ,
178
186
in bundleName: String ? = nil ,
179
- source: ( ) -> String
187
+ content: ( ) -> String ,
188
+ file: StaticString = #file,
189
+ line: UInt = #line
180
190
) throws -> (
181
191
renderBlockContent: [ RenderBlockContent ] ,
182
192
problemIdentifiers: [ String ] ,
@@ -193,18 +203,19 @@ extension XCTestCase {
193
203
}
194
204
context. diagnosticEngine. clearDiagnostics ( )
195
205
196
- let document = Document ( parsing: source ( ) , options: [ . parseBlockDirectives, . parseSymbolLinks] )
206
+ let source = URL ( fileURLWithPath: " /path/to/test-source- \( ProcessInfo . processInfo. globallyUniqueString) " )
207
+ let document = Document ( parsing: content ( ) , source: source, options: [ . parseBlockDirectives, . parseSymbolLinks] )
197
208
198
- let blockDirectiveContainer = try XCTUnwrap ( document. child ( at: 0 ) as? BlockDirective )
209
+ let blockDirectiveContainer = try XCTUnwrap ( document. child ( at: 0 ) as? BlockDirective , file : file , line : line )
199
210
200
- var analyzer = SemanticAnalyzer ( source: nil , context: context, bundle: bundle)
211
+ var analyzer = SemanticAnalyzer ( source: source , context: context, bundle: bundle)
201
212
let result = analyzer. visit ( blockDirectiveContainer)
202
213
context. diagnosticEngine. emit ( analyzer. problems)
203
214
204
215
var referenceResolver = MarkupReferenceResolver (
205
216
context: context,
206
217
bundle: bundle,
207
- source: nil ,
218
+ source: source ,
208
219
rootReference: bundle. rootReference
209
220
)
210
221
@@ -213,7 +224,8 @@ extension XCTestCase {
213
224
214
225
func problemIDs( ) throws -> [ String ] {
215
226
try context. problems. map { problem -> ( line: Int , severity: String , id: String ) in
216
- let line = try XCTUnwrap ( problem. diagnostic. range) . lowerBound. line
227
+ XCTAssertNotNil ( problem. diagnostic. source, " Problem \( problem. diagnostic. identifier) is missing a source URL. " , file: file, line: line)
228
+ let line = try XCTUnwrap ( problem. diagnostic. range, file: file, line: line) . lowerBound. line
217
229
return ( line, problem. diagnostic. severity. description, problem. diagnostic. identifier)
218
230
}
219
231
. sorted { lhs, rhs in
@@ -246,15 +258,16 @@ extension XCTestCase {
246
258
)
247
259
248
260
let renderedContent = try XCTUnwrap (
249
- directive. render ( with: & contentCompiler) as? [ RenderBlockContent ]
261
+ directive. render ( with: & contentCompiler) as? [ RenderBlockContent ] ,
262
+ file: file, line: line
250
263
)
251
264
252
265
let collectedReferences = contentCompiler. videoReferences
253
266
. mapValues { $0 as RenderReference }
254
267
. merging (
255
268
contentCompiler. imageReferences,
256
269
uniquingKeysWith: { videoReference, _ in
257
- XCTFail ( " Non-unique references. " )
270
+ XCTFail ( " Non-unique references. " , file : file , line : line )
258
271
return videoReference
259
272
}
260
273
)
0 commit comments