Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 72 additions & 19 deletions lib/src/commands/dart/commands/dart_test_command.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:mason/mason.dart';
import 'package:meta/meta.dart';
import 'package:path/path.dart' as path;
import 'package:very_good_cli/src/cli/cli.dart';
import 'package:very_good_cli/src/very_good_config/very_good_config.dart';

/// Options for configuring the Dart test command.
class DartTestOptions {
Expand All @@ -32,18 +33,43 @@ class DartTestOptions {
});

/// Parses [ArgResults] into a [DartTestOptions] instance.
factory DartTestOptions.parse(ArgResults argResults) {
final concurrency = argResults['concurrency'] as String;
final collectCoverage = argResults['coverage'] as bool;
final minCoverage = double.tryParse(
argResults['min-coverage'] as String? ?? '',
///
/// When [config] is provided, its values are used as defaults for any
/// option that was not explicitly parsed on the command line.
factory DartTestOptions.parse(
ArgResults argResults, {
VeryGoodConfig config = VeryGoodConfig.empty,
}) {
final testConfig = config.dart.test;

final concurrency = argResults.resolve(
'concurrency',
testConfig.concurrency,
);
final collectCoverage = argResults.resolve('coverage', testConfig.coverage);
final minCoverageString = argResults.resolve<String?>(
'min-coverage',
testConfig.minCoverage,
);
final minCoverage = double.tryParse(minCoverageString ?? '');
final showUncovered = argResults.resolve(
'show-uncovered',
testConfig.showUncovered,
);
final excludeTags = argResults.resolve<String?>(
'exclude-tags',
testConfig.excludeTags,
);
final tags = argResults.resolve<String?>('tags', testConfig.tags);
final excludeFromCoverage = argResults.resolve<String?>(
'exclude-coverage',
testConfig.excludeCoverage,
);
final collectCoverageFromString = argResults.resolve<String>(
'collect-coverage-from',
testConfig.collectCoverageFrom,
fallbackValue: 'imports',
);
final showUncovered = argResults['show-uncovered'] as bool;
final excludeTags = argResults['exclude-tags'] as String?;
final tags = argResults['tags'] as String?;
final excludeFromCoverage = argResults['exclude-coverage'] as String?;
final collectCoverageFromString =
argResults['collect-coverage-from'] as String? ?? 'imports';
final collectCoverageFrom = CoverageCollectionMode.fromString(
collectCoverageFromString,
);
Expand All @@ -52,17 +78,33 @@ class DartTestOptions {
final randomSeed = randomOrderingSeed == 'random'
? Random().nextInt(4294967295).toString()
: randomOrderingSeed;
final optimizePerformance = argResults['optimization'] as bool;
final failFast = argResults['fail-fast'] as bool;
final optimizePerformance = argResults.resolve(
'optimization',
testConfig.optimization,
);
final failFast = argResults.resolve('fail-fast', testConfig.failFast);
final forceAnsi = argResults['force-ansi'] as bool?;
final platform = argResults['platform'] as String?;
final reportOn = (argResults['report-on'] as List<String>)
final platform = argResults.resolve<String?>(
'platform',
testConfig.platform,
);
final reportOn = argResults
.resolve<List<String>>('report-on', testConfig.reportOn)
.expand((e) => e.split(RegExp(r'[,\s]+')))
.where((e) => e.isNotEmpty)
.toList();
final runSkipped = argResults['run-skipped'] as bool;
final checkIgnore = argResults['check-ignore'] as bool;
final fileReporter = argResults['file-reporter'] as String?;
final runSkipped = argResults.resolve(
'run-skipped',
testConfig.runSkipped,
);
final checkIgnore = argResults.resolve(
'check-ignore',
testConfig.checkIgnore,
);
final fileReporter = argResults.resolve<String?>(
'file-reporter',
testConfig.fileReporter,
);
final rest = argResults.rest;

return DartTestOptions._(
Expand Down Expand Up @@ -327,9 +369,20 @@ This command should be run from the root of your Dart project.''');
return ExitCode.noInput.code;
}

final VeryGoodConfig config;
try {
config = VeryGoodConfig.loadFromClosestAncestor(Directory(targetPath));
} on VeryGoodConfigParseException catch (e) {
_logger.err(
'Could not read `$veryGoodConfigFileName`.\n'
'${e.message}',
);
return ExitCode.config.code;
}

final isDartInstalled = await _dartInstalled(logger: _logger);

final options = DartTestOptions.parse(_argResults);
final options = DartTestOptions.parse(_argResults, config: config);

if (isDartInstalled) {
try {
Expand Down
18 changes: 6 additions & 12 deletions lib/src/commands/packages/commands/check/commands/licenses.dart
Original file line number Diff line number Diff line change
Expand Up @@ -87,33 +87,27 @@ class PackagesCheckLicensesOptions {
}) {
final licensesConfig = config.packages.check.licenses;

final ignoreRetrievalFailures = resolveArg(
argResults,
final ignoreRetrievalFailures = argResults.resolve(
'ignore-retrieval-failures',
licensesConfig.ignoreRetrievalFailures,
);
final dependencyTypes = resolveArg<List<String>>(
argResults,
final dependencyTypes = argResults.resolve<List<String>>(
'dependency-type',
licensesConfig.dependencyType,
);
final allowedLicenses = resolveArg<List<String>>(
argResults,
final allowedLicenses = argResults.resolve<List<String>>(
'allowed',
licensesConfig.allowed,
);
final forbiddenLicenses = resolveArg<List<String>>(
argResults,
final forbiddenLicenses = argResults.resolve<List<String>>(
'forbidden',
licensesConfig.forbidden,
);
final skippedPackages = resolveArg<List<String>>(
argResults,
final skippedPackages = argResults.resolve<List<String>>(
'skip-packages',
licensesConfig.skipPackages,
);
final reporter = resolveArg<String?>(
argResults,
final reporter = argResults.resolve<String?>(
'reporter',
licensesConfig.reporter,
);
Expand Down
6 changes: 2 additions & 4 deletions lib/src/commands/packages/commands/get.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@ class PackagesGetOptions {
}) {
final getConfig = config.packages.get;

final recursive = resolveArg(
argResults,
final recursive = argResults.resolve(
'recursive',
getConfig.recursive,
);
final ignore = resolveArg<List<String>>(
argResults,
final ignore = argResults.resolve<List<String>>(
'ignore',
getConfig.ignore,
);
Expand Down
56 changes: 19 additions & 37 deletions lib/src/commands/test/test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -46,40 +46,33 @@ class FlutterTestOptions {
}) {
final testConfig = config.test;

final concurrency = resolveArg(
argResults,
final concurrency = argResults.resolve(
'concurrency',
testConfig.concurrency,
);
final collectCoverage = resolveArg(
argResults,
final collectCoverage = argResults.resolve(
'coverage',
testConfig.coverage,
);
final minCoverage = resolveArg<String?>(
argResults,
final minCoverage = argResults.resolve<String?>(
'min-coverage',
testConfig.minCoverage,
);
final effectiveMinCoverage = double.tryParse(minCoverage ?? '');
final showUncovered = resolveArg(
argResults,
final showUncovered = argResults.resolve(
'show-uncovered',
testConfig.showUncovered,
);
final excludeTags = resolveArg<String?>(
argResults,
final excludeTags = argResults.resolve<String?>(
'exclude-tags',
testConfig.excludeTags,
);
final tags = resolveArg<String?>(argResults, 'tags', testConfig.tags);
final excludeFromCoverage = resolveArg<String?>(
argResults,
final tags = argResults.resolve<String?>('tags', testConfig.tags);
final excludeFromCoverage = argResults.resolve<String?>(
'exclude-coverage',
testConfig.excludeCoverage,
);
final collectCoverageFrom = resolveArg<String>(
argResults,
final collectCoverageFrom = argResults.resolve<String>(
'collect-coverage-from',
testConfig.collectCoverageFrom,
fallbackValue: 'imports',
Expand All @@ -92,39 +85,32 @@ class FlutterTestOptions {
final randomSeed = randomOrderingSeed == 'random'
? Random().nextInt(4294967295).toString()
: randomOrderingSeed;
final optimizePerformance = resolveArg(
argResults,
final optimizePerformance = argResults.resolve(
'optimization',
testConfig.optimization,
);
final updateGoldens = resolveArg(
argResults,
final updateGoldens = argResults.resolve(
'update-goldens',
testConfig.updateGoldens,
);
final failFast = resolveArg(
argResults,
final failFast = argResults.resolve(
'fail-fast',
testConfig.failFast,
);
final forceAnsi = argResults['force-ansi'] as bool?;
final dartDefine = resolveArg<List<String>?>(
argResults,
final dartDefine = argResults.resolve<List<String>?>(
'dart-define',
testConfig.dartDefine,
);
final dartDefineFromFile = resolveArg<List<String>?>(
argResults,
final dartDefineFromFile = argResults.resolve<List<String>?>(
'dart-define-from-file',
testConfig.dartDefineFromFile,
);
final platform = resolveArg<String?>(
argResults,
final platform = argResults.resolve<String?>(
'platform',
testConfig.platform,
);
final reportOn = resolveArg<List<String>>(
argResults,
final reportOn = argResults.resolve<List<String>>(
'report-on',
testConfig.reportOn,
);
Expand All @@ -133,27 +119,23 @@ class FlutterTestOptions {
.where((e) => e.isNotEmpty)
.toList();

final runSkipped = resolveArg(
argResults,
final runSkipped = argResults.resolve(
'run-skipped',
testConfig.runSkipped,
);
final flavor = resolveArg<String?>(
argResults,
final flavor = argResults.resolve<String?>(
'flavor',
testConfig.flavor,
);
final timeout = resolveArg<String?>(
argResults,
final timeout = argResults.resolve<String?>(
'timeout',
testConfig.timeout,
);
final timeoutSeconds = int.tryParse(timeout ?? '');
final effectiveTimeout = timeoutSeconds != null
? Duration(seconds: timeoutSeconds)
: null;
final fileReporter = resolveArg<String?>(
argResults,
final fileReporter = argResults.resolve<String?>(
'file-reporter',
testConfig.fileReporter,
);
Expand Down
Loading
Loading