| // Copyright 2016 The Vanadium Authors. 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 'dart:io'; |
| |
| import 'package:args/command_runner.dart'; |
| |
| import '../globals.dart'; |
| import 'mdtest_command_runner.dart'; |
| |
| typedef bool Validator(); |
| |
| abstract class MDTestCommand extends Command { |
| |
| MDTestCommand() { |
| commandValidator = _commandValidator; |
| } |
| |
| @override |
| MDTestCommandRunner get runner => super.runner; |
| |
| bool _usesSpecsOption = false; |
| |
| void usesSpecsOption() { |
| argParser.addOption( |
| 'specs', |
| defaultsTo: null, |
| help: |
| 'Path to the config file that specifies the devices, ' |
| 'apps and debug-ports for testing.' |
| ); |
| _usesSpecsOption = true; |
| } |
| |
| void usesCoverageFlag() { |
| argParser.addFlag( |
| 'coverage', |
| defaultsTo: false, |
| negatable: false, |
| help: 'Whether to collect coverage information.' |
| ); |
| } |
| |
| void usesTAPReportOption() { |
| argParser.addOption( |
| 'format', |
| defaultsTo: 'none', |
| allowed: ['none', 'tap'], |
| help: 'Format to be used to display test output result.' |
| ); |
| } |
| |
| @override |
| Future<int> run() { |
| Stopwatch stopwatch = new Stopwatch()..start(); |
| return _run().then((int exitCode) { |
| int ms = stopwatch.elapsedMilliseconds; |
| printInfo('"mdtest $name" took ${ms}ms; exiting with code $exitCode.'); |
| return exitCode; |
| }); |
| } |
| |
| Future<int> _run() async { |
| if (!commandValidator()) |
| return 1; |
| return await runCore(); |
| } |
| |
| Future<int> runCore(); |
| |
| Validator commandValidator; |
| |
| bool _commandValidator() { |
| if (_usesSpecsOption) { |
| String specsPath = argResults['specs']; |
| if (specsPath == null) { |
| printError('Specs file is not set.'); |
| return false; |
| } |
| if (!FileSystemEntity.isFileSync(specsPath)) { |
| printError('Specs file "$specsPath" not found.'); |
| return false; |
| } |
| } |
| return true; |
| } |
| } |