mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
228 lines
7.1 KiB
Dart
228 lines
7.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.
|
|
|
|
// @dart = 2.8
|
|
|
|
import 'package:collection/collection.dart' show ListEquality, MapEquality;
|
|
|
|
import 'package:flutter_devicelab/framework/devices.dart';
|
|
import 'package:meta/meta.dart';
|
|
|
|
import 'common.dart';
|
|
|
|
void main() {
|
|
group('device', () {
|
|
Device device;
|
|
|
|
setUp(() {
|
|
FakeDevice.resetLog();
|
|
device = null;
|
|
device = FakeDevice();
|
|
});
|
|
|
|
tearDown(() {
|
|
});
|
|
|
|
group('cpu check', () {
|
|
test('arm64', () async {
|
|
FakeDevice.pretendArm64();
|
|
final AndroidDevice androidDevice = device as AndroidDevice;
|
|
expect(await androidDevice.isArm64(), isTrue);
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'getprop', arguments: <String>['ro.product.cpu.abi'], environment: null),
|
|
]);
|
|
});
|
|
});
|
|
|
|
group('isAwake/isAsleep', () {
|
|
test('reads Awake', () async {
|
|
FakeDevice.pretendAwake();
|
|
expect(await device.isAwake(), isTrue);
|
|
expect(await device.isAsleep(), isFalse);
|
|
});
|
|
|
|
test('reads Asleep', () async {
|
|
FakeDevice.pretendAsleep();
|
|
expect(await device.isAwake(), isFalse);
|
|
expect(await device.isAsleep(), isTrue);
|
|
});
|
|
});
|
|
|
|
group('togglePower', () {
|
|
test('sends power event', () async {
|
|
await device.togglePower();
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'input', arguments: <String>['keyevent', '26']),
|
|
]);
|
|
});
|
|
});
|
|
|
|
group('wakeUp', () {
|
|
test('when awake', () async {
|
|
FakeDevice.pretendAwake();
|
|
await device.wakeUp();
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'dumpsys', arguments: <String>['power']),
|
|
]);
|
|
});
|
|
|
|
test('when asleep', () async {
|
|
FakeDevice.pretendAsleep();
|
|
await device.wakeUp();
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'dumpsys', arguments: <String>['power']),
|
|
cmd(command: 'input', arguments: <String>['keyevent', '26']),
|
|
]);
|
|
});
|
|
});
|
|
|
|
group('sendToSleep', () {
|
|
test('when asleep', () async {
|
|
FakeDevice.pretendAsleep();
|
|
await device.sendToSleep();
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'dumpsys', arguments: <String>['power']),
|
|
]);
|
|
});
|
|
|
|
test('when awake', () async {
|
|
FakeDevice.pretendAwake();
|
|
await device.sendToSleep();
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'dumpsys', arguments: <String>['power']),
|
|
cmd(command: 'input', arguments: <String>['keyevent', '26']),
|
|
]);
|
|
});
|
|
});
|
|
|
|
group('unlock', () {
|
|
test('sends unlock event', () async {
|
|
FakeDevice.pretendAwake();
|
|
await device.unlock();
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'dumpsys', arguments: <String>['power']),
|
|
cmd(command: 'input', arguments: <String>['keyevent', '82']),
|
|
]);
|
|
});
|
|
});
|
|
|
|
group('adb', () {
|
|
test('tap', () async {
|
|
await device.tap(100, 200);
|
|
expectLog(<CommandArgs>[
|
|
cmd(command: 'getprop', arguments: <String>['ro.bootimage.build.fingerprint', ';', 'getprop', 'ro.build.version.release', ';', 'getprop', 'ro.build.version.sdk'], environment: null),
|
|
cmd(command: 'input', arguments: <String>['tap', '100', '200']),
|
|
]);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
void expectLog(List<CommandArgs> log) {
|
|
expect(FakeDevice.commandLog, log);
|
|
}
|
|
|
|
CommandArgs cmd({
|
|
String command,
|
|
List<String> arguments,
|
|
Map<String, String> environment,
|
|
}) {
|
|
return CommandArgs(
|
|
command: command,
|
|
arguments: arguments,
|
|
environment: environment,
|
|
);
|
|
}
|
|
|
|
typedef ExitErrorFactory = dynamic Function();
|
|
|
|
@immutable
|
|
class CommandArgs {
|
|
const CommandArgs({ this.command, this.arguments, this.environment });
|
|
|
|
final String command;
|
|
final List<String> arguments;
|
|
final Map<String, String> environment;
|
|
|
|
@override
|
|
String toString() => 'CommandArgs(command: $command, arguments: $arguments, environment: $environment)';
|
|
|
|
@override
|
|
bool operator==(Object other) {
|
|
if (other.runtimeType != CommandArgs)
|
|
return false;
|
|
return other is CommandArgs
|
|
&& other.command == command
|
|
&& const ListEquality<String>().equals(other.arguments, arguments)
|
|
&& const MapEquality<String, String>().equals(other.environment, environment);
|
|
}
|
|
|
|
@override
|
|
int get hashCode => 17 * (17 * command.hashCode + _hashArguments) + _hashEnvironment;
|
|
|
|
int get _hashArguments => arguments != null
|
|
? const ListEquality<String>().hash(arguments)
|
|
: null.hashCode;
|
|
|
|
int get _hashEnvironment => environment != null
|
|
? const MapEquality<String, String>().hash(environment)
|
|
: null.hashCode;
|
|
}
|
|
|
|
class FakeDevice extends AndroidDevice {
|
|
FakeDevice({String deviceId}) : super(deviceId: deviceId);
|
|
|
|
static String output = '';
|
|
|
|
static List<CommandArgs> commandLog = <CommandArgs>[];
|
|
|
|
static void resetLog() {
|
|
commandLog.clear();
|
|
}
|
|
|
|
static void pretendAwake() {
|
|
output = '''
|
|
mWakefulness=Awake
|
|
''';
|
|
}
|
|
|
|
static void pretendAsleep() {
|
|
output = '''
|
|
mWakefulness=Asleep
|
|
''';
|
|
}
|
|
|
|
static void pretendArm64() {
|
|
output = '''
|
|
arm64
|
|
''';
|
|
}
|
|
|
|
@override
|
|
Future<String> shellEval(String command, List<String> arguments, { Map<String, String> environment, bool silent = false }) async {
|
|
commandLog.add(CommandArgs(
|
|
command: command,
|
|
arguments: arguments,
|
|
environment: environment,
|
|
));
|
|
return output;
|
|
}
|
|
|
|
@override
|
|
Future<void> shellExec(String command, List<String> arguments, { Map<String, String> environment, bool silent = false }) async {
|
|
commandLog.add(CommandArgs(
|
|
command: command,
|
|
arguments: arguments,
|
|
environment: environment,
|
|
));
|
|
}
|
|
}
|