40 lines
2.3 KiB
Dart
40 lines
2.3 KiB
Dart
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: '받는 쪽 파일은 그대로');
|
|
});
|
|
}
|