diff --git a/integration_test/app_test.dart b/integration_test/app_test.dart index d2031e929..8a1eaeed6 100644 --- a/integration_test/app_test.dart +++ b/integration_test/app_test.dart @@ -1,85 +1,90 @@ import "package:flutter/material.dart"; import "package:flutter_test/flutter_test.dart"; import "package:integration_test/integration_test.dart"; -import 'package:photos/main.dart' as app; +import "package:photos/main.dart" as app; import "package:scrollable_positioned_list/scrollable_positioned_list.dart"; void main() { group("App test", () { final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - // binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive; + binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive; testWidgets("Demo test", (tester) async { app.main(); - try { - await tester.pumpAndSettle(const Duration(seconds: 5)); - await dismissUpdateAppDialog(tester); + await tester.pumpAndSettle(const Duration(seconds: 5)); - //Click the sign in button on the landing page - final signInButton = find.byKey(const ValueKey("signInButton")); - await tester.tap(signInButton); - await tester.pumpAndSettle(); + await dismissUpdateAppDialog(tester); - //Enter the email address and click the login button - final emailInputField = find.byKey(const ValueKey("emailInputField")); - final logInButton = find.byKey(const ValueKey("logInButton")); - await tester.enterText(emailInputField, "enter email here"); - await tester.pumpAndSettle(const Duration(seconds: 3)); - await findAndTapFAB(tester, logInButton); + //Click the sign in button on the landing page + final signInButton = find.byKey(const ValueKey("signInButton")); + await tester.tap(signInButton); + await tester.pumpAndSettle(); - //Enter OTT and click the verify button - final ottVerificationInputField = - find.byKey(const ValueKey("ottVerificationInputField")); - final verifyOttButton = find.byKey(const ValueKey("verifyOttButton")); - await tester.tap(ottVerificationInputField); - await tester.pumpAndSettle(); - await tester.enterText(ottVerificationInputField, "enter otp here"); - await tester.pumpAndSettle(); - await findAndTapFAB(tester, verifyOttButton); + //Enter the email address and click the login button + final emailInputField = find.byKey(const ValueKey("emailInputField")); + final logInButton = find.byKey(const ValueKey("logInButton")); + // await tester.enterText(emailInputField, "enter email here"); + await tester.tap(emailInputField); + await tester.pumpAndSettle(const Duration(seconds: 20)); + await findAndTapFAB(tester, logInButton); - //Enter password and click the verify button - final passwordInputField = - find.byKey(const ValueKey("passwordInputField")); - final verifyPasswordButton = - find.byKey(const ValueKey("verifyPasswordButton")); - await tester.enterText(passwordInputField, "ente password here"); - await tester.pumpAndSettle(); - await findAndTapFAB(tester, verifyPasswordButton); + //Enter OTT and click the verify button + final ottVerificationInputField = + find.byKey(const ValueKey("ottVerificationInputField")); + final verifyOttButton = find.byKey(const ValueKey("verifyOttButton")); + await tester.pumpAndSettle(); + // await tester.enterText(ottVerificationInputField, "enter ott here"); + await tester.tap(ottVerificationInputField); + await tester.pumpAndSettle(const Duration(seconds: 10)); + await findAndTapFAB(tester, verifyOttButton); - await tester.pumpAndSettle(const Duration(seconds: 2)); - await dismissUpdateAppDialog(tester); + //Enter password and click the verify button + final passwordInputField = + find.byKey(const ValueKey("passwordInputField")); + final verifyPasswordButton = + find.byKey(const ValueKey("verifyPasswordButton")); + // await tester.enterText(passwordInputField, "enter password here"); + await tester.tap(passwordInputField); + await tester.pumpAndSettle(const Duration(seconds: 20)); + await findAndTapFAB(tester, verifyPasswordButton); - //Grant permission to access photos - final grantPermissionButton = - find.byKey(const ValueKey("grantPermissionButton")); - await tester.tap(grantPermissionButton); - await tester.pumpAndSettle(const Duration(seconds: 1)); + await tester.pumpAndSettle(const Duration(seconds: 1)); + await dismissUpdateAppDialog(tester); - //Manually grant permission to access photos within 3 seconds - await tester.pumpAndSettle(const Duration(seconds: 3)); + //Grant permission to access photos + final grantPermissionButton = + find.byKey(const ValueKey("grantPermissionButton")); + await tester.tap(grantPermissionButton); + await tester.pumpAndSettle(const Duration(seconds: 1)); - //Skip backup - final skipBackupButton = find.byKey(const ValueKey("skipBackupButton")); - await tester.tap(skipBackupButton); - await tester.pumpAndSettle(const Duration(seconds: 3)); + //Manually grant permission to access photos within 3 seconds + await tester.pumpAndSettle(const Duration(seconds: 3)); - //scroll gallery - final scrollablePositionedList = find.byType(ScrollablePositionedList); - await tester.fling( - scrollablePositionedList, - const Offset(0, -4000), - 4000, - ); - await tester.pumpAndSettle(); - await tester.fling( - scrollablePositionedList, - const Offset(0, 4000), - 4000, - ); - await tester.pumpAndSettle(); - } catch (e) { - print("\n$e\n"); - } + //Skip backup + final skipBackupButton = find.byKey(const ValueKey("skipBackupButton")); + await tester.tap(skipBackupButton); + await tester.pumpAndSettle(const Duration(seconds: 2)); + + await binding.traceAction( + () async { + //scroll gallery + final scrollablePositionedList = + find.byType(ScrollablePositionedList); + await tester.fling( + scrollablePositionedList, + const Offset(0, -5000), + 3800, + ); + await tester.pumpAndSettle(); + await tester.fling( + scrollablePositionedList, + const Offset(0, 5000), + 3800, + ); + await tester.pumpAndSettle(); + }, + reportKey: 'scrolling_summary', + ); }); }); } diff --git a/lib/main.dart b/lib/main.dart index fb509cfdc..eb84ad8b3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -61,7 +61,6 @@ const kBackgroundLockLatency = Duration(seconds: 3); void main() async { debugRepaintRainbowEnabled = false; - WidgetsFlutterBinding.ensureInitialized(); final savedThemeMode = await AdaptiveTheme.getThemeMode(); await _runInForeground(savedThemeMode); BackgroundFetch.registerHeadlessTask(_headlessTaskHandler); diff --git a/pubspec.yaml b/pubspec.yaml index a65917ace..c3a7ff614 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -140,6 +140,8 @@ dependency_overrides: dev_dependencies: build_runner: ^2.3.3 + flutter_driver: + sdk: flutter flutter_lints: ^2.0.1 flutter_test: sdk: flutter @@ -147,9 +149,7 @@ dev_dependencies: integration_test: sdk: flutter json_serializable: ^6.6.1 - test: - flutter_driver: - sdk: flutter + test: ^1.22.0 flutter_icons: android: "launcher_icon" diff --git a/test_driver/perf_driver.dart b/test_driver/perf_driver.dart new file mode 100644 index 000000000..2d510fe62 --- /dev/null +++ b/test_driver/perf_driver.dart @@ -0,0 +1,23 @@ +import 'package:flutter_driver/flutter_driver.dart' as driver; +import 'package:integration_test/integration_test_driver.dart'; + +Future main() { + return integrationDriver( + responseDataCallback: (data) async { + if (data != null) { + final timeline = driver.Timeline.fromJson( + data['scrolling_summary'] as Map, + ); + + final summary = driver.TimelineSummary.summarize(timeline); + + await summary.writeTimelineToFile( + 'scrolling_summary', + pretty: true, + includeSummary: true, + //Specify destination directory for the timeline files. + ); + } + }, + ); +}