77 lines
3.2 KiB
Dart
77 lines
3.2 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jj_mkvmaker/core/download_detect.dart' show CookieExport, CookieRecord;
|
|
import 'package:jj_mkvmaker/ui/browser/web_nav.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
/// 받은 조작을 적어 두는 WebNav (NavWatch 가 무엇을 그대로 넘기는지 보려고)
|
|
class _Log implements WebNav {
|
|
final calls = <String>[];
|
|
@override
|
|
Future<void> load(String url) async => calls.add('load $url');
|
|
@override
|
|
Future<void> back() async => calls.add('back');
|
|
@override
|
|
Future<void> forward() async => calls.add('forward');
|
|
@override
|
|
Future<void> reload() async => calls.add('reload');
|
|
@override
|
|
Future<void> stop() async => calls.add('stop');
|
|
@override
|
|
Future<void> exportCookies() async => calls.add('cookies');
|
|
@override
|
|
Future<void> pauseMedia() async => calls.add('pause');
|
|
@override
|
|
Future<void> runScript(String js) async => calls.add('run $js');
|
|
@override
|
|
Future<void> clearData() async => calls.add('clear');
|
|
@override
|
|
Future<Object?> evaluate(String js) async {
|
|
calls.add('eval $js');
|
|
return 7;
|
|
}
|
|
|
|
@override
|
|
Future<void> setJavaScript(bool on) async => calls.add('js $on');
|
|
}
|
|
|
|
void main() {
|
|
test('약속 NavWatch: 사용자가 옮길 때 (주소 · 뒤로 · 앞으로 · 새로고침) 만 알리고, 모든 조작은 그대로 넘긴다', () async {
|
|
final inner = _Log();
|
|
var moved = 0;
|
|
final w = NavWatch(inner, () => moved++);
|
|
await w.load('https://a.example/');
|
|
await w.back();
|
|
await w.forward();
|
|
await w.reload();
|
|
expect(moved, 4);
|
|
await w.stop();
|
|
await w.exportCookies();
|
|
await w.pauseMedia();
|
|
await w.runScript('x');
|
|
await w.clearData();
|
|
expect(await w.evaluate('y'), 7);
|
|
await w.setJavaScript(false);
|
|
expect(moved, 4, reason: '멈춤 · 쿠키 · 스크립트 등은 페이지를 옮기지 않는다');
|
|
expect(inner.calls,
|
|
['load https://a.example/', 'back', 'forward', 'reload', 'stop', 'cookies', 'pause', 'run x', 'clear', 'eval y', 'js false']);
|
|
});
|
|
|
|
test('약속 writeLoginCookies · deleteExportedCookies: cookies.txt 를 한 번에 바꿔 넣고, 지우면 임시 파일까지 없앤다', () async {
|
|
final dir = await Directory.systemTemp.createTemp('jj_cookie_');
|
|
addTearDown(() => dir.delete(recursive: true));
|
|
final file = File(p.join(dir.path, CookieExport.fileName));
|
|
await writeLoginCookies(dir.path, const []);
|
|
expect(file.existsSync(), isFalse, reason: '쿠키가 없으면 쓰지 않는다');
|
|
await writeLoginCookies('', [const CookieRecord(name: 'a', value: 'b', domain: '.youtube.com')]);
|
|
await writeLoginCookies(dir.path, [const CookieRecord(name: 'SID', value: 'v1', domain: '.youtube.com', expires: 0)]);
|
|
expect(file.readAsStringSync(), contains('SID\tv1'));
|
|
expect(File('${file.path}.tmp').existsSync(), isFalse, reason: '임시 파일은 바꿔 넣은 뒤 남지 않는다');
|
|
File('${file.path}.tmp').writeAsStringSync('half');
|
|
await deleteExportedCookies(dir.path);
|
|
expect([file.existsSync(), File('${file.path}.tmp').existsSync()], [false, false]);
|
|
await deleteExportedCookies(''); // 데이터 폴더가 없으면 아무것도 안 함
|
|
});
|
|
}
|