blob: 66c2e416ae070377745131e7860bf38d3671344c [file] [log] [blame]
// 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.
import 'package:expect/expect.dart';
import "package:async_helper/async_helper.dart";
import 'dart:async';
import 'mirror_system_helper.dart';
void validateDeclarationComment(String code,
String text,
String trimmedText,
bool isDocComment,
List<String> declarationNames) {
asyncTest(() => createMirrorSystem(code).then((mirrors) {
LibraryMirror library = mirrors.libraries[SOURCE_URI];
Expect.isNotNull(library);
for (String declarationName in declarationNames) {
DeclarationMirror declaration = library.members[declarationName];
Expect.isNotNull(declaration);
List<InstanceMirror> metadata = declaration.metadata;
Expect.isNotNull(metadata);
Expect.equals(1, metadata.length);
Expect.isTrue(metadata[0] is CommentInstanceMirror);
CommentInstanceMirror commentMetadata = metadata[0];
Expect.equals(text, commentMetadata.text);
Expect.equals(trimmedText, commentMetadata.trimmedText);
Expect.equals(isDocComment, commentMetadata.isDocComment);
}
}));
}
void testDeclarationComment(String declaration, List<String> declarationNames) {
String text = 'Single line comment';
String comment = '// $text';
String code = '$comment\n$declaration';
validateDeclarationComment(code, comment, text, false, declarationNames);
comment = '/// $text';
code = '$comment\n$declaration';
validateDeclarationComment(code, comment, text, true, declarationNames);
text = 'Multiline comment';
comment = '/* $text*/';
code = '$comment$declaration';
validateDeclarationComment(code, comment, text, false, declarationNames);
comment = '/** $text*/';
code = '$comment$declaration';
validateDeclarationComment(code, comment, text, true, declarationNames);
}
void main() {
testDeclarationComment('var field;', ['field']);
testDeclarationComment('int field;', ['field']);
testDeclarationComment('int field = 0;', ['field']);
testDeclarationComment('int field1, field2;', ['field1', 'field2']);
testDeclarationComment('final field = 0;', ['field']);
testDeclarationComment('final int field = 0;', ['field']);
testDeclarationComment('final field1 = 0, field2 = 0;', ['field1', 'field2']);
testDeclarationComment('final int field1 = 0, field2 = 0;',
['field1', 'field2']);
testDeclarationComment('const field = 0;', ['field']);
testDeclarationComment('const int field = 0;', ['field']);
testDeclarationComment('const field1 = 0, field2 = 0;', ['field1', 'field2']);
testDeclarationComment('const int field1 = 0, field2 = 0;',
['field1', 'field2']);
}