mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
117 lines
4.2 KiB
Dart
117 lines
4.2 KiB
Dart
// Copyright 2017 The Chromium 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:async';
|
|
|
|
import 'package:flutter_tools/src/build_info.dart';
|
|
import 'package:flutter_tools/src/devfs.dart';
|
|
import 'package:flutter_tools/src/device.dart';
|
|
import 'package:flutter_tools/src/resident_runner.dart';
|
|
import 'package:flutter_tools/src/run_hot.dart';
|
|
import 'package:flutter_tools/src/vmservice.dart';
|
|
import 'package:mockito/mockito.dart';
|
|
|
|
import '../src/common.dart';
|
|
import '../src/testbed.dart';
|
|
|
|
void main() {
|
|
group('ResidentRunner', () {
|
|
final Uri testUri = Uri.parse('foo://bar');
|
|
Testbed testbed;
|
|
MockDevice mockDevice;
|
|
MockVMService mockVMService;
|
|
MockDevFS mockDevFS;
|
|
ResidentRunner residentRunner;
|
|
|
|
setUp(() {
|
|
testbed = Testbed(setup: () {
|
|
residentRunner = HotRunner(
|
|
<FlutterDevice>[
|
|
mockDevice,
|
|
],
|
|
stayResident: false,
|
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
|
);
|
|
});
|
|
mockDevice = MockDevice();
|
|
mockVMService = MockVMService();
|
|
mockDevFS = MockDevFS();
|
|
// DevFS Mocks
|
|
when(mockDevFS.lastCompiled).thenReturn(DateTime(2000));
|
|
when(mockDevFS.sources).thenReturn(<Uri>[]);
|
|
when(mockDevFS.destroy()).thenAnswer((Invocation invocation) async { });
|
|
// FlutterDevice Mocks.
|
|
when(mockDevice.updateDevFS(
|
|
// Intentionally provide empty list to match above mock.
|
|
invalidatedFiles: <Uri>[],
|
|
mainPath: anyNamed('mainPath'),
|
|
target: anyNamed('target'),
|
|
bundle: anyNamed('bundle'),
|
|
firstBuildTime: anyNamed('firstBuildTime'),
|
|
bundleFirstUpload: anyNamed('bundleFirstUpload'),
|
|
bundleDirty: anyNamed('bundleDirty'),
|
|
fullRestart: anyNamed('fullRestart'),
|
|
projectRootPath: anyNamed('projectRootPath'),
|
|
pathToReload: anyNamed('pathToReload'),
|
|
)).thenAnswer((Invocation invocation) async {
|
|
return UpdateFSReport(
|
|
success: true,
|
|
syncedBytes: 0,
|
|
invalidatedSourcesCount: 0,
|
|
);
|
|
});
|
|
when(mockDevice.devFS).thenReturn(mockDevFS);
|
|
when(mockDevice.views).thenReturn(<FlutterView>[
|
|
MockFlutterView(),
|
|
]);
|
|
when(mockDevice.stopEchoingDeviceLog()).thenAnswer((Invocation invocation) async { });
|
|
when(mockDevice.observatoryUris).thenReturn(<Uri>[
|
|
testUri,
|
|
]);
|
|
when(mockDevice.connect(
|
|
reloadSources: anyNamed('reloadSources'),
|
|
restart: anyNamed('restart'),
|
|
compileExpression: anyNamed('compileExpression')
|
|
)).thenAnswer((Invocation invocation) async { });
|
|
when(mockDevice.setupDevFS(any, any, packagesFilePath: anyNamed('packagesFilePath')))
|
|
.thenAnswer((Invocation invocation) async {
|
|
return testUri;
|
|
});
|
|
when(mockDevice.vmServices).thenReturn(<VMService>[
|
|
mockVMService,
|
|
]);
|
|
when(mockDevice.refreshViews()).thenAnswer((Invocation invocation) async { });
|
|
// VMService mocks.
|
|
when(mockVMService.wsAddress).thenReturn(testUri);
|
|
when(mockVMService.done).thenAnswer((Invocation invocation) {
|
|
final Completer<void> result = Completer<void>.sync();
|
|
return result.future;
|
|
});
|
|
});
|
|
|
|
test('Can attach to device successfully', () => testbed.run(() async {
|
|
final Completer<DebugConnectionInfo> onConnectionInfo = Completer<DebugConnectionInfo>.sync();
|
|
final Completer<void> onAppStart = Completer<void>.sync();
|
|
final Future<int> result = residentRunner.attach(
|
|
appStartedCompleter: onAppStart,
|
|
connectionInfoCompleter: onConnectionInfo,
|
|
);
|
|
final Future<DebugConnectionInfo> connectionInfo = onConnectionInfo.future;
|
|
|
|
expect(await result, 0);
|
|
|
|
verify(mockDevice.initLogReader()).called(1);
|
|
|
|
expect(onConnectionInfo.isCompleted, true);
|
|
expect((await connectionInfo).baseUri, 'foo://bar');
|
|
expect(onAppStart.isCompleted, true);
|
|
}));
|
|
});
|
|
}
|
|
|
|
class MockDevice extends Mock implements FlutterDevice {}
|
|
class MockFlutterView extends Mock implements FlutterView {}
|
|
class MockVMService extends Mock implements VMService {}
|
|
class MockDevFS extends Mock implements DevFS {}
|