JJ_MKVMaker/test/app_top_bar_test.dart

46 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jj_mkvmaker/ui/app_actions.dart';
/// 201: 넓은 화면 (폰 가로) 이어도 버튼이 폭을 다 차지해 가운데 (브라우저 주소 칸) 가 모자라면 두 줄로
void main() {
Widget bar({double minMiddle = 0}) => MaterialApp(
home: Scaffold(
body: Column(children: [
AppTopBar(
minMiddleWidth: minMiddle,
nav: const SizedBox(width: 420, height: 40),
actions: const SizedBox(width: 360, height: 40),
middle: const SizedBox(key: ValueKey('mid'), height: 36, child: Text('주소')),
),
]),
),
);
testWidgets('201: 가운데가 최소 폭보다 좁아지면 두 줄 (아래 줄을 가운데가 다 씀)', (tester) async {
tester.view.physicalSize = const Size(900, 400); // 폰 가로 (compactWidth 720 보다 넓음)
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.reset);
await tester.pumpWidget(bar(minMiddle: 380));
await tester.pump();
await tester.pump();
expect(tester.getSize(find.byKey(const ValueKey('mid'))).width, greaterThan(800));
// 넓은 화면에서는 한 줄 그대로
tester.view.physicalSize = const Size(1600, 900);
await tester.pump();
await tester.pump();
expect(tester.getSize(find.byKey(const ValueKey('mid'))).width, lessThan(900));
expect(tester.getSize(find.byKey(const ValueKey('mid'))).width, greaterThanOrEqualTo(380));
});
testWidgets('201: 최소 폭을 주지 않은 화면은 예전처럼 (폭만으로 정함)', (tester) async {
tester.view.physicalSize = const Size(900, 400);
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.reset);
await tester.pumpWidget(bar());
await tester.pump();
await tester.pump();
expect(tester.getSize(find.byKey(const ValueKey('mid'))).width, lessThan(380));
});
}