| // 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; |
| })); |
| } |