| // Copyright (c) 2016, 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.md file. |
| |
| library testing.test_root; |
| |
| import 'dart:async' show Future; |
| |
| import 'dart:convert' show json; |
| |
| import 'dart:io' show File; |
| |
| import '../testing.dart' show Chain; |
| |
| import 'analyze.dart' show Analyze; |
| |
| import 'suite.dart' show Dart, Suite; |
| |
| /// Records properties of a test root. The information is read from a JSON file. |
| /// |
| /// Example with comments: |
| /// { |
| /// # Path to the `.packages` file used. |
| /// "packages": "test/.packages", |
| /// # A list of test suites (collection of tests). |
| /// "suites": [ |
| /// # A list of suite objects. See the subclasses of [Suite] below. |
| /// ], |
| /// "analyze": { |
| /// # Uris to analyze. |
| /// "uris": [ |
| /// "lib/", |
| /// "bin/dartk.dart", |
| /// "bin/repl.dart", |
| /// "test/log_analyzer.dart", |
| /// "third_party/testing/lib/" |
| /// ], |
| /// # Regular expressions of file names to ignore when analyzing. |
| /// "exclude": [ |
| /// "/third_party/dart-sdk/pkg/compiler/", |
| /// "/third_party/kernel/" |
| /// ] |
| /// } |
| /// } |
| class TestRoot { |
| final Uri packages; |
| |
| final List<Suite> suites; |
| |
| TestRoot(this.packages, this.suites); |
| |
| Analyze get analyze => suites.last; |
| |
| List<Uri> get urisToAnalyze => analyze.uris; |
| |
| List<RegExp> get excludedFromAnalysis => analyze.exclude; |
| |
| Iterable<Dart> get dartSuites { |
| return new List<Dart>.from(suites.where((Suite suite) => suite is Dart)); |
| } |
| |
| Iterable<Chain> get toolChains { |
| return new List<Chain>.from(suites.where((Suite suite) => suite is Chain)); |
| } |
| |
| String toString() { |
| return "TestRoot($suites, $urisToAnalyze)"; |
| } |
| |
| static Future<TestRoot> fromUri(Uri uri) async { |
| String jsonText = await new File.fromUri(uri).readAsString(); |
| Map data = json.decode(jsonText); |
| |
| addDefaults(data); |
| |
| Uri packages = uri.resolve(data["packages"]); |
| |
| List<Suite> suites = data["suites"] |
| .map<Suite>((json) => new Suite.fromJsonMap(uri, json)) |
| .toList(); |
| |
| Analyze analyze = await Analyze.fromJsonMap(uri, data["analyze"], suites); |
| |
| suites.add(analyze); |
| |
| return new TestRoot(packages, suites); |
| } |
| |
| static void addDefaults(Map data) { |
| data.putIfAbsent("packages", () => ".packages"); |
| data.putIfAbsent("suites", () => []); |
| Map analyze = data.putIfAbsent("analyze", () => {}); |
| analyze.putIfAbsent("uris", () => []); |
| analyze.putIfAbsent("exclude", () => []); |
| } |
| } |