Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1801)

Unified Diff: pkg/analysis_server/test/integration/coverage_test.dart

Issue 2685883005: Add tests to vaildate the analysis server's integration test coverage. (Closed)
Patch Set: organize directives Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/integration/coverage_test.dart
diff --git a/pkg/analysis_server/test/integration/coverage_test.dart b/pkg/analysis_server/test/integration/coverage_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..48acfba7cd50ba699cdef406949b5392c997e92c
--- /dev/null
+++ b/pkg/analysis_server/test/integration/coverage_test.dart
@@ -0,0 +1,98 @@
+// 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:io';
+
+import 'package:analysis_server/src/services/correction/strings.dart';
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+
+import '../../tool/spec/api.dart';
+import '../../tool/spec/from_html.dart';
+
+// TODO(devoncarew): Several of the analysis domain methods are covered, but
+// they aren't using the below file name pattern.
+
+/// Define tests to fail if there's no mention in the coverage file.
+main() {
+ Api api;
+ File coverageFile;
+ String pathPrefix;
+
+ // parse the API file
+ if (FileSystemEntity
+ .isFileSync(path.join('tool', 'spec', 'spec_input.html'))) {
+ api = readApi('.');
+ pathPrefix = '.';
+ } else {
+ api = readApi(path.join('pkg', 'analysis_server'));
+ pathPrefix = path.join('pkg', 'analysis_server');
+ }
+
+ coverageFile =
+ new File(path.join(pathPrefix, 'test', 'integration', 'coverage.md'));
+ List<String> lines = coverageFile.readAsLinesSync();
+
+ // ## server domain
+ Set<String> coveredDomains = lines
+ .where((line) => line.startsWith('## ') && line.endsWith(' domain'))
+ .map((line) =>
+ line.substring('##'.length, line.length - 'domain'.length).trim())
+ .toSet();
+
+ // - [ ] server.getVersion
+ Set<String> allMembers = lines
+ .where((line) => line.startsWith('- '))
+ .map((line) => line.substring('- [ ]'.length).trim())
+ .toSet();
+ Set<String> coveredMembers = lines
+ .where((line) => line.startsWith('- [x]'))
+ .map((line) => line.substring('- [x]'.length).trim())
+ .toSet();
+
+ // generate domain tests
+ for (Domain domain in api.domains) {
+ group('integration coverage of ${domain.name}', () {
+ // domain
+ test('domain', () {
+ if (!coveredDomains.contains(domain.name)) {
+ fail('${domain.name} domain not found in ${coverageFile.path}');
+ }
+ });
+
+ // requests
+ for (Request request in domain.requests) {
+ String fullName = '${domain.name}.${request.method}';
+ test(fullName, () {
+ if (!allMembers.contains(fullName)) {
+ fail('$fullName not found in ${coverageFile.path}');
+ }
+
+ final String fileName = getCamelWords(request.method)
+ .map((s) => s.toLowerCase())
+ .join('_');
+ final String testName =
+ path.join(domain.name, '${fileName}_test.dart');
+ final String testPath =
+ path.join(pathPrefix, 'test', 'integration', testName);
+
+ // Test that if checked, a test file exists; if not checked, no such
+ // file exists.
+ expect(FileSystemEntity.isFileSync(testPath),
+ coveredMembers.contains(fullName),
+ reason: '$testName state incorrect');
+ });
+ }
+ });
+ }
+
+ // validate no unexpected domains
+ group('integration coverage', () {
+ test('no unexpected domains', () {
+ for (String domain in coveredDomains) {
+ expect(api.domains.map((d) => d.name), contains(domain));
+ }
+ });
+ });
+}
« no previous file with comments | « pkg/analysis_server/test/integration/coverage.md ('k') | pkg/analysis_server/test/integration/test_all.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698