JJ_MKVMaker/test/sync_diff_contract_test.dart

45 lines
2.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:jj_mkvmaker/app/settings.dart';
import 'package:jj_mkvmaker/app/sync/sync_diff.dart';
import 'package:jj_mkvmaker/core/rsync_filter.dart';
import 'package:path/path.dart' as p;
/// live_sync 를 나눈 SyncDiff 의 약속 (실제 폴더로): 보낼 것 · 지울 것 ("− ") · 거르기 · 개수 한도
void main() {
late Directory tmp;
setUp(() => tmp = Directory.systemTemp.createTempSync('jj_diff_'));
tearDown(() => tmp.deleteSync(recursive: true));
void put(String path, String text) => File(p.join(tmp.path, path))
..createSync(recursive: true)
..writeAsStringSync(text);
test('약속 SyncDiff.of: 새 것 · 크기가 다른 것은 보낼 것, 지우기 포함이면 받는 쪽에만 있는 것은 "− ", 거른 것은 세지 않음', () async {
put('src/new.txt', 'n');
put('src/same.txt', 'same');
put('src/changed.txt', 'longer');
put('src/sub/a.log', 'skip');
put('dst/same.txt', 'same');
put('dst/changed.txt', 'x');
put('dst/only.txt', 'gone');
final now = DateTime.now();
for (final f in ['src/same.txt', 'dst/same.txt']) {
File(p.join(tmp.path, f)).setLastModifiedSync(now);
}
final pair = LiveSyncPair(p.join(tmp.path, 'src'), p.join(tmp.path, 'dst'));
final send = await SyncDiff.of(pair, filter: RsyncFilter.parse('--exclude=*.log'));
expect(send.toSet(), {'new.txt', 'changed.txt'}, reason: '같은 것 · 거른 것 (*.log) 은 빠지고, 지우기 없음');
final mirror = await SyncDiff.of(pair.copyWith(delete: true));
expect(mirror, contains('− only.txt'));
expect(mirror, contains('sub/a.log'), reason: '거르기가 없으면 보낸다');
expect((await SyncDiff.of(pair.copyWith(delete: true), limit: 1)).length, 1);
expect(File(p.join(tmp.path, 'dst', 'only.txt')).existsSync(), isTrue, reason: '계산만 하고 바꾸지 않는다');
});
test('약속 SyncDiff.of: 원본이 없으면 빈 목록', () async {
expect(await SyncDiff.of(LiveSyncPair(p.join(tmp.path, 'none'), p.join(tmp.path, 'dst'), delete: true)), isEmpty);
});
}