import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/core/download_detect.dart'; import 'package:jj_mkvmaker/services/downloader.dart'; import 'package:jj_mkvmaker/ui/browser_page.dart'; /// 브라우저 시험의 대역 (browser_test · browser_page_test 가 같이 쓴다) /// 받기를 시작한 주소를 적어 두는 다운로드 엔진 (실제로 받지 않음) class RecordingDownloadBackend implements DownloadBackend { @override final DownloadKind kind; final started = []; void Function()? changed; RecordingDownloadBackend(this.kind); @override Future<(String, List)?> expandPlaylist(String url) async => null; @override Future start(DownloadTask t, void Function() changed) async { this.changed = changed; started.add(t.source); t.state = DownloadState.downloading; } @override Future pause(DownloadTask t) async {} @override Future cancel(DownloadTask t) async {} @override Future shutdown() async {} } /// 받은 조작 (멈춤 · 스크립트 · 주소 · 뒤로 · 쿠키 · JavaScript) 을 적어 두는 웹뷰 조작 class RecordingWebNav implements WebNav { int paused = 0; @override Future pauseMedia() async => paused++; final scripts = []; @override Future runScript(String js) async => scripts.add(js); final loads = []; @override Future load(String url) async => loads.add(url); int backs = 0; @override Future back() async => backs++; @override Future forward() async {} int reloads = 0; @override Future reload() async => reloads++; @override Future stop() async {} var exported = 0; @override Future exportCookies() async => exported++; @override Future clearData() async {} @override Future evaluate(String js) async { scripts.add(js); return null; } final javaScript = []; @override Future setJavaScript(bool on) async => javaScript.add(on); } /// 웹 뷰 대신: 몇 번 새로 만들어졌는지 센다 (250 - 덮개를 띄워도 웹 뷰를 다시 만들지 않아야 함) class ViewProbe extends StatefulWidget { static int created = 0; const ViewProbe({super.key}); @override State createState() => _ViewProbeState(); } class _ViewProbeState extends State { @override void initState() { super.initState(); ViewProbe.created++; } @override Widget build(BuildContext context) => const ColoredBox(color: Colors.white); }