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)); }); }