JJ_MKVMaker/test/mkv_portrait_detail_test.dart

54 lines
3.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jj_mkvmaker/app/app_controller.dart';
import 'package:jj_mkvmaker/app/net_guard.dart';
import 'package:jj_mkvmaker/app/settings.dart';
import 'package:jj_mkvmaker/core/models.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/home_page.dart';
/// 261: 폰 세로 (노트 10+ 412×869) 의 MKV 세부 정보 - "감지한 언어" 줄이 생겨도 [AI 자막 만들기] 가 밀려 가려지지 않는다
void main() {
for (final (detected, dns) in [(false, false), (true, false), (true, true)]) {
testWidgets('261 · 266: 폰 세로 · 작업 기록 켬 · 감지한 언어 ${detected ? '있음' : '없음'}${dns ? ' · DNS 닿지 않음 줄' : ''} - [AI 자막 만들기] 가 스크롤 없이 보인다', (tester) async {
tester.view.physicalSize = const Size(412, 869);
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.reset);
final c = AppController(PlatformServices(
mediaTool: ProcessMediaTool('x', 'y'),
storage: DesktopStorageService(),
createRecognizer: () => throw UnimplementedError(),
createTranslator: () => throw UnimplementedError(),
));
c.settings.display.showLog = true;
c.settings.mkv.moveTargets = [MoveTarget('보관', r'D:\보관')];
for (var i = 1; i <= 4; i++) {
c.videos.add(VideoItem('D:/v/아주 긴 이름의 동영상 파일 $i.mp4'));
}
c.selected = c.videos.first..aiDetected = detected ? 'en' : null;
// 266: DNS 가 닿지 않는 동안 작업 기록 위의 줄 (936 노트 10+ 에서 두 줄이 되어 버튼을 밀어냄)
if (dns) {
NetGuard.instance.failure.value = DnsFailure('192.0.2.1', '답이 없습니다', DateTime(2026, 10, 12, 8, 42));
addTearDown(() => NetGuard.instance.failure.value = null);
}
await tester.pumpWidget(MaterialApp(home: HomePage(c: c)));
await tester.pump();
expect(tester.takeException(), isNull);
final ai = find.text('AI 자막 만들기');
// 화면 밖이면 ListView 가 아예 만들지 않는다
expect(ai, findsOneWidget, reason: '세부 정보 칸 아래로 밀림');
final view = tester.getRect(find.ancestor(of: ai, matching: find.byType(Scrollable)).first);
final button = tester.getRect(ai);
expect(button.bottom, lessThanOrEqualTo(view.bottom), reason: '버튼 $button · 세부 정보 칸 $view');
if (dns) {
// 한 줄 · 버튼도 그 줄에
final line = tester.getRect(find.text('DNS 서버 (192.0.2.1) 에 닿지 않음 (08:42부터)'));
final sys = tester.getRect(find.text('시스템 DNS 로 바꾸기'));
expect((sys.center.dy - line.center.dy).abs(), lessThan(4), reason: '버튼이 같은 줄');
}
});
}
}