JJ_MKVMaker/test/jj_chip_contract_test.dart

45 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jj_mkvmaker/core/picked_list.dart';
import 'package:jj_mkvmaker/ui/jj_chip.dart';
/// W 공용 위젯 약속 (JjChip · withPicked): 아이콘 칩은 고르면 그 자리에 ✓ 만 (그림 위에 체크가 겹치지 않음 - 62ba78d) ·
/// 아이콘 없는 칩은 Material 처음 꼴 · multi 는 켜고 끄기. 위젯 하나에 대해 한 번만 둔다 (설계 7-2)
void main() {
Future<void> show(WidgetTester t, Widget chip) =>
t.pumpWidget(MaterialApp(home: Scaffold(body: Center(child: chip))));
testWidgets('아이콘 칩: 고르지 않으면 그림, 고르면 그 자리에 ✓ 만 (Material 체크 표는 끔)', (t) async {
await show(t, JjChip(label: '세로 9:16', icon: Icons.crop_portrait, selected: false, onSelected: (_) {}));
expect(find.byIcon(Icons.crop_portrait), findsOneWidget);
expect(t.widget<ChoiceChip>(find.byType(ChoiceChip)).showCheckmark, isFalse);
await show(t, JjChip(label: '세로 9:16', icon: Icons.crop_portrait, selected: true, onSelected: (_) {}));
expect(find.byIcon(Icons.crop_portrait), findsNothing);
expect(find.byIcon(Icons.check), findsOneWidget);
});
testWidgets('아이콘 없는 칩: Material 처음 꼴 (체크 표 켬) · 하나 고르기는 ChoiceChip, 여럿은 FilterChip', (t) async {
await show(t, JjChip(label: '큰 폴더', selected: true, onSelected: (_) {}));
expect(t.widget<ChoiceChip>(find.byType(ChoiceChip)).showCheckmark, isTrue);
bool? got;
await show(t, JjChip(multi: true, label: 'mp4', selected: false, onSelected: (v) => got = v));
expect(find.byType(FilterChip), findsOneWidget);
await t.tap(find.text('mp4'));
expect(got, isTrue);
});
testWidgets('누름 알림이 없으면 누를 수 없음', (t) async {
await show(t, const JjChip(label: '채우기', selected: false, onSelected: null));
expect(t.widget<ChoiceChip>(find.byType(ChoiceChip)).onSelected, isNull);
});
test('withPicked: 켜면 끝에 하나 (이미 있으면 끝으로), 끄면 빼기, 원래 목록은 그대로', () {
final list = ['jpg', 'png'];
expect(withPicked(list, 'gif', true), ['jpg', 'png', 'gif']);
expect(withPicked(list, 'jpg', true), ['png', 'jpg']);
expect(withPicked(list, 'jpg', false), ['png']);
expect(withPicked(list, 'bmp', false), ['jpg', 'png']);
expect(list, ['jpg', 'png']);
});
}