45 lines
2.1 KiB
Dart
45 lines
2.1 KiB
Dart
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);
|
||
});
|
||
}
|