mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
151 lines
5.1 KiB
Dart
151 lines
5.1 KiB
Dart
// Copyright 2014 The Flutter Authors. 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:convert';
|
|
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:flutter_tools/src/base/io.dart';
|
|
import 'package:flutter_tools/src/features.dart';
|
|
import 'package:flutter_tools/src/globals.dart' as globals;
|
|
import 'package:process/process.dart';
|
|
|
|
import '../src/common.dart';
|
|
import 'test_utils.dart';
|
|
|
|
void main() {
|
|
test('All development tools and deprecated commands are hidden and help text is not verbose', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'-h',
|
|
'-v',
|
|
]);
|
|
|
|
// Development tools.
|
|
expect(result.stdout, isNot(contains('ide-config')));
|
|
expect(result.stdout, isNot(contains('update-packages')));
|
|
expect(result.stdout, isNot(contains('inject-plugins')));
|
|
|
|
// Deprecated.
|
|
expect(result.stdout, isNot(contains('make-host-app-editable')));
|
|
|
|
// Only printed by verbose tool.
|
|
expect(result.stdout, isNot(contains('exiting with code 0')));
|
|
});
|
|
|
|
test('flutter doctor is not verbose', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'doctor',
|
|
'-v',
|
|
]);
|
|
|
|
// Only printed by verbose tool.
|
|
expect(result.stdout, isNot(contains('exiting with code 0')));
|
|
});
|
|
|
|
test('flutter doctor -vv super verbose', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'doctor',
|
|
'-vv',
|
|
]);
|
|
|
|
// Check for message only printed in verbose mode.
|
|
expect(result.stdout, contains('Running shutdown hooks'));
|
|
});
|
|
|
|
test('flutter config contains all features', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'config',
|
|
]);
|
|
|
|
// contains all of the experiments in features.dart
|
|
expect(result.stdout.split('\n'), containsAll(<Matcher>[
|
|
for (final Feature feature in allFeatures)
|
|
contains(feature.configSetting),
|
|
]));
|
|
});
|
|
|
|
test('flutter run --machine uses AppRunLogger', () async {
|
|
final Directory directory = createResolvedTempDirectorySync('flutter_run_test.')
|
|
.createTempSync('_flutter_run_test.')
|
|
..createSync(recursive: true);
|
|
|
|
try {
|
|
directory
|
|
.childFile('pubspec.yaml')
|
|
.writeAsStringSync('name: foo');
|
|
directory
|
|
.childFile('.packages')
|
|
.writeAsStringSync('\n');
|
|
directory
|
|
.childDirectory('lib')
|
|
.childFile('main.dart')
|
|
.createSync(recursive: true);
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'run',
|
|
'--show-test-device', // ensure command can fail to run and hit injection of correct logger.
|
|
'--machine',
|
|
'-v',
|
|
'--no-resident',
|
|
], workingDirectory: directory.path);
|
|
expect(result.stderr, isNot(contains('Oops; flutter has exited unexpectedly:')));
|
|
} finally {
|
|
tryToDelete(directory);
|
|
}
|
|
});
|
|
|
|
test('flutter attach --machine uses AppRunLogger', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'attach',
|
|
'--machine',
|
|
'-v',
|
|
]);
|
|
|
|
expect(result.stderr, contains('Target file')); // Target file not found, but different paths on Windows and Linux/macOS.
|
|
});
|
|
|
|
test('flutter build aot is deprecated', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'build',
|
|
'-h',
|
|
'-v',
|
|
]);
|
|
|
|
// Deprecated.
|
|
expect(result.stdout, isNot(contains('aot')));
|
|
|
|
// Only printed by verbose tool.
|
|
expect(result.stdout, isNot(contains('exiting with code 0')));
|
|
});
|
|
|
|
test('flutter --version --machine outputs JSON with flutterRoot', () async {
|
|
final String flutterBin = globals.fs.path.join(getFlutterRoot(), 'bin', 'flutter');
|
|
final ProcessResult result = await const LocalProcessManager().run(<String>[
|
|
flutterBin,
|
|
'--version',
|
|
'--machine',
|
|
]);
|
|
|
|
final Map<String, Object> versionInfo = json.decode(result.stdout
|
|
.toString()
|
|
.replaceAll('Building flutter tool...', '')
|
|
.replaceAll('Waiting for another flutter command to release the startup lock...', '')
|
|
.trim()) as Map<String, Object>;
|
|
|
|
expect(versionInfo, containsPair('flutterRoot', isNotNull));
|
|
});
|
|
}
|