Add --json-help argument Add a hidden `--json-help` argument which writes the usage information in JSON Schema format.
diff --git a/pkgs/test_core/lib/src/executable.dart b/pkgs/test_core/lib/src/executable.dart index eeefd16..62e0ff1 100644 --- a/pkgs/test_core/lib/src/executable.dart +++ b/pkgs/test_core/lib/src/executable.dart
@@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:async'; +import 'dart:convert'; import 'dart:io'; import 'package:async/async.dart'; @@ -81,6 +82,10 @@ _printUsage(); return; } + if (configuration.jsonHelp) { + stdout.write(jsonEncode(Configuration.jsonSchema)); + return; + } if (configuration.version) { var version = testVersion;
diff --git a/pkgs/test_core/lib/src/runner/configuration.dart b/pkgs/test_core/lib/src/runner/configuration.dart index 8ba4aa8..c6cfab0 100644 --- a/pkgs/test_core/lib/src/runner/configuration.dart +++ b/pkgs/test_core/lib/src/runner/configuration.dart
@@ -42,10 +42,16 @@ /// The usage string for the command-line arguments. static String get usage => args.usage; + static Map<String, Object?> get jsonSchema => args.jsonSchema; + /// Whether `--help` was passed. bool get help => _help ?? false; final bool? _help; + /// Whether `--json-help` was passed. + bool get jsonHelp => _jsonHelp ?? false; + final bool? _jsonHelp; + /// Custom HTML template file. final String? customHtmlTemplatePath; @@ -248,6 +254,7 @@ factory Configuration( {required bool? help, + bool? jsonHelp, required String? customHtmlTemplatePath, required bool? version, required bool? pauseAfterLoad, @@ -300,6 +307,7 @@ var chosenPresetSet = chosenPresets?.toSet(); var configuration = Configuration._( help: help, + jsonHelp: jsonHelp, customHtmlTemplatePath: customHtmlTemplatePath, version: version, pauseAfterLoad: pauseAfterLoad, @@ -731,6 +739,7 @@ /// Unlike [Configuration.new], this assumes [presets] is already resolved. Configuration._( {required bool? help, + required bool? jsonHelp, required this.customHtmlTemplatePath, required bool? version, required bool? pauseAfterLoad, @@ -759,6 +768,7 @@ required Iterable<Pattern>? globalPatterns, required SuiteConfiguration? suiteDefaults}) : _help = help, + _jsonHelp = jsonHelp, _version = version, _pauseAfterLoad = pauseAfterLoad, _debug = debug, @@ -814,6 +824,7 @@ suiteDefaults: suiteConfig, globalPatterns: null, help: null, + jsonHelp: null, customHtmlTemplatePath: null, version: null, pauseAfterLoad: null, @@ -911,6 +922,7 @@ var result = Configuration._( help: other._help ?? _help, + jsonHelp: other._jsonHelp ?? _jsonHelp, customHtmlTemplatePath: other.customHtmlTemplatePath ?? customHtmlTemplatePath, version: other._version ?? _version, @@ -1006,6 +1018,7 @@ Iterable<String>? addTags}) { var config = Configuration._( help: help ?? _help, + jsonHelp: _jsonHelp, customHtmlTemplatePath: customHtmlTemplatePath ?? this.customHtmlTemplatePath, version: version ?? _version,
diff --git a/pkgs/test_core/lib/src/runner/configuration/args.dart b/pkgs/test_core/lib/src/runner/configuration/args.dart index e981bed..eabf197 100644 --- a/pkgs/test_core/lib/src/runner/configuration/args.dart +++ b/pkgs/test_core/lib/src/runner/configuration/args.dart
@@ -26,6 +26,7 @@ parser.addFlag('help', abbr: 'h', negatable: false, help: 'Show this usage information.'); + parser.addFlag('json-help', negatable: false, hide: true); parser.addFlag('version', negatable: false, help: 'Show the package:test version.'); @@ -183,6 +184,8 @@ /// The usage string for the command-line arguments. String get usage => _parser.usage; +Map<String, Object?> get jsonSchema => _parser.jsonSchema; + /// Parses the configuration from [args]. /// /// Throws a [FormatException] if [args] are invalid. @@ -316,6 +319,7 @@ return Configuration( help: _ifParsed('help'), + jsonHelp: _ifParsed('json-help'), version: _ifParsed('version'), verboseTrace: _ifParsed('verbose-trace'), chainStackTraces: _ifParsed('chain-stack-traces'),
diff --git a/pkgs/test_core/pubspec.yaml b/pkgs/test_core/pubspec.yaml index 78cc8ea..c386e69 100644 --- a/pkgs/test_core/pubspec.yaml +++ b/pkgs/test_core/pubspec.yaml
@@ -34,3 +34,10 @@ dev_dependencies: test: any + +dependency_overrides: + args: + git: + url: https://github.com/dart-lang/core.git + path: pkgs/args + ref: json-schema