blob: c1d9548765b98eed8e662e1fc09a283e3c0829eb [file]
// Copyright (c) 2020, 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 'package:args/command_runner.dart';
import 'package:dartdev/dartdev.dart';
import 'package:test/test.dart';
import '../utils.dart';
void main() {
group('help', help, timeout: longTimeout);
}
void help() {
late TestProject p;
/// Commands not tested by the following loop.
List<String> commandsNotTested = <String>[
'help', // `dart help help` is redundant
'test', // `dart help test` does not call `test:test --help`.
'mcp-server', // `dart help mcp-server` does not call `dart_mcp_server --help`.
];
DartdevRunner(['--suppress-analytics']).commands.forEach((
String commandKey,
Command<int> command,
) {
if (!commandsNotTested.contains(commandKey)) {
test('(help $commandKey == $commandKey --help)', () async {
p = project();
var result = await p.run(['help', commandKey]);
var verbHelpResult = await p.run([commandKey, '--help']);
expect(result.stdout, contains(verbHelpResult.stdout));
expect(result.stderr, contains(verbHelpResult.stderr));
});
}
});
test('(help test ~= test --help) outside project', () async {
p = project();
p.deleteFile('pubspec.yaml');
var result = await p.run(['help', 'test']);
var testHelpResult = await p.run(['test', '--help']);
expect(testHelpResult.stdout, contains(result.stdout));
expect(testHelpResult.stderr, contains(result.stderr));
});
test('(help pub == pub --help)', () async {
p = project();
var result = await p.run(['help', 'pub']);
var pubHelpResult = await p.run(['pub', '--help']);
expect(result.stdout, contains(pubHelpResult.stdout));
expect(result.stderr, contains(pubHelpResult.stderr));
});
test('(--help flags also have -h abbr)', () {
DartdevRunner(['--suppress-analytics']).commands.forEach((
String commandKey,
Command<int> command,
) {
var helpOption = command.argParser.options['help'];
// Some commands (like pub which use
// "argParser = ArgParser.allowAnything()") may not have the help Option
// accessible with the API used above:
if (helpOption != null) {
expect(helpOption.abbr, 'h', reason: '');
}
});
});
test('command categories', () async {
p = project();
final result = await p.run(['help', '--verbose']);
// Include the `Available commands:` with the empty line to ensure all
// commands have a category.
expect(
result.stdout,
contains('''
Available commands:
Global
install Install or upgrade a Dart CLI tool for global use.
installed List globally installed Dart CLI tools.
uninstall Remove a globally installed Dart CLI tool.
Project
build Build a Dart application including code assets.
compile Compile Dart to various formats.
create Create a new Dart project.
pub Work with packages.
run Run a Dart program from a file or a local or remote package.
test Run tests for a project.
Source code
analyze Analyze Dart code in a directory.
doc Generate API documentation for Dart projects.
fix Apply automated fixes to Dart source code.
format Idiomatically format Dart source code.
migrate Migrate Dart packages to newer SDK versions.
Tools
compilation-server Control resident frontend compilers.
development-service Start Dart's development service.
devtools Open DevTools (optionally connecting to an existing application).
info Show diagnostic information about the installed tooling.
language-server Start Dart's analysis server.
tooling-daemon Start Dart's tooling daemon.
'''),
);
});
}