60 lines
2.4 KiB
Dart
60 lines
2.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jj_mkvmaker/ui/progress_dialog.dart';
|
|
|
|
/// 관리자 지시 (10/20, 28 지적): 진행 창이 ← · [취소] 로 먼저 닫혀도, 일이 끝난 뒤 close() 가 아래 화면을 닫지 않는다
|
|
void main() {
|
|
Future<BuildContext> pushPage(WidgetTester tester) async {
|
|
late BuildContext page;
|
|
await tester.pumpWidget(MaterialApp(home: Builder(builder: (ctx) {
|
|
return Scaffold(
|
|
body: TextButton(
|
|
onPressed: () => Navigator.of(ctx).push(MaterialPageRoute<void>(builder: (c) {
|
|
page = c;
|
|
return const Scaffold(body: Text('아래 화면'));
|
|
})),
|
|
child: const Text('열기'),
|
|
),
|
|
);
|
|
})));
|
|
await tester.tap(find.text('열기'));
|
|
await tester.pumpAndSettle();
|
|
return page;
|
|
}
|
|
|
|
testWidgets('← 로 닫으면 그만둔 것 - 끝난 뒤 close() 는 아래 화면을 닫지 않는다', (tester) async {
|
|
final page = await pushPage(tester);
|
|
final d = showProgressDialog(page, '여는 중: a.hwp');
|
|
await tester.pump();
|
|
expect(find.text('여는 중: a.hwp'), findsOneWidget);
|
|
expect(d.cancelled(), isFalse);
|
|
// Android ← (창을 닫음)
|
|
await tester.binding.handlePopRoute();
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('여는 중: a.hwp'), findsNothing);
|
|
expect(d.cancelled(), isTrue);
|
|
d.close(); // 일이 끝남 - 이미 닫혔으니 아무것도 닫지 않는다
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('아래 화면'), findsOneWidget, reason: '예전에는 이 pop() 이 아래 화면을 닫았다');
|
|
});
|
|
|
|
testWidgets('[취소] 도 그만둔 것, 일이 끝나 close() 하면 창만 닫히고 그만둔 것이 아니다', (tester) async {
|
|
final page = await pushPage(tester);
|
|
final a = showProgressDialog(page, '바꾸는 중');
|
|
await tester.pump();
|
|
await tester.tap(find.text('취소'));
|
|
await tester.pumpAndSettle();
|
|
expect(a.cancelled(), isTrue);
|
|
expect(find.text('아래 화면'), findsOneWidget);
|
|
|
|
final b = showProgressDialog(page, '바꾸는 중');
|
|
await tester.pump();
|
|
b.close();
|
|
await tester.pumpAndSettle();
|
|
await b.done;
|
|
expect(b.cancelled(), isFalse);
|
|
expect(find.text('바꾸는 중'), findsNothing);
|
|
expect(find.text('아래 화면'), findsOneWidget);
|
|
});
|
|
}
|