import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/core/file_ops.dart' show samePath; import 'package:jj_mkvmaker/core/nav_history.dart'; /// E5a 약속 시험 (모듈 하나에 한 장): lib/core/nav_history.dart 맨 위 약속. void main() { test('다른 곳으로 가면 떠난 곳이 뒤로, 앞으로는 비움 · 같은 곳 · 빈 경로는 넣지 않음 (대소문자 무시)', () { final h = NavHistory(same: samePath); h.visit('', r'C:\A'); h.visit(r'C:\A', r'c:\a'); expect(h.canBack, isFalse); h.visit(r'C:\A', r'C:\B'); h.visit(r'C:\B', r'C:\C'); expect(h.back, [r'C:\A', r'C:\B']); expect(h.canForward, isFalse); }); test('뒤로 → 앞으로 · 새로 가면 앞으로를 비움 · 움직이는 중에는 넣지도 꺼내지도 않음', () { final h = NavHistory(same: samePath) ..visit('a', 'b') ..visit('b', 'c'); final to = h.take(forward: false); expect(to, 'b'); expect(h.take(forward: false), isNull, reason: '앞의 뒤로가 끝나기 전'); h.visit('c', 'b'); // 이동하는 동안 지금 폴더가 바뀜 - 넣지 않음 h.arrive('c', forward: false); h.finish(); expect([h.back, h.forward], [ ['a'], ['c'] ]); expect(h.take(forward: true), 'c'); h ..arrive('b', forward: true) ..finish(); expect(h.back, ['a', 'b']); h.visit('c', 'd'); expect(h.forward, isEmpty); }); test('갈 수 없으면 그 항목만 버리고 지금 자리 그대로 · 상한', () { final h = NavHistory(same: samePath, limit: 3); for (var i = 0; i < 5; i++) { h.visit('$i', '${i + 1}'); } expect(h.back, ['2', '3', '4']); expect(h.take(forward: false), '4'); h.finish(); expect([h.back, h.forward], [ ['2', '3'], [] ]); }); }