diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 83b59ab..321f748 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ on: push jobs: test: name: Run Tests - runs-on: macos-latest + runs-on: windows-latest steps: - uses: actions/checkout@v2 diff --git a/lib/src/ui/screens/guest/guest_page.dart b/lib/src/ui/screens/guest/guest_page.dart index 469795b..a136c4e 100644 --- a/lib/src/ui/screens/guest/guest_page.dart +++ b/lib/src/ui/screens/guest/guest_page.dart @@ -10,24 +10,26 @@ class GuestPage extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { return Scaffold( - body: Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'Notes', - style: TextStyle( - fontSize: 72, - color: Theme.of(context).primaryColor, + body: Container( + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'NotesNotesNotesNoteesotesNotesNotNotesNotes', + style: TextStyle( + fontSize: 72, + color: Theme.of(context).primaryColor, + ), ), - ), - OutlinedButton( - onPressed: () { - ref.read(profileProvider.notifier).signIn(); - }, - child: const Text('Login'), - ), - ], + OutlinedButton( + onPressed: () { + ref.read(profileProvider.notifier).signIn(); + }, + child: const Text('Login Login Login Login '), + ), + ], + ), ), ), ); diff --git a/pubspec.lock b/pubspec.lock index a7718ff..29f06f1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -400,7 +400,7 @@ packages: name: golden_toolkit url: "https://pub.dartlang.org" source: hosted - version: "0.11.0" + version: "0.12.0" google_sign_in: dependency: "direct main" description: @@ -549,7 +549,7 @@ packages: source: hosted version: "2.0.0" path: - dependency: transitive + dependency: "direct main" description: name: path url: "https://pub.dartlang.org" diff --git a/pubspec.yaml b/pubspec.yaml index d06bd77..cb6d9e8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -64,6 +64,7 @@ dependencies: logger: ^1.1.0 intl: ^0.17.0 uuid: ^3.0.5 + path: ^1.8.0 @@ -74,7 +75,7 @@ dev_dependencies: json_serializable: ^5.0.2 freezed: ^0.15.0+1 mockito: ^5.0.16 - golden_toolkit: ^0.11.0 + golden_toolkit: ^0.12.0 # The "flutter_lints" package below contains a set of recommended lints to # encourage good coding practices. The lint set provided by the package is @@ -95,8 +96,8 @@ flutter: uses-material-design: true # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg + assets: + - screenshots/rainbow.png # - images/a_dot_ham.jpeg # An image asset can refer to one or more resolution-specific "variants", see diff --git a/screenshots/rainbow.png b/screenshots/rainbow.png new file mode 100644 index 0000000..22390d4 Binary files /dev/null and b/screenshots/rainbow.png differ diff --git a/test/flutter_test_config.dart b/test/flutter_test_config.dart index 31cf470..bc7d99c 100644 --- a/test/flutter_test_config.dart +++ b/test/flutter_test_config.dart @@ -1,8 +1,15 @@ import 'dart:async'; +import 'package:flutter_test/flutter_test.dart'; import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:path/path.dart' as path; +import 'goldens_test/guest/guest_page_test.dart'; Future testExecutable(FutureOr Function() testMain) async { - await loadAppFonts(); + // await loadAppFonts(); + goldenFileComparator = CocoonFileComparator(path.join( + (goldenFileComparator as LocalFileComparator).basedir.toString(), + 'guest_page', + )); return testMain(); } diff --git a/test/goldens_test/goldens/image_widget.png b/test/goldens_test/goldens/image_widget.png new file mode 100644 index 0000000..894bd73 Binary files /dev/null and b/test/goldens_test/goldens/image_widget.png differ diff --git a/test/goldens_test/goldens/some_widget.png b/test/goldens_test/goldens/some_widget.png new file mode 100644 index 0000000..4d5efb5 Binary files /dev/null and b/test/goldens_test/goldens/some_widget.png differ diff --git a/test/goldens_test/guest/goldens/guest_page.png b/test/goldens_test/guest/goldens/guest_page.png index 702a723..4e79b8a 100644 Binary files a/test/goldens_test/guest/goldens/guest_page.png and b/test/goldens_test/guest/goldens/guest_page.png differ diff --git a/test/goldens_test/guest/guest_page_test.dart b/test/goldens_test/guest/guest_page_test.dart index 01d6fce..f716ba9 100644 --- a/test/goldens_test/guest/guest_page_test.dart +++ b/test/goldens_test/guest/guest_page_test.dart @@ -1,22 +1,61 @@ +import 'dart:developer'; +import 'dart:typed_data'; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:golden_toolkit/golden_toolkit.dart'; import 'package:notes/src/ui/screens/guest/guest_page.dart'; - +import 'package:path/path.dart' as path; void main() { testGoldens('GuestPage', (tester) async { final builder = DeviceBuilder() ..overrideDevicesForAllScenarios(devices: [ - Device.phone, Device.iphone11, - Device.tabletPortrait, - Device.tabletLandscape, ]) ..addScenario( widget: const GuestPage(), name: 'Guest page', ); - await tester.pumpDeviceBuilder(builder); - - await screenMatchesGolden(tester, 'guest_page'); + await tester.pumpDeviceBuilder(builder,wrapper: materialAppWrapper( + theme: ThemeData.light(), + platform: TargetPlatform.android, + )); + // goldenFileComparator = CocoonFileComparator(path.join( + // (goldenFileComparator as LocalFileComparator).basedir.toString(), + // 'guest_page', + // )); + try { + await screenMatchesGolden(tester, 'guest_page'); + } catch (e) { + print(e); + } }); } + +const double _kGoldenDiffTolerance = 0.05; + +class CocoonFileComparator extends LocalFileComparator { + CocoonFileComparator(String testFile) : super(Uri.parse(testFile)); + + @override + Future compare(Uint8List imageBytes, Uri golden) async { + print('golden: $golden'); + final ComparisonResult result = await GoldenFileComparator.compareLists( + imageBytes, + await getGoldenBytes(golden), + ); + + print('result : ${result.passed}, ${result.diffPercent}'); + + if (!result.passed && result.diffPercent > _kGoldenDiffTolerance) { + final String error = await generateFailureOutput(result, golden, basedir); + throw FlutterError(error); + } + if (!result.passed) { + log('A tolerable difference of ${result.diffPercent * 100}% was found when ' + 'comparing $golden.'); + } + return result.passed || result.diffPercent <= _kGoldenDiffTolerance; + } +} diff --git a/test/goldens_test/image_widget_test.dart b/test/goldens_test/image_widget_test.dart new file mode 100644 index 0000000..c282c4b --- /dev/null +++ b/test/goldens_test/image_widget_test.dart @@ -0,0 +1,40 @@ +import 'dart:developer'; +import 'dart:typed_data'; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:notes/src/ui/screens/guest/guest_page.dart'; +import 'package:path/path.dart' as path; + +void main() { + testGoldens('GuestPage', (tester) async { + final builder = DeviceBuilder() + ..overrideDevicesForAllScenarios(devices: [ + Device.phone, + Device.iphone11, + Device.tabletPortrait, + Device.tabletLandscape, + ]) + ..addScenario( + widget: Container( + width: 100, + height: 100, + child: Image.asset('screenshots/rainbow.png'), + ), + name: 'image widget', + ); + ; + + await tester.pumpDeviceBuilder(builder, + wrapper: materialAppWrapper( + theme: ThemeData.light(), + platform: TargetPlatform.android, + )); + // goldenFileComparator = CocoonFileComparator(path.join( + // (goldenFileComparator as LocalFileComparator).basedir.toString(), + // 'guest_page', + // )); + await screenMatchesGolden(tester, 'image_widget'); + }); +} diff --git a/test/goldens_test/some_widget_test.dart b/test/goldens_test/some_widget_test.dart new file mode 100644 index 0000000..86ba655 --- /dev/null +++ b/test/goldens_test/some_widget_test.dart @@ -0,0 +1,48 @@ +import 'dart:developer'; +import 'dart:typed_data'; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:golden_toolkit/golden_toolkit.dart'; +import 'package:notes/src/ui/screens/guest/guest_page.dart'; +import 'package:path/path.dart' as path; + +void main() { + testGoldens('GuestPage', (tester) async { + final builder = DeviceBuilder() + ..overrideDevicesForAllScenarios(devices: [ + Device.phone, + Device.iphone11, + Device.tabletPortrait, + Device.tabletLandscape, + ]) + ..addScenario( + widget: Container( + width: 100, + height: 100, + color: Colors.yellow, + child: Text('hihi'), + ), + name: 'Some widget', + ) + ..addScenario( + widget: Container( + width: 100, + height: 100, + child: Image.asset('screenshots/rainbow.png'), + ), + name: 'image widget', + ); + ; + + await tester.pumpDeviceBuilder(builder, wrapper: materialAppWrapper( + theme: ThemeData.light(), + platform: TargetPlatform.android, + )); + // goldenFileComparator = CocoonFileComparator(path.join( + // (goldenFileComparator as LocalFileComparator).basedir.toString(), + // 'guest_page', + // )); + await screenMatchesGolden(tester, 'some_widget'); + }); +}