| Index: pkg/analyzer/test/error/error_test.dart
|
| diff --git a/pkg/analyzer/test/error/error_test.dart b/pkg/analyzer/test/error/error_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b8d81dea48a934afb1a1201885ee55347562ec2a
|
| --- /dev/null
|
| +++ b/pkg/analyzer/test/error/error_test.dart
|
| @@ -0,0 +1,107 @@
|
| +// Copyright (c) 2017, 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 'dart:core';
|
| +import 'dart:io';
|
| +
|
| +import 'package:analyzer/dart/ast/ast.dart';
|
| +import 'package:path/path.dart' as path;
|
| +import 'package:test/test.dart';
|
| +import 'package:test_reflective_loader/test_reflective_loader.dart';
|
| +
|
| +import '../generated/parser_test.dart';
|
| +
|
| +main() {
|
| + defineReflectiveSuite(() {
|
| + defineReflectiveTests(ErrorCodeValuesTest);
|
| + });
|
| +}
|
| +
|
| +@reflectiveTest
|
| +class ErrorCodeValuesTest extends ParserTestCase {
|
| + List<String> _rootComponents;
|
| +
|
| + List<String> get rootComponents {
|
| + if (_rootComponents == null) {
|
| + List<String> components = path.split(Platform.script.toFilePath());
|
| + _rootComponents =
|
| + components.sublist(0, components.indexOf('analyzer') + 1);
|
| + }
|
| + return _rootComponents;
|
| + }
|
| +
|
| + bool bad() {
|
| + return false;
|
| + }
|
| +
|
| + List<String> getDeclaredCodes(List<String> relativeComponents) {
|
| + List<String> declaredCodes = <String>[];
|
| + CompilationUnit definingUnit = parseFile(relativeComponents);
|
| + for (CompilationUnitMember declaration in definingUnit.declarations) {
|
| + if (declaration is ClassDeclaration) {
|
| + ExtendsClause extendsClause = declaration.extendsClause;
|
| + if (extendsClause != null &&
|
| + extendsClause.superclass.name.name == 'ErrorCode') {
|
| + String className = declaration.name.name;
|
| + for (ClassMember member in declaration.members) {
|
| + if (member is FieldDeclaration &&
|
| + member.isStatic &&
|
| + (member.fields.type == null ? bad() : true) &&
|
| + member.fields.type.toSource() == className) {
|
| + String fieldName = member.fields.variables[0].name.name;
|
| + declaredCodes.add(className + '.' + fieldName);
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + return declaredCodes;
|
| + }
|
| +
|
| + List<String> getListedCodes() {
|
| + List<String> listedCodes = <String>[];
|
| + CompilationUnit listingUnit = parseFile(['lib', 'error', 'error.dart']);
|
| + TopLevelVariableDeclaration declaration = listingUnit.declarations
|
| + .firstWhere(
|
| + (member) =>
|
| + member is TopLevelVariableDeclaration &&
|
| + member.variables.variables[0].name.name == 'errorCodeValues',
|
| + orElse: () => null);
|
| + ListLiteral listLiteral = declaration.variables.variables[0].initializer;
|
| + for (PrefixedIdentifier element in listLiteral.elements) {
|
| + listedCodes.add(element.name);
|
| + }
|
| + return listedCodes;
|
| + }
|
| +
|
| + CompilationUnit parseFile(List<String> relativeComponents) {
|
| + List<String> pathComponents = rootComponents.toList()
|
| + ..addAll(relativeComponents);
|
| + String filePath = path.normalize(path.joinAll(pathComponents));
|
| + return parseCompilationUnit(new File(filePath).readAsStringSync());
|
| + }
|
| +
|
| + test_errorCodeValues() {
|
| + List<String> listedCodes = getListedCodes();
|
| + List<String> missingCodes = <String>[];
|
| + List<List<String>> declaringPaths = [
|
| + ['lib', 'src', 'analysis_options', 'error', 'option_codes.dart'],
|
| + ['lib', 'src', 'dart', 'error', 'hint_codes.dart'],
|
| + ['lib', 'src', 'dart', 'error', 'lint_codes.dart'],
|
| + ['lib', 'src', 'dart', 'error', 'todo_codes.dart'],
|
| + ['lib', 'src', 'html', 'error', 'html_codes.dart'],
|
| + ['lib', 'src', 'dart', 'error', 'syntactic_errors.dart'],
|
| + ['lib', 'src', 'error', 'codes.dart'],
|
| + ['..', 'front_end', 'lib', 'src', 'scanner', 'errors.dart']
|
| + ];
|
| + for (List<String> path in declaringPaths) {
|
| + for (String declaredCode in getDeclaredCodes(path)) {
|
| + if (!listedCodes.contains(declaredCode)) {
|
| + missingCodes.add(declaredCode);
|
| + }
|
| + }
|
| + }
|
| + expect(missingCodes, isEmpty);
|
| + }
|
| +}
|
|
|