Index: sdk/lib/_internal/dartdoc/test/dartdoc_test.dart |
=================================================================== |
--- sdk/lib/_internal/dartdoc/test/dartdoc_test.dart (revision 32349) |
+++ sdk/lib/_internal/dartdoc/test/dartdoc_test.dart (working copy) |
@@ -1,284 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-/// Unit tests for doc. |
-library dartdocTests; |
- |
-import 'dart:async'; |
-import 'dart:io'; |
- |
-import 'package:path/path.dart' as path; |
-import 'package:unittest/unittest.dart'; |
- |
-// TODO(rnystrom): Use "package:" URL (#4968). |
-import '../lib/dartdoc.dart' as dd; |
-import '../lib/markdown.dart'; |
-import 'markdown_test.dart'; |
- |
-main() { |
- // Some tests take more than the default 20 second unittest timeout. |
- unittestConfiguration.timeout = null; |
- group('isAbsolute', () { |
- final doc = new dd.Dartdoc(); |
- |
- test('returns false if there is no scheme', () { |
- expect(doc.isAbsolute('index.html'), isFalse); |
- expect(doc.isAbsolute('foo/index.html'), isFalse); |
- expect(doc.isAbsolute('foo/bar/index.html'), isFalse); |
- }); |
- |
- test('returns true if there is a scheme', () { |
- expect(doc.isAbsolute('http://google.com'), isTrue); |
- expect(doc.isAbsolute('hTtPs://google.com'), isTrue); |
- expect(doc.isAbsolute('mailto:fake@email.com'), isTrue); |
- }); |
- }); |
- |
- group('relativePath', () { |
- final doc = new dd.Dartdoc(); |
- |
- test('absolute path is unchanged', () { |
- doc.startFile('dir/sub/file.html'); |
- expect(doc.relativePath('http://foo.com'), equals('http://foo.com')); |
- }); |
- |
- test('from root to root', () { |
- doc.startFile('root.html'); |
- expect(doc.relativePath('other.html'), equals('other.html')); |
- }); |
- |
- test('from root to directory', () { |
- doc.startFile('root.html'); |
- expect(doc.relativePath('dir/file.html'), equals('dir/file.html')); |
- }); |
- |
- test('from root to nested', () { |
- doc.startFile('root.html'); |
- expect(doc.relativePath('dir/sub/file.html'), equals( |
- 'dir/sub/file.html')); |
- }); |
- |
- test('from directory to root', () { |
- doc.startFile('dir/file.html'); |
- expect(doc.relativePath('root.html'), equals('../root.html')); |
- }); |
- |
- test('from nested to root', () { |
- doc.startFile('dir/sub/file.html'); |
- expect(doc.relativePath('root.html'), equals('../../root.html')); |
- }); |
- |
- test('from dir to dir with different path', () { |
- doc.startFile('dir/file.html'); |
- expect(doc.relativePath('other/file.html'), equals('../other/file.html')); |
- }); |
- |
- test('from nested to nested with different path', () { |
- doc.startFile('dir/sub/file.html'); |
- expect(doc.relativePath('other/sub/file.html'), equals( |
- '../../other/sub/file.html')); |
- }); |
- |
- test('from nested to directory with different path', () { |
- doc.startFile('dir/sub/file.html'); |
- expect(doc.relativePath('other/file.html'), equals( |
- '../../other/file.html')); |
- }); |
- }); |
- |
- group('dartdoc markdown', () { |
- group('[::] blocks', () { |
- |
- validateDartdocMarkdown('simple case', ''' |
- before [:source:] after |
- ''', ''' |
- <p>before <code>source</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('unmatched [:', ''' |
- before [: after |
- ''', ''' |
- <p>before [: after</p> |
- '''); |
- validateDartdocMarkdown('multiple spans in one text', ''' |
- a [:one:] b [:two:] c |
- ''', ''' |
- <p>a <code>one</code> b <code>two</code> c</p> |
- '''); |
- |
- validateDartdocMarkdown('multi-line', ''' |
- before [:first |
- second:] after |
- ''', ''' |
- <p>before <code>first |
- second</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('contain backticks', ''' |
- before [:can `contain` backticks:] after |
- ''', ''' |
- <p>before <code>can `contain` backticks</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('contain double backticks', ''' |
- before [:can ``contain`` backticks:] after |
- ''', ''' |
- <p>before <code>can ``contain`` backticks</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('contain backticks with spaces', ''' |
- before [: `tick` :] after |
- ''', ''' |
- <p>before <code>`tick`</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('multiline with spaces', ''' |
- before [:in `tick` |
- another:] after |
- ''', ''' |
- <p>before <code>in `tick` |
- another</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('ignore markup inside code', ''' |
- before [:*b* _c_:] after |
- ''', ''' |
- <p>before <code>*b* _c_</code> after</p> |
- '''); |
- |
- validateDartdocMarkdown('escape HTML characters', ''' |
- [:<&>:] |
- ''', ''' |
- <p><code><&></code></p> |
- '''); |
- |
- validateDartdocMarkdown('escape HTML tags', ''' |
- '*' [:<em>:] |
- ''', ''' |
- <p>'*' <code><em></code></p> |
- '''); |
- }); |
- }); |
- |
- group('integration tests', () { |
- test('no entrypoints', () { |
- _testRunDartDoc([], (result) { |
- expect(result.exitCode, 1); |
- }); |
- }); |
- |
- test('entrypoint in lib', () { |
- _testRunDartDoc(['test_files/lib/no_package_test_file.dart'], (result) { |
- expect(result.exitCode, 0); |
- _expectDocumented(result.stdout, libCount: 1, typeCount: 1, memberCount: 0); |
- }); |
- }); |
- |
- test('entrypoint somewhere with packages locally', () { |
- _testRunDartDoc(['test_files/package_test_file.dart'], (result) { |
- expect(result.exitCode, 0); |
- _expectDocumented(result.stdout, libCount: 1, typeCount: 1, memberCount: 0); |
- }); |
- }); |
- |
- test('file does not exist', () { |
- _testRunDartDoc(['test_files/this_file_does_not_exist.dart'], (result) { |
- expect(result.exitCode, 1); |
- }); |
- }); |
- }); |
-} |
- |
-void _testRunDartDoc(List<String> libraryPaths, void eval(ProcessResult)) { |
- expect(_runDartdoc(libraryPaths).then(eval), completes); |
-} |
- |
-/// The path to the root directory of the dartdoc entrypoint. |
-String get _dartdocDir { |
- var dir = path.absolute(Platform.script.toFilePath()); |
- while (path.basename(dir) != 'dartdoc') { |
- if (!path.absolute(dir).contains('dartdoc') || dir == path.dirname(dir)) { |
- fail('Unable to find root dartdoc directory.'); |
- } |
- dir = path.dirname(dir); |
- } |
- return path.absolute(dir); |
-} |
- |
-/// The path to use for the package root for subprocesses. |
-String get _packageRoot { |
- var sdkVersionPath = path.join(_dartdocDir, '..', '..', '..', 'version'); |
- if (new File(sdkVersionPath).existsSync()) { |
- // It looks like dartdoc is being run from the SDK, so we should set the |
- // package root to the SDK's packages directory. |
- return path.absolute(path.join(_dartdocDir, '..', '..', '..', 'packages')); |
- } |
- |
- // It looks like Dartdoc is being run from the Dart repo, so the package root |
- // is in the build output directory. We can find that directory relative to |
- // the Dart executable, but that could be in one of two places: in |
- // "$BUILD/dart" or "$BUILD/dart-sdk/bin/dart". |
- var executableDir = path.dirname(Platform.executable); |
- if (new Directory(path.join(executableDir, 'dart-sdk')).existsSync()) { |
- // The executable is in "$BUILD/dart". |
- return path.absolute(path.join(executableDir, 'packages')); |
- } else { |
- // The executable is in "$BUILD/dart-sdk/bin/dart". |
- return path.absolute(path.join(executableDir, '..', '..', 'packages')); |
- } |
-} |
- |
-/// Runs dartdoc with the libraryPaths provided, and completes to dartdoc's |
-/// ProcessResult. |
-Future<ProcessResult> _runDartdoc(List<String> libraryPaths) { |
- var dartBin = Platform.executable; |
- |
- var dartdoc = path.join(_dartdocDir, 'bin/dartdoc.dart'); |
- |
- final runArgs = ['--package-root=$_packageRoot/', dartdoc]; |
- |
- // Turn relative libraryPaths to absolute ones. |
- runArgs.addAll(libraryPaths |
- .map((e) => path.join(path.absolute(dd.scriptDir), e))); |
- |
- return Process.run(dartBin, runArgs); |
-} |
- |
-final _dartdocCompletionRegExp = |
- new RegExp(r'Documentation complete -- documented (\d+) libraries, (\d+) types, and (\d+) members\.'); |
- |
-void _expectDocumented(String output, { int libCount, int typeCount, |
- int memberCount}) { |
- |
- final completionMatches = _dartdocCompletionRegExp.allMatches(output) |
- .toList(); |
- |
- expect(completionMatches, hasLength(1), |
- reason: 'dartdoc output should contain one summary'); |
- |
- final completionMatch = completionMatches.single; |
- |
- if(libCount != null) { |
- expect(int.parse(completionMatch[1]), libCount, |
- reason: 'expected library count'); |
- } |
- |
- if(typeCount != null) { |
- expect(int.parse(completionMatch[2]), typeCount, |
- reason: 'expected type count'); |
- } |
- |
- if(memberCount != null) { |
- expect(int.parse(completionMatch[3]), memberCount, |
- reason: 'expected member count'); |
- } |
-} |
- |
- |
-validateDartdocMarkdown(String description, String markdown, |
- String html) { |
- var dartdoc = new dd.Dartdoc(); |
- validate(description, markdown, html, linkResolver: dartdoc.dartdocResolver, |
- inlineSyntaxes: dartdoc.dartdocSyntaxes); |
-} |