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 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; 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; 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)); }); }); }