import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:openim_common/openim_common.dart'; import 'package:openim_common/src/res/lang/en_US.dart'; import 'package:openim_common/src/res/lang/zh_CN.dart'; void main() { test('通话入口文案统一为语音通话,不改相册/拍摄视频能力文案', () { expect(zh_CN['toolboxCall'], '语音通话'); expect(zh_CN['audioAndVideoCall'], '语音通话'); expect(zh_CN['callVoice'], '语音通话'); expect(zh_CN['invitedVoiceCallHint'], '邀请你语音通话'); expect(zh_CN['toolboxCamera'], '拍摄'); expect(zh_CN['video'], '视频'); expect(en_US['toolboxCall'], 'Voice Call'); expect(en_US['audioAndVideoCall'], 'Voice Call'); }); test('资料页通话按钮使用麦克风语义图标', () { expect(ImageRes.callVoice, contains('ic_call_voice')); }); test('历史位置消息解析失败时回退到标题和坐标,不抛异常', () { final valid = LocationBubbleData.parse( description: '{"name":"公司门口","addr":"示范路 1 号","url":"https://example.com/map.png"}', latitude: 31.23, longitude: 121.47, ); expect(valid.title, '公司门口'); expect(valid.address, '示范路 1 号'); expect(valid.thumbnailUrl, 'https://example.com/map.png'); final broken = LocationBubbleData.parse( description: 'not-json', latitude: 31.23001, longitude: 121.47002, ); expect(broken.title, '位置消息'); expect(broken.address, 'not-json'); expect(broken.thumbnailUrl, isNull); final emptyJson = LocationBubbleData.parse( description: '{}', latitude: 1.5, longitude: 2.5, ); expect(emptyJson.title, '位置消息'); expect(emptyJson.address, '1.50000, 2.50000'); expect(emptyJson.thumbnailUrl, isNull); }); test('Android 清单移除悬浮窗、定位和旧浮窗服务', () { final xml = File('android/app/src/main/AndroidManifest.xml').readAsStringSync(); expect(xml.contains('SYSTEM_ALERT_WINDOW'), isTrue); expect(xml.contains('tools:node="remove"'), isTrue); expect( RegExp(r'') .hasMatch(xml), isFalse); expect( RegExp(r'') .hasMatch(xml), isFalse); expect( RegExp(r'') .hasMatch(xml), isFalse); expect( RegExp(r'') .hasMatch(xml), isFalse); expect(xml.contains('flutter_openim_live_alert.services.CallService'), isFalse); expect(xml.contains('REQUEST_IGNORE_BATTERY_OPTIMIZATIONS'), isFalse); }); test('IM 同步完成不再申请悬浮窗,来电不再检查 overlay', () { final im = File('lib/core/controller/im_controller.dart').readAsStringSync(); expect(im.contains('systemAlertWindow'), isFalse); final live = File('openim_live/lib/src/live_controller.dart').readAsStringSync(); expect(live.contains('checkSystemAlertWindow'), isFalse); expect(live.contains('systemAlertWindow'), isFalse); }); test('工具箱和选点发送链路已删除', () { final toolbox = File('openim_common/lib/src/widgets/chat/chat_toolbox.dart') .readAsStringSync(); expect(toolbox.contains('onTapLocation'), isFalse); expect(toolbox.contains('toolboxLocation'), isFalse); final chatLogic = File('lib/pages/chat/chat_logic.dart').readAsStringSync(); expect(chatLogic.contains('onTapLocation'), isFalse); expect(chatLogic.contains('sendLocation'), isFalse); expect(chatLogic.contains('createLocationMessage'), isFalse); expect(chatLogic.contains('ChatWebViewMap'), isFalse); expect( File('openim_common/lib/src/widgets/chat/chat_webview_map.dart') .existsSync(), isFalse); }); }