import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:image/image.dart' as img; import 'package:imajviewer/widgets/image_canvas.dart'; /// Aynalama uygulandiginda render zincirinde negatif x olcekli bir Transform bulunur. bool _mirrored(WidgetTester tester) => tester .widgetList(find.byType(Transform)) .any((t) => t.transform.entry(0, 0) < 0); Future _pressR(WidgetTester tester) async { await tester.sendKeyDownEvent(LogicalKeyboardKey.keyR); await tester.sendKeyUpEvent(LogicalKeyboardKey.keyR); await tester.pump(); await tester.pump(); } void main() { late Directory tmp; late String pngPath; setUpAll(() { tmp = Directory.systemTemp.createTempSync('flip_test'); pngPath = '${tmp.path}/a.png'; File(pngPath).writeAsBytesSync(img.encodePng(img.Image(width: 4, height: 2))!); }); tearDownAll(() => tmp.deleteSync(recursive: true)); testWidgets('R yatay aynalamayi acar, tekrar basinca kapatir', (tester) async { await tester.pumpWidget(MaterialApp( home: SizedBox( width: 400, height: 300, child: ImageCanvas(filePath: pngPath), ), )); await tester.pump(); expect(_mirrored(tester), isFalse, reason: 'baslangicta aynalama olmamali'); await _pressR(tester); expect(_mirrored(tester), isTrue, reason: 'R sonrasi aynalama acik olmali'); await _pressR(tester); expect(_mirrored(tester), isFalse, reason: 'ikinci R sonrasi eski haline donmeli'); }); }