import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/app/app_controller.dart'; import 'package:jj_mkvmaker/app/live_sync.dart'; import 'package:jj_mkvmaker/app/settings.dart'; import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; import 'package:jj_mkvmaker/services/platform_services.dart'; import 'package:path/path.dart' as p; /// modular_sync #6 F18 약속: 실시간 동기화가 실패하면 화면 상태 글은 복사 작업과 같은 userErrorText (예외 이름 · Dart 의 영어 파일 오류 없이), /// 작업 기록에는 원문 그대로. 예전에는 상태 글에 "FileSystemException: …" 원문이 보였다. 실제 폴더 · 실제 실패 (받는 쪽 자리가 파일) void main() { test('받는 쪽 폴더 자리에 파일 - 상태 글은 짧은 말, 작업 기록은 원문', () async { final tmp = Directory.systemTemp.createTempSync('jj_liveerr_'); addTearDown(() => tmp.deleteSync(recursive: true)); final src = p.join(tmp.path, 'src'), dst = p.join(tmp.path, 'dst'); File(p.join(src, 'sub', 'a.txt')) ..createSync(recursive: true) ..writeAsStringSync('a'); // 받는 쪽의 sub 자리에 파일이 있어 그 안으로 맞출 수 없다 File(p.join(dst, 'sub', 'x')) ..createSync(recursive: true) ..writeAsStringSync('x'); Directory(p.join(dst, 'sub')).deleteSync(recursive: true); File(p.join(dst, 'sub')).writeAsStringSync('file in the way'); final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService())); final pair = LiveSyncPair(src, dst); c.settings.copy.liveSyncPairs = [pair]; final live = LiveSync(c); await live.syncNow(pair); final shown = live.status[LiveSync.keyOf(pair)]!.$2; expect(shown, startsWith('실패')); expect(shown, isNot(matches(RegExp(r'\w*(Exception|Error)\b'))), reason: '예외 이름 없이: $shown'); expect(c.logs.any((l) => l.contains('실시간 동기화 실패') && l.contains('Exception')), isTrue, reason: '작업 기록에는 원문'); expect(File(p.join(dst, 'sub')).readAsStringSync(), 'file in the way', reason: '받는 쪽 파일은 그대로'); }); }