blob: 884fbd783e22740f8762a00b5c1b737aaa134820 [file] [log] [blame] [edit]
// 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`.
];
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:
Project
build Build a Dart application including native assets.
compile Compile Dart to various formats.
create Create a new Dart project.
pub Work with packages.
run Run a Dart program.
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.
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.
''',
));
});
}