flutter/packages/flutter_tools/test/integration.shard/vmservice_integration_test.dart
chunhtai 0b3b8cd551
Removes ios universal link vmservices and let xcodeproject to dump js… (#133709)
…on file

The deeplink validation tool will become an static app so it can't no longer access vm services.

The goal will be then to turn them into flutter analyze command similar to `flutter analyze --android --[options]` that static app can use on.

This pr only removes vm services and turn the api to dump a output file instead of printing everything to stdout.
2023-08-31 21:50:54 +00:00

155 lines
5.5 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 'package:file/file.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
import '../src/common.dart';
import 'test_data/basic_project.dart';
import 'test_driver.dart';
import 'test_utils.dart';
void main() {
group('Flutter Tool VMService method', () {
late Directory tempDir;
late FlutterRunTestDriver flutter;
late VmService vmService;
setUp(() async {
tempDir = createResolvedTempDirectorySync('vmservice_integration_test.');
final BasicProject project = BasicProject();
await project.setUpIn(tempDir);
flutter = FlutterRunTestDriver(tempDir);
await flutter.run(withDebugger: true);
final int? port = flutter.vmServicePort;
expect(port != null, true);
vmService = await vmServiceConnectUri('ws://localhost:$port/ws');
});
tearDown(() async {
await flutter.stop();
tryToDelete(tempDir);
});
testWithoutContext('getSupportedProtocols includes DDS', () async {
final ProtocolList protocolList =
await vmService.getSupportedProtocols();
expect(protocolList.protocols, hasLength(2));
for (final Protocol protocol in protocolList.protocols!) {
expect(protocol.protocolName, anyOf('VM Service', 'DDS'));
}
});
testWithoutContext('flutterVersion can be called', () async {
final Response response =
await vmService.callServiceExtension('s0.flutterVersion');
expect(response.type, 'Success');
expect(response.json, containsPair('frameworkRevisionShort', isNotNull));
expect(response.json, containsPair('engineRevisionShort', isNotNull));
});
testWithoutContext('flutterMemoryInfo can be called', () async {
final Response response =
await vmService.callServiceExtension('s0.flutterMemoryInfo');
expect(response.type, 'Success');
});
testWithoutContext('reloadSources can be called', () async {
final VM vm = await vmService.getVM();
final IsolateRef? isolateRef = vm.isolates?.first;
expect(isolateRef != null, true);
final Response response = await vmService.callMethod('s0.reloadSources',
isolateId: isolateRef!.id);
expect(response.type, 'Success');
});
testWithoutContext('reloadSources fails on bad params', () async {
final Future<Response> response =
vmService.callMethod('s0.reloadSources', isolateId: '');
expect(response, throwsA(const TypeMatcher<RPCError>()));
});
testWithoutContext('hotRestart can be called', () async {
final VM vm = await vmService.getVM();
final IsolateRef? isolateRef = vm.isolates?.first;
expect(isolateRef != null, true);
final Response response =
await vmService.callMethod('s0.hotRestart', isolateId: isolateRef!.id);
expect(response.type, 'Success');
});
testWithoutContext('hotRestart fails on bad params', () async {
final Future<Response> response = vmService.callMethod('s0.hotRestart',
args: <String, dynamic>{'pause': 'not_a_bool'});
expect(response, throwsA(const TypeMatcher<RPCError>()));
});
testWithoutContext('flutterGetSkSL can be called', () async {
final Response response = await vmService.callMethod('s0.flutterGetSkSL');
expect(response.type, 'Success');
});
testWithoutContext('ext.flutter.brightnessOverride can toggle window brightness', () async {
final Isolate isolate = await waitForExtension(vmService, 'ext.flutter.brightnessOverride');
final Response response = await vmService.callServiceExtension(
'ext.flutter.brightnessOverride',
isolateId: isolate.id,
);
expect(response.json?['value'], 'Brightness.light');
final Response updateResponse = await vmService.callServiceExtension(
'ext.flutter.brightnessOverride',
isolateId: isolate.id,
args: <String, String>{
'value': 'Brightness.dark',
}
);
expect(updateResponse.json?['value'], 'Brightness.dark');
// Change the brightness back to light
final Response verifyResponse = await vmService.callServiceExtension(
'ext.flutter.brightnessOverride',
isolateId: isolate.id,
args: <String, String>{
'value': 'Brightness.light',
}
);
expect(verifyResponse.json?['value'], 'Brightness.light');
// Change with a bogus value
final Response bogusResponse = await vmService.callServiceExtension(
'ext.flutter.brightnessOverride',
isolateId: isolate.id,
args: <String, String>{
'value': 'dark', // Intentionally invalid value.
}
);
expect(bogusResponse.json?['value'], 'Brightness.light');
});
testWithoutContext('ext.flutter.debugPaint can toggle debug painting', () async {
final Isolate isolate = await waitForExtension(vmService, 'ext.flutter.debugPaint');
final Response response = await vmService.callServiceExtension(
'ext.flutter.debugPaint',
isolateId: isolate.id,
);
expect(response.json?['enabled'], 'false');
final Response updateResponse = await vmService.callServiceExtension(
'ext.flutter.debugPaint',
isolateId: isolate.id,
args: <String, String>{
'enabled': 'true',
}
);
expect(updateResponse.json?['enabled'], 'true');
});
});
}