import 'dart:io'; import 'package:archive/archive.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jj_mkvmaker/app/app_controller.dart'; import 'package:jj_mkvmaker/core/reader_sources.dart'; import 'package:jj_mkvmaker/platform/windows/desktop_storage_service.dart'; import 'package:jj_mkvmaker/platform/windows/process_media_tool.dart'; import 'package:jj_mkvmaker/services/platform_services.dart'; import 'package:jj_mkvmaker/ui/ai_upscale/upscale_prep.dart'; import 'package:path/path.dart' as p; void main() { AppController controller() => AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService())); test('약속 upscaleOptionsOf: 환경 설정 > AI 그림의 해상도 올리기 값을 그대로, 저장 폴더는 준 것이 먼저', () { final c = controller(); c.settings.aiImage ..upScale = 2 ..upFormat = 'jpg' ..upJpgQuality = 80 ..upDir = r'D:\up'; final o = upscaleOptionsOf(c); expect([o.model, o.scale, o.format, o.jpgQuality, o.outDir], [c.settings.aiImage.upModel, 2, 'jpg', 80, r'D:\up']); expect(upscaleOptionsOf(c, outDir: r'E:\here').outDir, r'E:\here'); }); test('약속 readerPageFile: 이 기기의 그림은 그대로, ZIP 안의 그림은 꺼내 "ZIP이름_AI" 폴더 기준 (원본은 그대로)', () async { final dir = await Directory.systemTemp.createTemp('jj_up_'); addTearDown(() => dir.delete(recursive: true)); final c = controller()..settings.aiImage.upDir = ''; final a = p.join(dir.path, 'a.png'); File(a).writeAsBytesSync([1, 2, 3]); final files = ImageFilesSource([a], tempDir: dir.path, title: 't'); expect(await readerPageFile(c, files, 0), (a, a, '')); final zip = p.join(dir.path, 'book.zip'); File(zip).writeAsBytesSync(ZipEncoder().encode(Archive()..addFile(ArchiveFile('p1.png', 3, [4, 5, 6])))); final src = await ZipImagesSource.open(zip, tempDir: dir.path, imageExts: const ['png']); final r = (await readerPageFile(c, src, 0))!; expect(File(r.$1).readAsBytesSync(), [4, 5, 6], reason: '꺼낸 임시 파일'); expect([r.$2, r.$3], [p.join(dir.path, 'book_AI', 'p1.png'), p.join(dir.path, 'book_AI')]); expect(File(zip).existsSync(), isTrue); await src.dispose(); await Directory(p.dirname(r.$1)).delete(recursive: true); }); }