blob: ac2c83c41f348bf17e498308199bb59812996842 [file] [log] [blame]
// Copyright 2016 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/device.dart';
import 'package:flutter_tools/src/resident_runner.dart';
import 'package:flutter_tools/src/run_hot.dart';
import 'package:meta/meta.dart';
import 'package:mockito/mockito.dart';
import 'src/common.dart';
import 'src/context.dart';
void main() {
group('validateReloadReport', () {
testUsingContext('invalid', () async {
expect(HotRunner.validateReloadReport(<String, dynamic>{}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <Map<String, dynamic>>[
],
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <String, dynamic>{
'message': 'error',
},
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <Map<String, dynamic>>[],
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <Map<String, dynamic>>[
<String, dynamic>{ 'message': false, }
],
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <Map<String, dynamic>>[
<String, dynamic>{ 'message': <String>['error'], },
],
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <Map<String, dynamic>>[
<String, dynamic>{ 'message': 'error', },
<String, dynamic>{ 'message': <String>['error'], },
],
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': false,
'details': <String, dynamic>{
'notices': <Map<String, dynamic>>[
<String, dynamic>{ 'message': 'error', },
],
},
}), false);
expect(HotRunner.validateReloadReport(<String, dynamic>{
'type': 'ReloadReport',
'success': true,
}), true);
});
});
group('hotRestart', () {
final List<FlutterDevice> devices = <FlutterDevice>[];
setUp(() {
devices.add(new FlutterDevice(new MockDevice(),
previewDart2: false, trackWidgetCreation: false));
});
testUsingContext('no setup', () async {
expect((await new HotRunner(devices).restart(fullRestart: true)).isOk,
true);
});
testUsingContext('setup function succeeds', () async {
expect((await new HotRunner(devices).restart(fullRestart: true)).isOk,
true);
}, overrides: <Type, Generator>{
HotRunnerConfig: () => new TestHotRunnerConfig(successfulSetup: true),
});
testUsingContext('setup function fails', () async {
expect((await new HotRunner(devices).restart(fullRestart: true)).isOk,
false);
}, overrides: <Type, Generator>{
HotRunnerConfig: () => new TestHotRunnerConfig(successfulSetup: false),
});
});
}
class MockDevice extends Mock implements Device {
MockDevice() {
when(isSupported()).thenReturn(true);
}
}
class TestHotRunnerConfig extends HotRunnerConfig {
bool successfulSetup;
TestHotRunnerConfig({@required this.successfulSetup});
@override
Future<bool> setupHotRestart() async {
return successfulSetup;
}
}