WIP 보기 화면 사진 정보 창: 디버그 의미 트리 assertion ('node.built', 28 지적 10/20) - 장을 손으로 넘긴 뒤 위 막대 단추를 누른 그 이벤트 안에서 창을 띄우면 창을 닫을 때 났다 (갤러리 줄과 상관없음 - 끄고도 남, 시험이 띄운 창 · 넘기지 않은 때는 안 남). 지금 장면이 끝난 뒤 띄움 (재현 4번 → 0번) · 통합 시험 integration_test/reader_dialog_semantics_test.dart (검토 대기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>xplore_view
parent
fda636ac32
commit
f3f1cebbc8
|
|
@ -0,0 +1,60 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:image/image.dart' as img;
|
||||
import 'package:integration_test/integration_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/reader_page.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
|
||||
/// 28 지적 (10/20): 보기 화면에서 장을 손으로 몇 번 넘긴 뒤 위 막대 [사진 정보 (Exif)] 창을 닫으면 디버그 판에서
|
||||
/// 의미 트리 assertion ('node.built': is not true, rendering/object.dart) 이 났다. 실제 프레임 · 끌기 애니메이션 (통합 시험) 에서만 나온다.
|
||||
/// 실행: flutter test integration_test\reader_dialog_semantics_test.dart -d windows
|
||||
void main() {
|
||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
for (final gallery in [false, true]) {
|
||||
testWidgets('장을 넘긴 뒤 사진 정보 창을 열고 닫아도 오류 없음 (갤러리 줄 $gallery)', (t) async {
|
||||
t.view.physicalSize = const Size(960, 600);
|
||||
t.view.devicePixelRatio = 1;
|
||||
addTearDown(t.view.reset);
|
||||
final tmp = Directory.systemTemp.createTempSync('jj_readersem_');
|
||||
addTearDown(() => tmp.deleteSync(recursive: true));
|
||||
final files = [
|
||||
for (var i = 0; i < 7; i++)
|
||||
(File(p.join(tmp.path, 'p$i.png'))..writeAsBytesSync(img.encodePng(img.Image(width: 300, height: 200)))).path,
|
||||
];
|
||||
final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService()));
|
||||
c.settings.readerGallery = gallery;
|
||||
Future<void> wait(int ms) async {
|
||||
for (var i = 0; i < ms ~/ 100; i++) {
|
||||
await t.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 100)));
|
||||
await t.pump();
|
||||
}
|
||||
}
|
||||
|
||||
final nav = GlobalKey<NavigatorState>();
|
||||
await t.pumpWidget(MaterialApp(navigatorKey: nav, home: const Scaffold(body: SizedBox.expand())));
|
||||
nav.currentState!.push(MaterialPageRoute<void>(
|
||||
builder: (_) => ReaderPage(c: c, source: ImageFilesSource(files, tempDir: tmp.path, title: 'x'), start: 3)));
|
||||
await wait(1500);
|
||||
for (var k = 0; k < 3; k++) {
|
||||
await t.drag(find.byType(PageView).first, const Offset(-960 * 0.8, 0));
|
||||
await wait(500);
|
||||
}
|
||||
await t.tap(find.byTooltip('사진 정보 (Exif)').first);
|
||||
await wait(600);
|
||||
expect(find.text('이 그림에는 Exif 정보가 없습니다 (JPEG 사진만 읽음)'), findsOneWidget);
|
||||
await t.tap(find.text('닫기').last);
|
||||
await wait(500);
|
||||
expect(t.takeException(), isNull);
|
||||
await t.pumpWidget(const SizedBox());
|
||||
await wait(300);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -882,6 +882,11 @@ class _ReaderPageState extends State<ReaderPage> {
|
|||
/// X-plore 맞추기 (관리자 지시 10/20): 지금 그림의 사진 정보 (찍은 날 · 기기 · 크기 · 위치). 위치는 [위치 보기] 를 누를 때만
|
||||
/// 보이고, 지도 · 인터넷으로 보내지 않는다 (링크 없음)
|
||||
Future<void> _showPhotoInfo() async {
|
||||
// 28 지적 (10/20): 장을 손으로 몇 번 넘긴 뒤 위 막대 단추를 누른 그 이벤트 안에서 창을 띄우면, 창을 닫을 때 디버그 판에서
|
||||
// 의미 트리 assertion ('node.built', rendering/object.dart) 이 났다 (Windows 통합 시험에서 재현 - 넘기지 않거나, 시험에서 따로 띄운
|
||||
// 창은 괜찮음). 지금 장면이 끝난 뒤에 띄우면 나지 않는다 (재현 시험 4번 → 0번)
|
||||
await WidgetsBinding.instance.endOfFrame;
|
||||
if (!mounted) return;
|
||||
final s = src;
|
||||
if (s is! ImageFilesSource || _v.isEmpty) return;
|
||||
final path = s.paths[_cur.page];
|
||||
|
|
|
|||
Loading…
Reference in New Issue