feat(android): bundle GeckoView and bump version to 1.0.2
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
import 'package:dsh_workbench/main.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
const channel = MethodChannel('dsh.workbench/gecko/42');
|
||||
final calls = <String>[];
|
||||
var canGoBack = true;
|
||||
final systemCalls = <String>[];
|
||||
|
||||
setUp(() {
|
||||
calls.clear();
|
||||
systemCalls.clear();
|
||||
canGoBack = true;
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, (call) async {
|
||||
calls.add(call.method);
|
||||
return call.method == 'goBack' ? canGoBack : null;
|
||||
});
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(SystemChannels.platform, (call) async {
|
||||
systemCalls.add(call.method);
|
||||
return null;
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(channel, null);
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(SystemChannels.platform, null);
|
||||
});
|
||||
|
||||
Future<void> emit(String method, [Object? value]) async {
|
||||
await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.handlePlatformMessage(
|
||||
channel.name,
|
||||
const StandardMethodCodec().encodeMethodCall(
|
||||
MethodCall(method, value),
|
||||
),
|
||||
(_) {},
|
||||
);
|
||||
}
|
||||
|
||||
testWidgets('返回键优先回退 Gecko 历史,之后退出应用', (tester) async {
|
||||
await tester.pumpWidget(const DshApp());
|
||||
tester.widget<AndroidView>(find.byType(AndroidView)).onPlatformViewCreated!(
|
||||
42,
|
||||
);
|
||||
await tester.pump();
|
||||
final pop = tester.widget<PopScope>(
|
||||
find.byWidgetPredicate((w) => w is PopScope),
|
||||
);
|
||||
pop.onPopInvokedWithResult!(false, null);
|
||||
await tester.pump();
|
||||
expect(calls.last, 'goBack');
|
||||
expect(systemCalls, isNot(contains('SystemNavigator.pop')));
|
||||
canGoBack = false;
|
||||
pop.onPopInvokedWithResult!(false, null);
|
||||
await tester.pump();
|
||||
expect(systemCalls, contains('SystemNavigator.pop'));
|
||||
await tester.pumpWidget(const SizedBox());
|
||||
});
|
||||
|
||||
testWidgets('Gecko 页面事件、错误及重试通过独立通道连接', (tester) async {
|
||||
await tester.pumpWidget(const DshApp());
|
||||
final view = tester.widget<AndroidView>(find.byType(AndroidView));
|
||||
expect(view.viewType, 'dsh.workbench/gecko');
|
||||
view.onPlatformViewCreated!(42);
|
||||
await tester.pump();
|
||||
expect(calls, ['load']);
|
||||
expect(find.text('正在加载…'), findsOneWidget);
|
||||
|
||||
await emit('onPageFinished');
|
||||
await tester.pump();
|
||||
expect(find.text('正在加载…'), findsNothing);
|
||||
|
||||
await emit('onLoadError', '连接已断开');
|
||||
await tester.pump();
|
||||
expect(find.text('连接已断开'), findsOneWidget);
|
||||
await tester.tap(find.text('重试'));
|
||||
await tester.pump();
|
||||
expect(calls.last, 'reload');
|
||||
expect(find.text('正在加载…'), findsOneWidget);
|
||||
|
||||
await emit('onPageStarted');
|
||||
await emit('onPageFinished');
|
||||
await emit('onDownloadError', '空间不足');
|
||||
await tester.pump();
|
||||
expect(find.text('下载失败:空间不足'), findsOneWidget);
|
||||
await tester.pumpWidget(const SizedBox());
|
||||
await emit('onPageStarted');
|
||||
expect(tester.takeException(), isNull);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user