You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
5.0 KiB
149 lines
5.0 KiB
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:deep_voice/core/services/floating_window_manager.dart';
|
|
|
|
/// iOS ReplayKit 悬浮窗功能测试
|
|
void main() {
|
|
group('iOS ReplayKit 悬浮窗测试', () {
|
|
late FloatingWindowManager floatingWindowManager;
|
|
late List<MethodCall> methodCalls;
|
|
|
|
setUp(() {
|
|
methodCalls = [];
|
|
floatingWindowManager = FloatingWindowManager();
|
|
|
|
// 模拟 iOS 平台的方法通道调用
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
.setMockMethodCallHandler(
|
|
const MethodChannel('floating_window'),
|
|
(MethodCall methodCall) async {
|
|
methodCalls.add(methodCall);
|
|
|
|
switch (methodCall.method) {
|
|
case 'enableFloatingWindow':
|
|
return true;
|
|
case 'disableFloatingWindow':
|
|
return true;
|
|
case 'showFloatingWindow':
|
|
return true;
|
|
case 'hideFloatingWindow':
|
|
return true;
|
|
case 'updateContent':
|
|
return true;
|
|
case 'setPosition':
|
|
return true;
|
|
default:
|
|
return null;
|
|
}
|
|
},
|
|
);
|
|
});
|
|
|
|
tearDown(() {
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
.setMockMethodCallHandler(
|
|
const MethodChannel('floating_window'),
|
|
null,
|
|
);
|
|
});
|
|
|
|
test('启用悬浮窗功能 (ReplayKit)', () async {
|
|
final result = await floatingWindowManager.enableFloatingWindow();
|
|
|
|
expect(result, isTrue);
|
|
expect(methodCalls.length, equals(1));
|
|
expect(methodCalls[0].method, equals('enableFloatingWindow'));
|
|
});
|
|
|
|
test('禁用悬浮窗功能', () async {
|
|
await floatingWindowManager.disableFloatingWindow();
|
|
|
|
expect(methodCalls.length, equals(1));
|
|
expect(methodCalls[0].method, equals('disableFloatingWindow'));
|
|
});
|
|
|
|
test('显示悬浮窗', () async {
|
|
await floatingWindowManager.showFloatingWindow();
|
|
|
|
expect(methodCalls.length, equals(1));
|
|
expect(methodCalls[0].method, equals('showFloatingWindow'));
|
|
});
|
|
|
|
test('隐藏悬浮窗', () async {
|
|
await floatingWindowManager.hideFloatingWindow();
|
|
|
|
expect(methodCalls.length, equals(1));
|
|
expect(methodCalls[0].method, equals('hideFloatingWindow'));
|
|
});
|
|
|
|
test('更新悬浮窗内容', () async {
|
|
final testData = FloatingWindowData(
|
|
sourceText: '你好',
|
|
translatedText: 'Hello',
|
|
sourceLanguage: '中文',
|
|
targetLanguage: '英语',
|
|
timestamp: DateTime.now(),
|
|
isIntermediate: false,
|
|
);
|
|
|
|
await floatingWindowManager.updateFloatingWindowContent(testData);
|
|
|
|
expect(methodCalls.length, equals(1));
|
|
expect(methodCalls[0].method, equals('updateContent'));
|
|
|
|
final arguments = methodCalls[0].arguments as Map<String, dynamic>;
|
|
expect(arguments['sourceText'], equals('你好'));
|
|
expect(arguments['translatedText'], equals('Hello'));
|
|
expect(arguments['sourceLanguage'], equals('中文'));
|
|
expect(arguments['targetLanguage'], equals('英语'));
|
|
expect(arguments['isIntermediate'], equals(false));
|
|
});
|
|
|
|
test('设置悬浮窗位置', () async {
|
|
await floatingWindowManager.setFloatingWindowPosition(100.0, 200.0);
|
|
|
|
expect(methodCalls.length, equals(1));
|
|
expect(methodCalls[0].method, equals('setPosition'));
|
|
|
|
final arguments = methodCalls[0].arguments as Map<String, dynamic>;
|
|
expect(arguments['x'], equals(100.0));
|
|
expect(arguments['y'], equals(200.0));
|
|
});
|
|
|
|
test('悬浮窗状态管理', () async {
|
|
// 初始状态
|
|
expect(floatingWindowManager.isEnabled, isFalse);
|
|
expect(floatingWindowManager.currentState, equals(FloatingWindowState.hidden));
|
|
|
|
// 启用悬浮窗
|
|
await floatingWindowManager.enableFloatingWindow();
|
|
expect(floatingWindowManager.isEnabled, isTrue);
|
|
|
|
// 显示悬浮窗
|
|
await floatingWindowManager.showFloatingWindow();
|
|
// 注意:实际状态变化需要通过原生回调触发,这里只测试方法调用
|
|
});
|
|
});
|
|
|
|
group('悬浮窗数据模型测试', () {
|
|
test('FloatingWindowData 序列化', () {
|
|
final data = FloatingWindowData(
|
|
sourceText: '测试文本',
|
|
translatedText: 'Test Text',
|
|
sourceLanguage: '中文(简体)',
|
|
targetLanguage: '英语',
|
|
timestamp: DateTime(2024, 1, 1, 12, 0, 0),
|
|
isIntermediate: true,
|
|
);
|
|
|
|
final map = data.toMap();
|
|
|
|
expect(map['sourceText'], equals('测试文本'));
|
|
expect(map['translatedText'], equals('Test Text'));
|
|
expect(map['sourceLanguage'], equals('中文(简体)'));
|
|
expect(map['targetLanguage'], equals('英语'));
|
|
expect(map['timestamp'], equals(DateTime(2024, 1, 1, 12, 0, 0).millisecondsSinceEpoch));
|
|
expect(map['isIntermediate'], equals(true));
|
|
});
|
|
});
|
|
}
|
|
|