| // 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:async'; |
| import 'package:args/args.dart'; |
| import 'package:args/command_runner.dart'; |
| import 'package:gardening/src/results/configurations.dart'; |
| import 'package:gardening/src/results/result_json_models.dart' as models; |
| import 'package:gardening/src/results/testpy_wrapper.dart'; |
| |
| /// Helper function to add all standard arguments to the [argParser]. |
| void addStandardArguments(ArgParser argParser) { |
| argParser.addOption("arch", allowed: Architecture.names); |
| argParser.addOption("builder-tag", defaultsTo: ''); |
| argParser.addFlag("checked", negatable: false); |
| argParser.addOption("compiler", allowed: Compiler.names); |
| argParser.addFlag("csp", negatable: false); |
| argParser.addFlag("fasta", negatable: false); |
| argParser.addFlag("dart2js-with-kernel", negatable: false); |
| argParser.addFlag("dart2js-old-frontend", negatable: false); |
| argParser.addFlag("dart2js-with-kernel-in-ssa", negatable: false); |
| argParser.addFlag("enable-asserts", negatable: false); |
| argParser.addFlag("fast-startup", negatable: false); |
| argParser.addFlag("host-checked", negatable: false); |
| argParser.addFlag("hot-reload", negatable: false); |
| argParser.addFlag("hot-reload-rollback", negatable: false); |
| argParser.addFlag("minified", negatable: false); |
| argParser.addOption("mode", allowed: Mode.names); |
| argParser.addFlag("no-preview-dart-2", negatable: false); |
| argParser.addFlag("preview-dart-2", negatable: false); |
| argParser.addOption("runtime", allowed: Runtime.names); |
| argParser.addFlag("strong", negatable: false); |
| argParser.addOption("system", allowed: System.names); |
| argParser.addFlag("use-sdk", negatable: false); |
| } |
| |
| /// Helper function to get a configuration from [argResults]. |
| models.Configuration getConfigurationFromArguments(ArgResults argResults) { |
| return new models.Configuration( |
| argResults["mode"], |
| argResults["arch"], |
| argResults["compiler"], |
| argResults["runtime"], |
| argResults["checked"], |
| argResults["strong"], |
| argResults["host-checked"], |
| argResults["minified"], |
| argResults["csp"], |
| argResults["fasta"], |
| argResults["system"], |
| [], |
| argResults["use-sdk"], |
| argResults["builder-tag"], |
| argResults["fast-startup"], |
| 0, |
| argResults["dart2js-with-kernel"], |
| argResults["dart2js-old-frontend"], |
| argResults["enable-asserts"], |
| argResults["hot-reload"], |
| argResults["hot-reload-rollback"], |
| argResults["preview-dart-2"], |
| argResults.rest); |
| } |
| |
| /// [ListCommand] handles listing of information about test suites when given a |
| /// command 'list' and expect a sub-command. |
| class ListCommand extends Command { |
| @override |
| String get description => "Lists information about test suites and " |
| "status-files"; |
| |
| @override |
| String get name => "list"; |
| |
| ListCommand() { |
| addSubcommand(new ListTestsWithExpectationsForConfiguration()); |
| addSubcommand(new ListStatusFilesForConfiguration()); |
| } |
| } |
| |
| /// [ListTestsWithExpectationsForConfiguration] calls test.py with the arguments |
| /// passed directly. |
| class ListTestsWithExpectationsForConfiguration extends Command { |
| @override |
| String get description => "Get all tests with the expectation for a " |
| "desired configuration. This directly calls test.py with arguments."; |
| |
| @override |
| String get name => "tests"; |
| |
| ListTestsWithExpectationsForConfiguration() { |
| addStandardArguments(argParser); |
| } |
| |
| Future run() async { |
| var result = await testLister(getConfigurationFromArguments(argResults)); |
| result.forEach(print); |
| } |
| } |
| |
| /// [ListStatusFilesForConfiguration] handles the sub-command 'status-files' and |
| /// returns a list of status files that are found for the configuration passed. |
| class ListStatusFilesForConfiguration extends Command { |
| @override |
| String get description => "Get all status files for the desired " |
| "configuration. This directly calls test.py with arguments."; |
| |
| @override |
| String get name => "status-files"; |
| |
| ListStatusFilesForConfiguration() { |
| addStandardArguments(argParser); |
| } |
| |
| Future run() async { |
| var result = |
| await statusFileLister(getConfigurationFromArguments(argResults)); |
| result.forEach(print); |
| } |
| } |