blob: f4d91d967c6aac4e56b6954eed1181d8dfe63af9 [file] [log] [blame]
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 = Indexable.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 = Indexable.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));
});
});
}