67 lines
3.5 KiB
Dart
67 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jj_mkvmaker/app/app_controller.dart';
|
|
import 'package:jj_mkvmaker/core/sync_tools.dart' show defaultRsyncOptions;
|
|
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/copy_sync_settings.dart';
|
|
import 'package:jj_mkvmaker/ui/settings_page.dart';
|
|
|
|
/// 213: 설정의 rsync 옵션 칸 - 값이 기본값과 같아지거나 달라지는 순간에도 포커스를 잃지 않고 이어서 쓸 수 있다
|
|
void main() {
|
|
testWidgets('213: 기본값 ("-avPog") 을 지나며 쳐도 칸이 그대로 (포커스 · 입력 이어짐) · ↺ 는 칸 안의 글도 되돌린다', (tester) async {
|
|
final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService()));
|
|
c.settings.rsyncOptions = '-avPo';
|
|
tester.view.physicalSize = const Size(1400, 1600);
|
|
tester.view.devicePixelRatio = 1;
|
|
addTearDown(tester.view.reset);
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Scaffold(
|
|
body: SingleChildScrollView(
|
|
// 설정 화면처럼 설정이 바뀌면 다시 그린다
|
|
child: ListenableBuilder(listenable: c, builder: (_, _) => CopySyncSettings(c: c, rsync: true)),
|
|
),
|
|
),
|
|
));
|
|
await tester.pump();
|
|
final field = find.byType(TextFormField).first;
|
|
await tester.tap(field);
|
|
await tester.pump();
|
|
final first = tester.state(field);
|
|
// 한 글자씩: "-avPo" → "-avPog" (기본값과 같아짐) → "-avPog " → "-avPog -"
|
|
for (final t in ['-avPog', '-avPog ', '-avPog -']) {
|
|
await tester.enterText(field, t);
|
|
await tester.pump();
|
|
expect(tester.state(find.byType(TextFormField).first), same(first), reason: '칸을 새로 만들지 않음 ($t)');
|
|
expect(tester.testTextInput.hasAnyClients, isTrue, reason: '포커스 그대로 ($t)');
|
|
}
|
|
expect(c.settings.rsyncOptions, '-avPog -');
|
|
// ↺: 칸 안의 글도 기본값으로
|
|
await tester.tap(find.byTooltip('기본값으로 ($defaultRsyncOptions)').first);
|
|
await tester.pump();
|
|
expect(c.settings.rsyncOptions, defaultRsyncOptions);
|
|
expect(find.text(defaultRsyncOptions), findsWidgets);
|
|
});
|
|
|
|
testWidgets('213: 폰 가로에서 키보드가 열리면 설정 화면의 위 줄 (막대 · 묶음 바로가기) 을 접고, 닫으면 다시', (tester) async {
|
|
final c = AppController(PlatformServices(mediaTool: ProcessMediaTool('x', 'y'), storage: DesktopStorageService()));
|
|
tester.view.physicalSize = const Size(900, 420);
|
|
tester.view.devicePixelRatio = 1;
|
|
addTearDown(tester.view.reset);
|
|
await tester.pumpWidget(MaterialApp(home: SettingsPage(c: c)));
|
|
await tester.pumpAndSettle();
|
|
expect(find.widgetWithText(ActionChip, '일반'), findsOneWidget);
|
|
expect(find.text('바꾸면 바로 저장됩니다'), findsOneWidget);
|
|
// 키보드 (남는 높이 420 - 280 = 140)
|
|
tester.view.viewInsets = const FakeViewPadding(bottom: 280);
|
|
addTearDown(tester.view.resetViewInsets);
|
|
await tester.pump();
|
|
expect(find.widgetWithText(ActionChip, '일반'), findsNothing);
|
|
expect(find.text('바꾸면 바로 저장됩니다'), findsNothing);
|
|
tester.view.resetViewInsets();
|
|
await tester.pump();
|
|
expect(find.widgetWithText(ActionChip, '일반'), findsOneWidget);
|
|
});
|
|
}
|