// 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 'dart:io'; import 'package:args/command_runner.dart'; import 'package:dartdev/dartdev.dart'; import 'package:test/test.dart'; import '../utils.dart'; void main() { group('command', command, timeout: longTimeout); group('flag', help, timeout: longTimeout); } void command() { // For each command description, assert that the values are not empty, don't // have trailing white space and end with a period. test('description formatting', () { DartdevRunner(['--no-analytics']) .commands .forEach((String commandKey, Command command) { expect(commandKey, isNotEmpty); expect(command.description, isNotEmpty); expect(command.description.split('\n').first, endsWith('.')); expect(command.description.trim(), equals(command.description)); }); }); // Assert that all found usageLineLengths are the same and null test('argParser usageLineLength', () { DartdevRunner(['--no-analytics']) .commands .forEach((String commandKey, Command command) { if (command.argParser != null) { if (command.name != 'help' && command.name != 'format' && command.name != 'migrate' && command.name != 'pub') { expect(command.argParser.usageLineLength, stdout.hasTerminal ? stdout.terminalColumns : null); } else if (command.name == 'pub') { // TODO(sigurdm): Avoid special casing here. // https://github.com/dart-lang/pub/issues/2700 expect(command.argParser.usageLineLength, stdout.hasTerminal ? stdout.terminalColumns : 80); } else { expect(command.argParser.usageLineLength, isNull); } } }); }); } void help() { TestProject p; tearDown(() => p?.dispose()); test('--help', () { p = project(); var result = p.runSync(['--help']); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect(result.stdout, contains(DartdevRunner.dartdevDescription)); expect(result.stdout, contains('Usage: dart [] []')); expect(result.stdout, contains('Global options:')); expect(result.stdout, contains('Available commands:')); expect(result.stdout, contains('analyze ')); expect(result.stdout, contains('create ')); expect(result.stdout, contains('compile ')); expect(result.stdout, contains('format ')); expect(result.stdout, contains('migrate ')); }); test('--help --verbose', () { p = project(); var result = p.runSync(['--help', '--verbose']); expect(result.exitCode, 0); expect(result.stdout, isEmpty); expect(result.stderr, contains('The following options are only used for VM development')); }); test('--help -v', () { p = project(); var result = p.runSync(['--help', '-v']); expect(result.exitCode, 0); expect(result.stdout, isEmpty); expect(result.stderr, contains('The following options are only used for VM development')); }); test('help', () { p = project(); var result = p.runSync(['help']); expect(result.exitCode, 0); expect(result.stderr, isEmpty); expect(result.stdout, contains(DartdevRunner.dartdevDescription)); expect(result.stdout, contains('Usage: dart [] []')); expect(result.stdout, contains('Global options:')); expect(result.stdout, contains('Available commands:')); expect(result.stdout, contains('analyze ')); expect(result.stdout, contains('create ')); expect(result.stdout, contains('compile ')); expect(result.stdout, contains('format ')); expect(result.stdout, contains('migrate ')); }); test('help --verbose', () { p = project(); var result = p.runSync(['help', '--verbose']); expect(result.exitCode, 0); expect(result.stdout, contains('migrate ')); }); test('help -v', () { p = project(); var result = p.runSync(['help', '-v']); expect(result.exitCode, 0); expect(result.stdout, contains('migrate ')); }); }