blob: cd6c1e5a76f51ee5667151f6a324f3720e2d9c9a [file] [log] [blame]
// Copyright (c) 2013, 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 'dart:async';
import 'package:args/args.dart';
import 'package:args/command_runner.dart';
import 'package:test/test.dart';
class CommandRunnerWithFooter extends CommandRunner {
@override
String get usageFooter => "Also, footer!";
CommandRunnerWithFooter(String executableName, String description)
: super(executableName, description);
}
class CommandRunnerWithFooterAndWrapping extends CommandRunner {
@override
String get usageFooter => "LONG footer! "
"This is a long footer, so we can check wrapping on long footer messages.\n\n"
"And make sure that they preserve newlines properly.";
@override
ArgParser get argParser => _argParser;
final _argParser = ArgParser(usageLineLength: 40);
CommandRunnerWithFooterAndWrapping(String executableName, String description)
: super(executableName, description);
}
class FooCommand extends Command {
var hasRun = false;
@override
final name = "foo";
@override
final description = "Set a value.";
@override
final takesArguments = false;
@override
void run() {
hasRun = true;
}
}
class ValueCommand extends Command<int> {
@override
final name = "foo";
@override
final description = "Return a value.";
@override
final takesArguments = false;
@override
int run() => 12;
}
class AsyncValueCommand extends Command<String> {
@override
final name = "foo";
@override
final description = "Return a future.";
@override
final takesArguments = false;
@override
Future<String> run() async => "hi";
}
class MultilineCommand extends Command {
var hasRun = false;
@override
final name = "multiline";
@override
final description = "Multi\nline.";
@override
final takesArguments = false;
@override
void run() {
hasRun = true;
}
}
class WrappingCommand extends Command {
var hasRun = false;
@override
ArgParser get argParser => _argParser;
final _argParser = ArgParser(usageLineLength: 40);
@override
final name = "wrapping";
@override
final description =
"This command overrides the argParser so that it will wrap long lines.";
@override
final takesArguments = false;
@override
void run() {
hasRun = true;
}
}
class LongCommand extends Command {
var hasRun = false;
@override
ArgParser get argParser => _argParser;
final _argParser = ArgParser(usageLineLength: 40);
@override
final name = "long";
@override
final description = "This command has a long description that needs to be "
"wrapped sometimes.\nIt has embedded newlines,\n"
" and indented lines that also need to be wrapped and have their "
"indentation preserved.\n" +
("0123456789" * 10);
@override
final takesArguments = false;
@override
void run() {
hasRun = true;
}
}
class MultilineSummaryCommand extends MultilineCommand {
@override
String get summary => description;
}
class HiddenCommand extends Command {
var hasRun = false;
@override
final name = "hidden";
@override
final description = "Set a value.";
@override
final hidden = true;
@override
final takesArguments = false;
@override
void run() {
hasRun = true;
}
}
class AliasedCommand extends Command {
var hasRun = false;
@override
final name = "aliased";
@override
final description = "Set a value.";
@override
final takesArguments = false;
@override
final aliases = const ["alias", "als"];
@override
void run() {
hasRun = true;
}
}
class AsyncCommand extends Command {
var hasRun = false;
@override
final name = "async";
@override
final description = "Set a value asynchronously.";
@override
final takesArguments = false;
@override
Future run() => Future.value().then((_) => hasRun = true);
}
void throwsIllegalArg(function, {String reason}) {
expect(function, throwsArgumentError, reason: reason);
}
void throwsFormat(ArgParser parser, List<String> args) {
expect(() => parser.parse(args), throwsFormatException);
}
Matcher throwsUsageException(message, usage) {
return throwsA(predicate((error) {
expect(error, TypeMatcher<UsageException>());
expect(error.message, message);
expect(error.usage, usage);
return true;
}));
}