Remove mocks from fucshia_pm_test, reduce createMockProcess usage (#80321)
This commit is contained in:
parent
7e24faf0db
commit
e11a1a83af
@ -13,6 +13,7 @@ import 'package:flutter_tools/src/base/file_system.dart';
|
|||||||
|
|
||||||
import 'package:flutter_tools/src/cache.dart';
|
import 'package:flutter_tools/src/cache.dart';
|
||||||
import 'package:flutter_tools/src/commands/build_apk.dart';
|
import 'package:flutter_tools/src/commands/build_apk.dart';
|
||||||
|
import 'package:flutter_tools/src/convert.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
import 'package:flutter_tools/src/reporting/reporting.dart';
|
||||||
import 'package:flutter_tools/src/globals_null_migrated.dart' as globals;
|
import 'package:flutter_tools/src/globals_null_migrated.dart' as globals;
|
||||||
@ -22,7 +23,6 @@ import 'package:process/process.dart';
|
|||||||
import '../../src/android_common.dart';
|
import '../../src/android_common.dart';
|
||||||
import '../../src/common.dart';
|
import '../../src/common.dart';
|
||||||
import '../../src/context.dart';
|
import '../../src/context.dart';
|
||||||
import '../../src/mocks.dart' hide MockAndroidSdk;
|
|
||||||
import '../../src/test_flutter_command_runner.dart';
|
import '../../src/test_flutter_command_runner.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
@ -537,3 +537,21 @@ class FakeAndroidSdk extends Fake implements AndroidSdk {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MockProcessManager extends Mock implements ProcessManager {}
|
class MockProcessManager extends Mock implements ProcessManager {}
|
||||||
|
|
||||||
|
/// Creates a mock process that returns with the given [exitCode], [stdout] and [stderr].
|
||||||
|
Process createMockProcess({ int exitCode = 0, String stdout = '', String stderr = '' }) {
|
||||||
|
final Stream<List<int>> stdoutStream = Stream<List<int>>.fromIterable(<List<int>>[
|
||||||
|
utf8.encode(stdout),
|
||||||
|
]);
|
||||||
|
final Stream<List<int>> stderrStream = Stream<List<int>>.fromIterable(<List<int>>[
|
||||||
|
utf8.encode(stderr),
|
||||||
|
]);
|
||||||
|
final Process process = _MockBasicProcess();
|
||||||
|
|
||||||
|
when(process.stdout).thenAnswer((_) => stdoutStream);
|
||||||
|
when(process.stderr).thenAnswer((_) => stderrStream);
|
||||||
|
when(process.exitCode).thenAnswer((_) => Future<int>.value(exitCode));
|
||||||
|
return process;
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MockBasicProcess extends Mock implements Process {}
|
||||||
|
@ -9,7 +9,6 @@ import 'package:file/memory.dart';
|
|||||||
import 'package:flutter_tools/src/base/bot_detector.dart';
|
import 'package:flutter_tools/src/base/bot_detector.dart';
|
||||||
import 'package:flutter_tools/src/base/common.dart';
|
import 'package:flutter_tools/src/base/common.dart';
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
import 'package:flutter_tools/src/base/file_system.dart';
|
||||||
import 'package:flutter_tools/src/base/io.dart';
|
|
||||||
import 'package:flutter_tools/src/base/logger.dart';
|
import 'package:flutter_tools/src/base/logger.dart';
|
||||||
import 'package:flutter_tools/src/base/platform.dart';
|
import 'package:flutter_tools/src/base/platform.dart';
|
||||||
import 'package:flutter_tools/src/cache.dart';
|
import 'package:flutter_tools/src/cache.dart';
|
||||||
@ -19,7 +18,6 @@ import 'package:fake_async/fake_async.dart';
|
|||||||
|
|
||||||
import '../../src/common.dart';
|
import '../../src/common.dart';
|
||||||
import '../../src/fake_process_manager.dart';
|
import '../../src/fake_process_manager.dart';
|
||||||
import '../../src/mocks.dart' as mocks;
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
setUpAll(() {
|
setUpAll(() {
|
||||||
@ -292,13 +290,34 @@ void main() {
|
|||||||
testWithoutContext('pub get 69', () async {
|
testWithoutContext('pub get 69', () async {
|
||||||
String error;
|
String error;
|
||||||
|
|
||||||
final MockProcessManager processMock = MockProcessManager(69);
|
const FakeCommand pubGetCommand = FakeCommand(
|
||||||
|
command: <String>[
|
||||||
|
'bin/cache/dart-sdk/bin/pub',
|
||||||
|
'--verbosity=warning',
|
||||||
|
'get',
|
||||||
|
'--no-precompile',
|
||||||
|
],
|
||||||
|
exitCode: 69,
|
||||||
|
environment: <String, String>{'FLUTTER_ROOT': '', 'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests'},
|
||||||
|
);
|
||||||
|
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
pubGetCommand,
|
||||||
|
]);
|
||||||
final BufferLogger logger = BufferLogger.test();
|
final BufferLogger logger = BufferLogger.test();
|
||||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
processManager: processMock,
|
processManager: processManager,
|
||||||
usage: TestUsage(),
|
usage: TestUsage(),
|
||||||
platform: FakePlatform(
|
platform: FakePlatform(
|
||||||
environment: const <String, String>{},
|
environment: const <String, String>{},
|
||||||
@ -307,7 +326,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
FakeAsync().run((FakeAsync time) {
|
FakeAsync().run((FakeAsync time) {
|
||||||
expect(processMock.lastPubEnvironment, isNull);
|
|
||||||
expect(logger.statusText, '');
|
expect(logger.statusText, '');
|
||||||
pub.get(context: PubContext.flutterTests).then((void value) {
|
pub.get(context: PubContext.flutterTests).then((void value) {
|
||||||
error = 'test completed unexpectedly';
|
error = 'test completed unexpectedly';
|
||||||
@ -319,8 +337,7 @@ void main() {
|
|||||||
'Running "flutter pub get" in /...\n'
|
'Running "flutter pub get" in /...\n'
|
||||||
'pub get failed (server unavailable) -- attempting retry 1 in 1 second...\n',
|
'pub get failed (server unavailable) -- attempting retry 1 in 1 second...\n',
|
||||||
);
|
);
|
||||||
expect(processMock.lastPubEnvironment, contains('flutter_cli:flutter_tests'));
|
|
||||||
expect(processMock.lastPubCache, isNull);
|
|
||||||
time.elapse(const Duration(milliseconds: 500));
|
time.elapse(const Duration(milliseconds: 500));
|
||||||
expect(logger.statusText,
|
expect(logger.statusText,
|
||||||
'Running "flutter pub get" in /...\n'
|
'Running "flutter pub get" in /...\n'
|
||||||
@ -361,18 +378,35 @@ void main() {
|
|||||||
});
|
});
|
||||||
expect(logger.errorText, isEmpty);
|
expect(logger.errorText, isEmpty);
|
||||||
expect(error, isNull);
|
expect(error, isNull);
|
||||||
|
expect(processManager, hasNoRemainingExpectations);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWithoutContext('pub get 66 shows message from pub', () async {
|
testWithoutContext('pub get 66 shows message from pub', () async {
|
||||||
final BufferLogger logger = BufferLogger.test();
|
final BufferLogger logger = BufferLogger.test();
|
||||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||||
|
|
||||||
|
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
|
const FakeCommand(
|
||||||
|
command: <String>[
|
||||||
|
'bin/cache/dart-sdk/bin/pub',
|
||||||
|
'--verbosity=warning',
|
||||||
|
'get',
|
||||||
|
'--no-precompile',
|
||||||
|
],
|
||||||
|
exitCode: 66,
|
||||||
|
stderr: 'err1\nerr2\nerr3\n',
|
||||||
|
stdout: 'out1\nout2\nout3\n',
|
||||||
|
environment: <String, String>{'FLUTTER_ROOT': '', 'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests'},
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
platform: FakePlatform(environment: const <String, String>{}),
|
platform: FakePlatform(environment: const <String, String>{}),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
usage: TestUsage(),
|
usage: TestUsage(),
|
||||||
botDetector: const BotDetectorAlwaysNo(),
|
botDetector: const BotDetectorAlwaysNo(),
|
||||||
processManager: MockProcessManager(66, stderr: 'err1\nerr2\nerr3\n', stdout: 'out1\nout2\nout3\n'),
|
processManager: processManager,
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
await pub.get(context: PubContext.flutterTests);
|
await pub.get(context: PubContext.flutterTests);
|
||||||
@ -391,46 +425,74 @@ void main() {
|
|||||||
'err2\n'
|
'err2\n'
|
||||||
'err3\n'
|
'err3\n'
|
||||||
);
|
);
|
||||||
|
expect(processManager, hasNoRemainingExpectations);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWithoutContext('pub cache in root is used', () async {
|
testWithoutContext('pub cache in root is used', () async {
|
||||||
String error;
|
String error;
|
||||||
final MockProcessManager processMock = MockProcessManager(69);
|
|
||||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||||
fileSystem.directory(Cache.flutterRoot).childDirectory('.pub-cache').createSync();
|
final Directory pubCache = fileSystem.directory(Cache.flutterRoot).childDirectory('.pub-cache')..createSync();
|
||||||
|
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
|
FakeCommand(
|
||||||
|
command: const <String>[
|
||||||
|
'bin/cache/dart-sdk/bin/pub',
|
||||||
|
'--verbosity=warning',
|
||||||
|
'get',
|
||||||
|
'--no-precompile',
|
||||||
|
],
|
||||||
|
exitCode: 69,
|
||||||
|
environment: <String, String>{
|
||||||
|
'FLUTTER_ROOT': '',
|
||||||
|
'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests',
|
||||||
|
'PUB_CACHE': pubCache.path,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
platform: FakePlatform(environment: const <String, String>{}),
|
platform: FakePlatform(environment: const <String, String>{}),
|
||||||
usage: TestUsage(),
|
usage: TestUsage(),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
processManager: processMock,
|
processManager: processManager,
|
||||||
botDetector: const BotDetectorAlwaysNo(),
|
botDetector: const BotDetectorAlwaysNo(),
|
||||||
);
|
);
|
||||||
|
|
||||||
FakeAsync().run((FakeAsync time) {
|
FakeAsync().run((FakeAsync time) {
|
||||||
expect(processMock.lastPubEnvironment, isNull);
|
|
||||||
expect(processMock.lastPubCache, isNull);
|
|
||||||
pub.get(context: PubContext.flutterTests).then((void value) {
|
pub.get(context: PubContext.flutterTests).then((void value) {
|
||||||
error = 'test completed unexpectedly';
|
error = 'test completed unexpectedly';
|
||||||
}, onError: (dynamic thrownError) {
|
}, onError: (dynamic thrownError) {
|
||||||
error = 'test failed unexpectedly: $thrownError';
|
error = 'test failed unexpectedly: $thrownError';
|
||||||
});
|
});
|
||||||
time.elapse(const Duration(milliseconds: 500));
|
time.elapse(const Duration(milliseconds: 500));
|
||||||
|
|
||||||
expect(processMock.lastPubCache, equals(fileSystem.path.join(Cache.flutterRoot, '.pub-cache')));
|
|
||||||
expect(error, isNull);
|
expect(error, isNull);
|
||||||
|
expect(processManager, hasNoRemainingExpectations);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
testWithoutContext('pub cache in environment is used', () async {
|
testWithoutContext('pub cache in environment is used', () async {
|
||||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||||
fileSystem.directory('custom/pub-cache/path').createSync(recursive: true);
|
fileSystem.directory('custom/pub-cache/path').createSync(recursive: true);
|
||||||
final MockProcessManager processMock = MockProcessManager(69);
|
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
|
const FakeCommand(
|
||||||
|
command: <String>[
|
||||||
|
'bin/cache/dart-sdk/bin/pub',
|
||||||
|
'--verbosity=warning',
|
||||||
|
'get',
|
||||||
|
'--no-precompile',
|
||||||
|
],
|
||||||
|
exitCode: 69,
|
||||||
|
environment: <String, String>{
|
||||||
|
'FLUTTER_ROOT': '',
|
||||||
|
'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests',
|
||||||
|
'PUB_CACHE': 'custom/pub-cache/path',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]);
|
||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
processManager: processMock,
|
processManager: processManager,
|
||||||
usage: TestUsage(),
|
usage: TestUsage(),
|
||||||
botDetector: const BotDetectorAlwaysNo(),
|
botDetector: const BotDetectorAlwaysNo(),
|
||||||
platform: FakePlatform(
|
platform: FakePlatform(
|
||||||
@ -441,9 +503,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
FakeAsync().run((FakeAsync time) {
|
FakeAsync().run((FakeAsync time) {
|
||||||
expect(processMock.lastPubEnvironment, isNull);
|
|
||||||
expect(processMock.lastPubCache, isNull);
|
|
||||||
|
|
||||||
String error;
|
String error;
|
||||||
pub.get(context: PubContext.flutterTests).then((void value) {
|
pub.get(context: PubContext.flutterTests).then((void value) {
|
||||||
error = 'test completed unexpectedly';
|
error = 'test completed unexpectedly';
|
||||||
@ -451,9 +510,8 @@ void main() {
|
|||||||
error = 'test failed unexpectedly: $thrownError';
|
error = 'test failed unexpectedly: $thrownError';
|
||||||
});
|
});
|
||||||
time.elapse(const Duration(milliseconds: 500));
|
time.elapse(const Duration(milliseconds: 500));
|
||||||
|
|
||||||
expect(processMock.lastPubCache, equals('custom/pub-cache/path'));
|
|
||||||
expect(error, isNull);
|
expect(error, isNull);
|
||||||
|
expect(processManager, hasNoRemainingExpectations);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -463,7 +521,7 @@ void main() {
|
|||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
processManager: MockProcessManager(0),
|
processManager: FakeProcessManager.any(),
|
||||||
botDetector: const BotDetectorAlwaysNo(),
|
botDetector: const BotDetectorAlwaysNo(),
|
||||||
usage: usage,
|
usage: usage,
|
||||||
platform: FakePlatform(
|
platform: FakePlatform(
|
||||||
@ -493,7 +551,7 @@ void main() {
|
|||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
processManager: MockProcessManager(0),
|
processManager: FakeProcessManager.any(),
|
||||||
botDetector: const BotDetectorAlwaysNo(),
|
botDetector: const BotDetectorAlwaysNo(),
|
||||||
usage: usage,
|
usage: usage,
|
||||||
platform: FakePlatform(
|
platform: FakePlatform(
|
||||||
@ -536,11 +594,24 @@ void main() {
|
|||||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||||
fileSystem.directory('custom/pub-cache/path').createSync(recursive: true);
|
fileSystem.directory('custom/pub-cache/path').createSync(recursive: true);
|
||||||
final TestUsage usage = TestUsage();
|
final TestUsage usage = TestUsage();
|
||||||
|
|
||||||
|
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
|
const FakeCommand(
|
||||||
|
command: <String>[
|
||||||
|
'bin/cache/dart-sdk/bin/pub',
|
||||||
|
'--verbosity=warning',
|
||||||
|
'get',
|
||||||
|
'--no-precompile',
|
||||||
|
],
|
||||||
|
exitCode: 1,
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
usage: usage,
|
usage: usage,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
processManager: MockProcessManager(1),
|
processManager: processManager,
|
||||||
botDetector: const BotDetectorAlwaysNo(),
|
botDetector: const BotDetectorAlwaysNo(),
|
||||||
platform: FakePlatform(
|
platform: FakePlatform(
|
||||||
environment: const <String, String>{
|
environment: const <String, String>{
|
||||||
@ -557,18 +628,31 @@ void main() {
|
|||||||
expect(usage.events, contains(
|
expect(usage.events, contains(
|
||||||
const TestUsageEvent('pub-result', 'flutter-tests', label: 'failure'),
|
const TestUsageEvent('pub-result', 'flutter-tests', label: 'failure'),
|
||||||
));
|
));
|
||||||
|
expect(processManager, hasNoRemainingExpectations);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWithoutContext('analytics sent on failed version solve', () async {
|
testWithoutContext('analytics sent on failed version solve', () async {
|
||||||
final TestUsage usage = TestUsage();
|
final TestUsage usage = TestUsage();
|
||||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||||
|
|
||||||
|
|
||||||
|
final FakeProcessManager processManager = FakeProcessManager.list(<FakeCommand>[
|
||||||
|
const FakeCommand(
|
||||||
|
command: <String>[
|
||||||
|
'bin/cache/dart-sdk/bin/pub',
|
||||||
|
'--verbosity=warning',
|
||||||
|
'get',
|
||||||
|
'--no-precompile',
|
||||||
|
],
|
||||||
|
exitCode: 1,
|
||||||
|
stderr: 'version solving failed',
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
|
||||||
final Pub pub = Pub(
|
final Pub pub = Pub(
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
processManager: MockProcessManager(
|
processManager: processManager,
|
||||||
1,
|
|
||||||
stderr: 'version solving failed',
|
|
||||||
),
|
|
||||||
platform: FakePlatform(
|
platform: FakePlatform(
|
||||||
environment: <String, String>{
|
environment: <String, String>{
|
||||||
'PUB_CACHE': 'custom/pub-cache/path',
|
'PUB_CACHE': 'custom/pub-cache/path',
|
||||||
@ -588,6 +672,7 @@ void main() {
|
|||||||
expect(usage.events, contains(
|
expect(usage.events, contains(
|
||||||
const TestUsageEvent('pub-result', 'flutter-tests', label: 'version-solving-failed'),
|
const TestUsageEvent('pub-result', 'flutter-tests', label: 'version-solving-failed'),
|
||||||
));
|
));
|
||||||
|
expect(processManager, hasNoRemainingExpectations);
|
||||||
});
|
});
|
||||||
|
|
||||||
testWithoutContext('Pub error handling', () async {
|
testWithoutContext('Pub error handling', () async {
|
||||||
@ -682,40 +767,3 @@ class BotDetectorAlwaysNo implements BotDetector {
|
|||||||
@override
|
@override
|
||||||
Future<bool> get isRunningOnBot async => false;
|
Future<bool> get isRunningOnBot async => false;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef StartCallback = void Function(List<dynamic> command);
|
|
||||||
|
|
||||||
class MockProcessManager implements ProcessManager {
|
|
||||||
MockProcessManager(this.fakeExitCode, {
|
|
||||||
this.stdout = '',
|
|
||||||
this.stderr = '',
|
|
||||||
});
|
|
||||||
|
|
||||||
final int fakeExitCode;
|
|
||||||
final String stdout;
|
|
||||||
final String stderr;
|
|
||||||
|
|
||||||
String lastPubEnvironment;
|
|
||||||
String lastPubCache;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Process> start(
|
|
||||||
List<dynamic> command, {
|
|
||||||
String workingDirectory,
|
|
||||||
Map<String, String> environment,
|
|
||||||
bool includeParentEnvironment = true,
|
|
||||||
bool runInShell = false,
|
|
||||||
ProcessStartMode mode = ProcessStartMode.normal,
|
|
||||||
}) {
|
|
||||||
lastPubEnvironment = environment['PUB_ENVIRONMENT'];
|
|
||||||
lastPubCache = environment['PUB_CACHE'];
|
|
||||||
return Future<Process>.value(mocks.createMockProcess(
|
|
||||||
exitCode: fakeExitCode,
|
|
||||||
stdout: stdout,
|
|
||||||
stderr: stderr,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
dynamic noSuchMethod(Invocation invocation) => null;
|
|
||||||
}
|
|
||||||
|
@ -6,71 +6,66 @@
|
|||||||
|
|
||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
import 'package:flutter_tools/src/base/file_system.dart';
|
||||||
import 'package:flutter_tools/src/base/io.dart';
|
|
||||||
import 'package:flutter_tools/src/fuchsia/fuchsia_pm.dart';
|
import 'package:flutter_tools/src/fuchsia/fuchsia_pm.dart';
|
||||||
import 'package:flutter_tools/src/fuchsia/fuchsia_sdk.dart';
|
import 'package:flutter_tools/src/fuchsia/fuchsia_sdk.dart';
|
||||||
import 'package:mockito/mockito.dart';
|
import 'package:test/fake.dart';
|
||||||
|
|
||||||
import '../../src/common.dart';
|
import '../../src/common.dart';
|
||||||
import '../../src/context.dart';
|
import '../../src/context.dart';
|
||||||
import '../../src/mocks.dart';
|
import '../../src/fake_process_manager.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
group('FuchsiaPM', () {
|
group('FuchsiaPM', () {
|
||||||
File pm;
|
File pm;
|
||||||
MockProcessManager mockProcessManager;
|
FakeProcessManager fakeProcessManager;
|
||||||
MockFuchsiaArtifacts mockFuchsiaArtifacts;
|
FakeFuchsiaArtifacts fakeFuchsiaArtifacts;
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
pm = MemoryFileSystem.test().file('pm');
|
pm = MemoryFileSystem.test().file('pm');
|
||||||
|
|
||||||
mockFuchsiaArtifacts = MockFuchsiaArtifacts();
|
fakeFuchsiaArtifacts = FakeFuchsiaArtifacts(pm);
|
||||||
when(mockFuchsiaArtifacts.pm).thenReturn(pm);
|
fakeProcessManager = FakeProcessManager.empty();
|
||||||
|
|
||||||
mockProcessManager = MockProcessManager();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('serve - IPv4 address', () async {
|
testUsingContext('serve - IPv4 address', () async {
|
||||||
when(mockProcessManager.start(any)).thenAnswer((_) {
|
fakeProcessManager.addCommand(const FakeCommand(command: <String>[
|
||||||
return Future<Process>.value(createMockProcess());
|
|
||||||
});
|
|
||||||
|
|
||||||
await FuchsiaPM().serve('<repo>', '127.0.0.1', 43819);
|
|
||||||
|
|
||||||
verify(mockProcessManager.start(<String>[
|
|
||||||
'pm',
|
'pm',
|
||||||
'serve',
|
'serve',
|
||||||
'-repo',
|
'-repo',
|
||||||
'<repo>',
|
'<repo>',
|
||||||
'-l',
|
'-l',
|
||||||
'127.0.0.1:43819',
|
'127.0.0.1:43819',
|
||||||
])).called(1);
|
]));
|
||||||
|
|
||||||
|
await FuchsiaPM().serve('<repo>', '127.0.0.1', 43819);
|
||||||
|
expect(fakeProcessManager, hasNoRemainingExpectations);
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
FuchsiaArtifacts: () => mockFuchsiaArtifacts,
|
FuchsiaArtifacts: () => fakeFuchsiaArtifacts,
|
||||||
ProcessManager: () => mockProcessManager,
|
ProcessManager: () => fakeProcessManager,
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('serve - IPv6 address', () async {
|
testUsingContext('serve - IPv6 address', () async {
|
||||||
when(mockProcessManager.start(any)).thenAnswer((_) {
|
fakeProcessManager.addCommand(const FakeCommand(command: <String>[
|
||||||
return Future<Process>.value(createMockProcess());
|
|
||||||
});
|
|
||||||
|
|
||||||
await FuchsiaPM().serve('<repo>', 'fe80::ec4:7aff:fecc:ea8f%eno2', 43819);
|
|
||||||
|
|
||||||
verify(mockProcessManager.start(<String>[
|
|
||||||
'pm',
|
'pm',
|
||||||
'serve',
|
'serve',
|
||||||
'-repo',
|
'-repo',
|
||||||
'<repo>',
|
'<repo>',
|
||||||
'-l',
|
'-l',
|
||||||
'[fe80::ec4:7aff:fecc:ea8f%eno2]:43819',
|
'[fe80::ec4:7aff:fecc:ea8f%eno2]:43819',
|
||||||
])).called(1);
|
]));
|
||||||
|
|
||||||
|
await FuchsiaPM().serve('<repo>', 'fe80::ec4:7aff:fecc:ea8f%eno2', 43819);
|
||||||
|
expect(fakeProcessManager, hasNoRemainingExpectations);
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
FuchsiaArtifacts: () => mockFuchsiaArtifacts,
|
FuchsiaArtifacts: () => fakeFuchsiaArtifacts,
|
||||||
ProcessManager: () => mockProcessManager,
|
ProcessManager: () => fakeProcessManager,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class MockFuchsiaArtifacts extends Mock implements FuchsiaArtifacts {}
|
class FakeFuchsiaArtifacts extends Fake implements FuchsiaArtifacts {
|
||||||
class MockProcessManager extends Mock implements ProcessManager {}
|
FakeFuchsiaArtifacts(this.pm);
|
||||||
|
|
||||||
|
@override
|
||||||
|
final File pm;
|
||||||
|
}
|
||||||
|
@ -191,6 +191,7 @@ abstract class FakeProcessManager implements ProcessManager {
|
|||||||
/// last command and verify its execution is successful, to ensure that all
|
/// last command and verify its execution is successful, to ensure that all
|
||||||
/// the specified commands are actually called.
|
/// the specified commands are actually called.
|
||||||
factory FakeProcessManager.list(List<FakeCommand> commands) = _SequenceProcessManager;
|
factory FakeProcessManager.list(List<FakeCommand> commands) = _SequenceProcessManager;
|
||||||
|
factory FakeProcessManager.empty() => _SequenceProcessManager(<FakeCommand>[]);
|
||||||
|
|
||||||
FakeProcessManager._();
|
FakeProcessManager._();
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
// @dart = 2.8
|
// @dart = 2.8
|
||||||
|
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:flutter_tools/src/android/android_device.dart';
|
import 'package:flutter_tools/src/android/android_device.dart';
|
||||||
import 'package:flutter_tools/src/android/android_sdk.dart' show AndroidSdk;
|
import 'package:flutter_tools/src/android/android_sdk.dart' show AndroidSdk;
|
||||||
@ -156,24 +155,6 @@ _ProcessFactory flakyProcessFactory({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a mock process that returns with the given [exitCode], [stdout] and [stderr].
|
|
||||||
Process createMockProcess({ int exitCode = 0, String stdout = '', String stderr = '' }) {
|
|
||||||
final Stream<List<int>> stdoutStream = Stream<List<int>>.fromIterable(<List<int>>[
|
|
||||||
utf8.encode(stdout),
|
|
||||||
]);
|
|
||||||
final Stream<List<int>> stderrStream = Stream<List<int>>.fromIterable(<List<int>>[
|
|
||||||
utf8.encode(stderr),
|
|
||||||
]);
|
|
||||||
final Process process = _MockBasicProcess();
|
|
||||||
|
|
||||||
when(process.stdout).thenAnswer((_) => stdoutStream);
|
|
||||||
when(process.stderr).thenAnswer((_) => stderrStream);
|
|
||||||
when(process.exitCode).thenAnswer((_) => Future<int>.value(exitCode));
|
|
||||||
return process;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MockBasicProcess extends Mock implements Process {}
|
|
||||||
|
|
||||||
class MockAndroidDevice extends Mock implements AndroidDevice {
|
class MockAndroidDevice extends Mock implements AndroidDevice {
|
||||||
@override
|
@override
|
||||||
Future<TargetPlatform> get targetPlatform async => TargetPlatform.android_arm;
|
Future<TargetPlatform> get targetPlatform async => TargetPlatform.android_arm;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user