OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Unit tests for doc. | 5 /// Unit tests for doc. |
6 library dartdocTests; | 6 library dartdocTests; |
7 | 7 |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'dart:io'; | 9 import 'dart:io'; |
10 import '../../../../../pkg/pathos/lib/path.dart' as path; | 10 |
| 11 import 'package:pathos/path.dart' as path; |
| 12 import 'package:unittest/unittest.dart'; |
11 | 13 |
12 // TODO(rnystrom): Use "package:" URL (#4968). | 14 // TODO(rnystrom): Use "package:" URL (#4968). |
13 import '../lib/dartdoc.dart' as dd; | 15 import '../lib/dartdoc.dart' as dd; |
14 import '../lib/markdown.dart'; | 16 import '../lib/markdown.dart'; |
15 import 'markdown_test.dart'; | 17 import 'markdown_test.dart'; |
16 | 18 |
17 // TODO(rnystrom): Better path to unittest. | |
18 import '../../../../../pkg/unittest/lib/unittest.dart'; | |
19 | |
20 // Pretty test config with --human | 19 // Pretty test config with --human |
21 import '../../../../../utils/tests/pub/command_line_config.dart'; | 20 import '../../../../../utils/tests/pub/command_line_config.dart'; |
22 | 21 |
23 main() { | 22 main() { |
24 // Use the human-friendly config. | 23 // Use the human-friendly config. |
25 if (new Options().arguments.contains('--human')) { | 24 if (new Options().arguments.contains('--human')) { |
26 configure(new CommandLineConfiguration()); | 25 configure(new CommandLineConfiguration()); |
27 } | 26 } |
28 | 27 |
29 group('countOccurrences', () { | 28 group('countOccurrences', () { |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 expect(result.exitCode, 1); | 229 expect(result.exitCode, 1); |
231 }); | 230 }); |
232 }); | 231 }); |
233 }); | 232 }); |
234 } | 233 } |
235 | 234 |
236 void _testRunDartDoc(List<String> libraryPaths, void eval(ProcessResult)) { | 235 void _testRunDartDoc(List<String> libraryPaths, void eval(ProcessResult)) { |
237 expect(_runDartdoc(libraryPaths).then(eval), completes); | 236 expect(_runDartdoc(libraryPaths).then(eval), completes); |
238 } | 237 } |
239 | 238 |
240 /// Runs dartdoc with the libraryPaths provided, and completes to dartdoc's | 239 /// The path to the root directory of the dartdoc entrypoint. |
241 /// ProcessResult. | 240 String get _dartdocDir { |
242 Future<ProcessResult> _runDartdoc(List<String> libraryPaths) { | |
243 var dartBin = new Options().executable; | |
244 | |
245 var dir = path.absolute(new Options().script); | 241 var dir = path.absolute(new Options().script); |
246 while (path.basename(dir) != 'dartdoc') { | 242 while (path.basename(dir) != 'dartdoc') { |
247 if (!path.absolute(dir).contains('dartdoc') || dir == path.dirname(dir)) { | 243 if (!path.absolute(dir).contains('dartdoc') || dir == path.dirname(dir)) { |
248 fail('Unable to find root dartdoc directory.'); | 244 fail('Unable to find root dartdoc directory.'); |
249 } | 245 } |
250 dir = path.dirname(dir); | 246 dir = path.dirname(dir); |
251 } | 247 } |
252 var dartdoc = path.join(path.absolute(dir), 'bin/dartdoc.dart'); | 248 return path.absolute(dir); |
| 249 } |
253 | 250 |
254 final runArgs = [dartdoc]; | 251 /// The path to use for the package root for subprocesses. |
| 252 String get _packageRoot { |
| 253 var sdkVersionPath = path.join(_dartdocDir, '..', '..', '..', 'version'); |
| 254 if (new File(sdkVersionPath).existsSync()) { |
| 255 // It looks like dartdoc is being run from the SDK, so we should set the |
| 256 // package root to the SDK's packages directory. |
| 257 return path.absolute(path.join(_dartdocDir, '..', '..', '..', 'packages')); |
| 258 } |
| 259 |
| 260 // It looks like Dartdoc is being run from the Dart repo, so the package root |
| 261 // is in the build output directory. We can find that directory relative to |
| 262 // the Dart executable, but that could be in one of two places: in |
| 263 // "$BUILD/dart" or "$BUILD/dart-sdk/bin/dart". |
| 264 var executableDir = path.dirname(new Options().executable); |
| 265 if (new Directory(path.join(executableDir, 'dart-sdk')).existsSync()) { |
| 266 // The executable is in "$BUILD/dart". |
| 267 return path.absolute(path.join(executableDir, 'packages')); |
| 268 } else { |
| 269 // The executable is in "$BUILD/dart-sdk/bin/dart". |
| 270 return path.absolute(path.join(executableDir, '..', '..', 'packages')); |
| 271 } |
| 272 } |
| 273 |
| 274 /// Runs dartdoc with the libraryPaths provided, and completes to dartdoc's |
| 275 /// ProcessResult. |
| 276 Future<ProcessResult> _runDartdoc(List<String> libraryPaths) { |
| 277 var dartBin = new Options().executable; |
| 278 |
| 279 var dartdoc = path.join(_dartdocDir, 'bin/dartdoc.dart'); |
| 280 |
| 281 final runArgs = ['--package-root=$_packageRoot/', dartdoc]; |
255 | 282 |
256 // Turn relative libraryPaths to absolute ones. | 283 // Turn relative libraryPaths to absolute ones. |
257 runArgs.addAll(libraryPaths | 284 runArgs.addAll(libraryPaths |
258 .map((e) => path.join(dd.scriptDir.toNativePath(), e))); | 285 .map((e) => path.join(dd.scriptDir.toNativePath(), e))); |
259 | 286 |
260 return Process.run(dartBin, runArgs); | 287 return Process.run(dartBin, runArgs); |
261 } | 288 } |
262 | 289 |
263 final _dartdocCompletionRegExp = | 290 final _dartdocCompletionRegExp = |
264 new RegExp(r'Documentation complete -- documented (\d+) libraries, (\d+) types
, and (\d+) members\.'); | 291 new RegExp(r'Documentation complete -- documented (\d+) libraries, (\d+) types
, and (\d+) members\.'); |
(...skipping 25 matching lines...) Expand all Loading... |
290 } | 317 } |
291 } | 318 } |
292 | 319 |
293 | 320 |
294 validateDartdocMarkdown(String description, String markdown, | 321 validateDartdocMarkdown(String description, String markdown, |
295 String html) { | 322 String html) { |
296 var dartdoc = new dd.Dartdoc(); | 323 var dartdoc = new dd.Dartdoc(); |
297 validate(description, markdown, html, linkResolver: dartdoc.dartdocResolver, | 324 validate(description, markdown, html, linkResolver: dartdoc.dartdocResolver, |
298 inlineSyntaxes: dartdoc.dartdocSyntaxes); | 325 inlineSyntaxes: dartdoc.dartdocSyntaxes); |
299 } | 326 } |
OLD | NEW |