Enable re-export in docgen. Work in progress. More to come.

BUG=
R=alanknight@google.com

Review URL: https://codereview.chromium.org//138623002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@31793 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
efortuna@google.com 2014-01-14 18:34:23 +00:00
parent bb92c20bfb
commit c57b55c5dd
7 changed files with 1483 additions and 1125 deletions

View file

@ -4,6 +4,9 @@
library barback;
import 'src/transform.dart';
import 'src/transformer.dart';
export 'src/asset.dart';
export 'src/asset_id.dart';
export 'src/asset_set.dart';

View file

@ -17,7 +17,6 @@ List<String> excludedLibraries = [];
* classes, and members.
*/
void main(List<String> arguments) {
logger.onRecord.listen((record) => print(record.message));
var results = _initArgParser().parse(arguments);
var includeSdk = results['parse-sdk'] || results['include-sdk'];
@ -48,8 +47,8 @@ ArgParser _initArgParser() {
negatable: false,
callback: (help) {
if (help) {
logger.info(parser.getUsage());
logger.info(USAGE);
print(parser.getUsage());
print('Usage: dart docgen.dart [OPTIONS] fooDir/barFile');
exit(0);
}
});

View file

@ -7,8 +7,6 @@
*/
library dart2yaml;
import 'dart:collection';
/**
* Gets a String representing the input Map in YAML format.
*/
@ -28,7 +26,7 @@ String getYamlString(Map documentData) {
*/
void _addLevel(StringBuffer yaml, Map documentData, int level,
{bool isList: false}) {
// The order of the keys could be nondeterministic, but it is insufficient
// The order of the keys could be nondeterministic, but it is insufficient
// to just sort the keys no matter what, as their order could be significant
// (i.e. parameters to a method). The order of the keys should be enforced
// by the caller of this function.
@ -36,7 +34,7 @@ void _addLevel(StringBuffer yaml, Map documentData, int level,
keys.forEach((key) {
_calcSpaces(level, yaml);
// Only the first entry of the map should be preceeded with a '-' since
// the map is a member of an outer list and the map as a whole must be
// the map is a member of an outer list and the map as a whole must be
// marked as a single member of that list. See example 2.4 at
// http://www.yaml.org/spec/1.2/spec.html#id2759963
if (isList && key == keys.first) {

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,174 @@
library single_library_test;
import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:unittest/unittest.dart';
import '../lib/docgen.dart';
const String DART_LIBRARY_1 = '''
library testLib;
import 'temp2.dart';
import 'temp3.dart';
export 'temp2.dart';
export 'temp3.dart';
/**
* Doc comment for class [A].
*
* Multiline Test
*/
/*
* Normal comment for class A.
*/
class A {
int _someNumber;
A() {
_someNumber = 12;
}
A.customConstructor();
/**
* Test for linking to parameter [A]
*/
void doThis(int A) {
print(A);
}
}
''';
const String DART_LIBRARY_2 = '''
library testLib2.foo;
import 'temp.dart';
/**
* Doc comment for class [B].
*
* Multiline Test
*/
/*
* Normal comment for class B.
*/
class B extends A {
B();
B.fooBar();
/**
* Test for linking to super
*/
int doElse(int b) {
print(b);
}
/**
* Test for linking to parameter [c]
*/
void doThis(int c) {
print(a);
}
}
int testFunc(int a) {
}
''';
const String DART_LIBRARY_3 = '''
library testLib.bar;
import 'temp.dart';
/*
* Normal comment for class C.
*/
class C {
}
''';
Directory TEMP_DIRNAME;
List writeLibFiles() {
TEMP_DIRNAME = Directory.systemTemp.createTempSync('single_library_');
var fileName = path.join(TEMP_DIRNAME.path, 'temp.dart');
var file = new File(fileName);
file.writeAsStringSync(DART_LIBRARY_1);
var fileName2 = path.join(TEMP_DIRNAME.path, 'temp2.dart');
file = new File(fileName2);
file.writeAsStringSync(DART_LIBRARY_2);
var fileName3 = path.join(TEMP_DIRNAME.path, 'temp3.dart');
file = new File(fileName3);
file.writeAsStringSync(DART_LIBRARY_3);
return [new Uri.file(fileName), new Uri.file(fileName3),
new Uri.file(fileName3)];
}
main() {
group('Generate docs for', () {
test('multiple libraries.', () {
var files = writeLibFiles();
getMirrorSystem(files)
.then(expectAsync1((mirrorSystem) {
var testLibraryUri = files[0];
var library = new Library(mirrorSystem.libraries[testLibraryUri]);
/// Testing fixReference
// Testing Doc comment for class [B].
var libraryMirror = mirrorSystem.libraries[testLibraryUri];
var classDocComment = library.fixReference('B').children.first.text;
expect(classDocComment, 'testLib.B');
// Test for linking to parameter [c]
var importedLib = libraryMirror.libraryDependencies.firstWhere(
(dep) => dep.isImport).targetLibrary;
var aClassMirror = importedLib.classes.values.first;
expect(aClassMirror.qualifiedName, 'testLib2.foo.B');
var exportedClass = getDocgenObject(aClassMirror, library);
expect(exportedClass is Class, isTrue);
var method = exportedClass.methods['doThis'];
expect(method is Method, isTrue);
var methodParameterDocComment = method.fixReference(
'c').children.first.text;
expect(methodParameterDocComment, 'testLib.B.doThis.c');
expect(method.fixReference('A').children.first.text, 'testLib.A');
// Testing trying to refer to doThis function
expect(method.fixReference('doThis').children.first.text,
'testLib.B.doThis');
// Testing trying to refer to doThis function
expect(method.fixReference('doElse').children.first.text,
'testLib.B.doElse');
// Test a third library referencing another exported library in a
// separate file.
importedLib = libraryMirror.libraryDependencies.firstWhere(
(dep) => dep.isImport && dep.targetLibrary.qualifiedName ==
'testLib.bar').targetLibrary;
aClassMirror = importedLib.classes.values.first;
expect(aClassMirror.qualifiedName, 'testLib.bar.C');
exportedClass = getDocgenObject(aClassMirror, library);
expect(exportedClass is Class, isTrue);
expect(exportedClass.docName, 'testLib.C');
methodParameterDocComment = exportedClass.fixReference(
'B').children.first.text;
expect(methodParameterDocComment, 'testLib.B');
methodParameterDocComment = exportedClass.fixReference(
'testFunc').children.first.text;
expect(methodParameterDocComment, 'testLib.testFunc');
})).whenComplete(() => TEMP_DIRNAME.deleteSync(recursive: true));
});
});
}

View file

@ -50,33 +50,27 @@ main() {
.then(expectAsync1((mirrorSystem) {
var testLibraryUri = new Uri(scheme: 'file',
path: path.absolute(fileName));
var library = generateLibrary(mirrorSystem.libraries[testLibraryUri]);
var library = new Library(mirrorSystem.libraries[testLibraryUri]);
expect(library is Library, isTrue);
var classTypes = library.classes;
expect(classTypes is ClassGroup, isTrue);
var classes = [];
classes.addAll(classTypes.classes.values);
classes.addAll(classTypes.errors.values);
classes.addAll(classTypes.values);
classes.addAll(library.errors.values);
expect(classes.every((e) => e is Class), isTrue);
expect(classTypes.typedefs.values.every((e) => e is Typedef), isTrue);
expect(library.typedefs.values.every((e) => e is Typedef), isTrue);
var classMethodTypes = [];
classes.forEach((e) {
classMethodTypes.add(e.methods);
classMethodTypes.add(e.inheritedMethods);
});
expect(classMethodTypes.every((e) => e is MethodGroup), isTrue);
expect(classMethodTypes.every((e) => e is Map<String, Method>), isTrue);
var classMethods = [];
classMethodTypes.forEach((e) {
classMethods.addAll(e.setters.values);
classMethods.addAll(e.getters.values);
classMethods.addAll(e.constructors.values);
classMethods.addAll(e.operators.values);
classMethods.addAll(e.regularMethods.values);
classMethods.addAll(e.values);
});
expect(classMethods.every((e) => e is Method), isTrue);
@ -87,14 +81,10 @@ main() {
expect(methodParameters.every((e) => e is Parameter), isTrue);
var functionTypes = library.functions;
expect(functionTypes is MethodGroup, isTrue);
expect(functionTypes is Map<String, Method>, isTrue);
var functions = [];
functions.addAll(functionTypes.setters.values);
functions.addAll(functionTypes.getters.values);
functions.addAll(functionTypes.constructors.values);
functions.addAll(functionTypes.operators.values);
functions.addAll(functionTypes.regularMethods.values);
functions.addAll(functionTypes.values);
expect(functions.every((e) => e is Method), isTrue);
var functionParameters = [];
@ -110,26 +100,23 @@ main() {
// Testing Doc comment for class [A].
var libraryMirror = mirrorSystem.libraries[testLibraryUri];
var classMirror = libraryMirror.classes.values.first;
var classDocComment = fixReference('A', libraryMirror,
classMirror, null).children.first.text;
expect(classDocComment == 'test.A', isTrue);
var classDocComment = library.fixReference('A').children.first.text;
expect(classDocComment, 'test.A');
// Test for linking to parameter [A]
var methodMirror = classMirror.methods['doThis'];
var methodParameterDocComment = fixReference('A', libraryMirror,
classMirror, methodMirror).children.first.text;
// TODO(alanknight) : We're not supporting linking to parameters yet
// expect(methodParameterDocComment == 'test.A.doThis#A', isTrue);
var method = getDocgenObject(classMirror.methods['doThis']);
var methodParameterDocComment = method.fixReference(
'A').children.first.text;
expect(methodParameterDocComment, 'test.A.doThis.A');
// Testing trying to refer to doThis function
var methodDocComment = fixReference('doThis', libraryMirror,
classMirror, methodMirror).children.first.text;
expect(methodDocComment == 'test.A.doThis', isTrue);
var methodDocComment = method.fixReference(
'doThis').children.first.text;
expect(methodDocComment, 'test.A.doThis');
// Testing something with no reference
var libraryDocComment = fixReference('foobar', libraryMirror,
classMirror, methodMirror).text;
expect(libraryDocComment == 'foobar', isTrue);
var libraryDocComment = method.fixReference('foobar').text;
expect(libraryDocComment, 'foobar');
})).whenComplete(() => temporaryDir.deleteSync(recursive: true));
});
});

View file

@ -76,6 +76,20 @@
* form into the second form automatically, to get the best of both worlds.
*/
library observe;
import 'src/bind_property.dart';
import 'src/change_notifier.dart';
import 'src/change_record.dart';
import 'src/compound_path_observer.dart';
import 'src/list_path_observer.dart';
import 'src/list_diff.dart';
import 'src/metadata.dart';
import 'src/observable.dart';
import 'src/observable_box.dart';
import 'src/observable_list.dart';
import 'src/observable_map.dart';
import 'src/path_observer.dart';
import 'src/to_observable.dart';
export 'src/bind_property.dart';
export 'src/change_notifier.dart';