[e2e] Enable e2e test for spinning square view

This change re-enables the e2e test for spinning square view. It tests
for successful launch of spinning-square-view app.
- Remove stale e2e tests from previous iterations of ermine.

Change-Id: Ife1454c97f1988d820c6e16ab804868df17af520
Reviewed-on: https://fuchsia-review.googlesource.com/c/experiences/+/705344
Reviewed-by: Charles Whitten <cwhitten@google.com>
Commit-Queue: Sanjay Chouksey <sanjayc@google.com>
diff --git a/tests/e2e/BUILD.gn b/tests/e2e/BUILD.gn
index 6aefe7b..45bb96f 100644
--- a/tests/e2e/BUILD.gn
+++ b/tests/e2e/BUILD.gn
@@ -28,11 +28,7 @@
   null_safe = true
   sources = [
     "ermine_intl_test.dart",
-    #    "ermine_session_shell_ask_test.dart",
-    #    "ermine_session_shell_quicksettings_test.dart",
-    #    "ermine_shell_shortcut_test.dart",
-    #    "ermine_shell_test.dart",
-    #    "ermine_spinning_square_view_test.dart",
+    "ermine_spinning_square_view_test.dart",
   ]
 
   deps = [
diff --git a/tests/e2e/README.md b/tests/e2e/README.md
index 6b0d5b4..d6982ff 100644
--- a/tests/e2e/README.md
+++ b/tests/e2e/README.md
@@ -5,8 +5,8 @@
 
 # Build
 
-`fx set workstation.x64 --release --args=flutter_driver_enabled=true`
+`fx set workstation_eng.x64 --release --args=flutter_driver_enabled=true`
 
 # Run
 
-`fx test -o --e2e experiences_ermine_session_shell_e2e_test`
+`fx test --e2e -o ermine_session_shell_e2e_test`
diff --git a/tests/e2e/test/ermine_session_shell_ask_test.dart b/tests/e2e/test/ermine_session_shell_ask_test.dart
deleted file mode 100644
index 9da7eb6..0000000
--- a/tests/e2e/test/ermine_session_shell_ask_test.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2019 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:ermine_driver/ermine_driver.dart';
-import 'package:flutter_driver/flutter_driver.dart';
-import 'package:sl4f/sl4f.dart';
-import 'package:test/test.dart';
-
-void main() {
-  late Sl4f sl4f;
-  late ErmineDriver ermine;
-
-  setUp(() async {
-    sl4f = Sl4f.fromEnvironment();
-    await sl4f.startServer();
-
-    ermine = ErmineDriver(sl4f);
-    await ermine.setUp();
-  });
-
-  tearDown(() async {
-    // Any of these may end up being null if the test fails in setup.
-    await ermine.tearDown();
-    await sl4f.stopServer();
-    sl4f.close();
-  });
-
-  test('use ask to launch terminal and verify focus', () async {
-    await ermine.gotoOverview();
-    await ermine.driver.requestData('clear');
-    final terminalResult = find.text('terminal');
-    await ermine.driver.tap(terminalResult);
-
-    // The terminal view should be displayed in a window with title.
-    final terminalTitle = await ermine.driver.getText(find.text('terminal'));
-    expect(terminalTitle, 'terminal');
-
-    // The inspect data should show that the view has focus.
-    const componentUrl = 'fuchsia-pkg://fuchsia.com/terminal#meta/terminal.cmx';
-    await ermine.waitForView(componentUrl, testForFocus: true);
-
-    // Close the terminal view.
-    await ermine.driver.requestData('close');
-  });
-}
diff --git a/tests/e2e/test/ermine_session_shell_quicksettings_test.dart b/tests/e2e/test/ermine_session_shell_quicksettings_test.dart
deleted file mode 100644
index c50d9a3..0000000
--- a/tests/e2e/test/ermine_session_shell_quicksettings_test.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2019 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:ermine_driver/ermine_driver.dart';
-import 'package:flutter_driver/flutter_driver.dart';
-import 'package:sl4f/sl4f.dart';
-import 'package:test/test.dart';
-
-/// Tests that the DUT running ermine can do the following:
-///  - Verify quickstatus memory setting is present
-void main() {
-  late Sl4f sl4f;
-  late SetUi setUi;
-  late ErmineDriver ermine;
-
-  setUpAll(() async {
-    sl4f = Sl4f.fromEnvironment();
-    await sl4f.startServer();
-    setUi = SetUi(sl4f);
-
-    ermine = ErmineDriver(sl4f);
-    await ermine.setUp();
-  });
-
-  tearDownAll(() async {
-    // Any of these may end up being null if the test fails in setup
-    await ermine.tearDown();
-    await sl4f.stopServer();
-    sl4f.close();
-  });
-
-  test('verify channel setting present in quicksettings', () async {
-    await ermine.gotoOverview();
-
-    // channel will always be present in quicksettings
-    final channelTitle = await ermine.driver.getText(find.text('CHANNEL'));
-    expect(channelTitle, 'CHANNEL');
-  });
-
-  test('verify can change timezone setting in quicksettings', () async {
-    await ermine.gotoOverview();
-
-    // Change the system timezone using setui service.
-    await setUi.setTimeZone('UTC');
-
-    // tap default timezone (UTC) to launch timezone list
-    final defaultTimezone = find.text('UTC');
-    await ermine.driver.waitFor(find.text('UTC'));
-    await ermine.driver.tap(defaultTimezone);
-
-    // select America/Los_Angeles timezone from timezone list
-    final newTimezone = find.text('America/Los_Angeles');
-    await ermine.driver.waitFor(newTimezone);
-    await ermine.driver.tap(newTimezone);
-
-    // verify selected timezone is present in quicksettings
-    final selectedTimezone =
-        await ermine.driver.getText(find.text('AMERICA/LOS_ANGELES'));
-    expect(selectedTimezone, 'AMERICA/LOS_ANGELES');
-  });
-
-  test('verify can tap restart in quicksettings', () async {
-    await ermine.gotoOverview();
-
-    final button = find.text('RESTART');
-    await ermine.driver.waitFor(button);
-
-    // tap restart button to trigger restart
-    await ermine.driver.tap(button);
-    await Future.delayed(Duration(seconds: 1));
-
-    // wait for system to reboot and reconnect
-    // logic taken from `sl4f.reboot()`
-    await sl4f.stopServer();
-    await Future.delayed(Duration(seconds: 3));
-
-    // try to restart SL4F
-    await sl4f.startServer();
-    expect(await sl4f.isRunning(), isTrue);
-  }, timeout: Timeout(Duration(minutes: 2)));
-}
diff --git a/tests/e2e/test/ermine_shell_shortcut_test.dart b/tests/e2e/test/ermine_shell_shortcut_test.dart
deleted file mode 100644
index 168975c..0000000
--- a/tests/e2e/test/ermine_shell_shortcut_test.dart
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright 2021 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:ermine_driver/ermine_driver.dart';
-import 'package:fidl_fuchsia_input/fidl_async.dart';
-import 'package:fidl_fuchsia_ui_input3/fidl_async.dart' hide KeyEvent;
-import 'package:flutter_driver/flutter_driver.dart';
-import 'package:sl4f/sl4f.dart';
-import 'package:test/test.dart';
-
-/// Tests that the DUT running ermine can do the following:
-///  - Respond to keyboard shortcuts to control Ermine.
-/// Assumes the shortcuts listed in:
-/// http://cs/fuchsia/src/experiences/session_shells/ermine/shell/config/keyboard_shortcuts.json
-void main() {
-  late Sl4f sl4f;
-  late ErmineDriver ermine;
-  late Input input;
-
-  const keyPressedDuration = Duration(milliseconds: 100);
-  const keyReleasedDuration = Duration(milliseconds: 200);
-  const keyExecution = Duration(seconds: 2);
-
-  setUpAll(() async {
-    sl4f = Sl4f.fromEnvironment();
-    await sl4f.startServer();
-
-    ermine = ErmineDriver(sl4f);
-    await ermine.setUp();
-
-    input = Input(sl4f);
-  });
-
-  tearDownAll(() async {
-    // Any of these may end up being null if the test fails in setup.
-    await ermine.tearDown();
-    await sl4f.stopServer();
-    sl4f.close();
-  });
-
-  setUp(() async {
-    // Close all running views.
-    await ermine.driver.requestData('closeAll');
-    await ermine.gotoOverview();
-  });
-
-  Future<void> launchTerminal() async {
-    await ermine.launch(terminalUrl);
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-    // Verify terminal is launched and has focus.
-    expect(
-        await ermine.waitFor(() async {
-          final view = await ermine.waitForView(terminalUrl);
-          return view.focused == true;
-        }),
-        isTrue);
-    // Verify terminal is displaying a prompt.
-    expect(
-        await ermine.waitFor(() async {
-          final snapshot = await Inspect(sl4f).snapshotRoot('terminal.cmx');
-          if (snapshot != null) {
-            return snapshot['grid'].toString().endsWith('\$');
-          }
-          return false;
-        }),
-        isTrue);
-    await ermine.driver.waitForAbsent(find.byValueKey('overview'));
-  }
-
-  test('Toggle between Overview and Home screens', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-
-    // Shortcut Meta + Esc should toggle to Overview screen.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.escape);
-    await ermine.driver.waitFor(find.byValueKey('overview'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Meta + Esc should toggle back to Home screen.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.escape);
-    await ermine.driver.waitForAbsent(find.byValueKey('overview'));
-  });
-
-  test('Toggle Ask using shortcut', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitForAbsent(find.byType('Ask'));
-
-    // Shortcut Alt + Space should display Ask box.
-    await ermine.twoKeyShortcut(Key.leftAlt, Key.space);
-    await ermine.driver.waitFor(find.byType('Ask'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Alt + Space should hide Ask box.
-    await ermine.twoKeyShortcut(Key.leftAlt, Key.space);
-    await ermine.driver.waitForAbsent(find.byType('Ask'));
-  });
-
-  test('Toggle QuickSettings using shortcut', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitForAbsent(find.byType('Status'));
-
-    // Shortcut Alt + s should display Quick Settings.
-    await ermine.twoKeyShortcut(Key.leftAlt, Key.s);
-    await ermine.driver.waitFor(find.byType('Status'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Escape should hide QuickSettings.
-    await input.keyEvents([
-      KeyEvent(Key.escape, keyPressedDuration, KeyEventType.pressed),
-      KeyEvent(Key.escape, keyReleasedDuration, KeyEventType.released),
-    ]);
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-    await ermine.driver.waitForAbsent(find.byType('Status'));
-  });
-
-  test('Show keyboard help', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitForAbsent(find.byValueKey('keyboardHelp'));
-
-    // Shortcut Meta + / should display keyboard help.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.slash);
-    await ermine.driver.waitFor(find.byValueKey('keyboardHelp'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Escape should hide keyboard help.
-    await input.keyEvents([
-      KeyEvent(Key.escape, keyPressedDuration, KeyEventType.pressed),
-      KeyEvent(Key.escape, keyReleasedDuration, KeyEventType.released),
-    ]);
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-    await ermine.driver.waitForAbsent(find.byValueKey('keyboardHelp'));
-  });
-
-  test('Toggle Recents', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitForAbsent(find.byType('Thumbnails'));
-
-    // Shortcut Meta + r should display Recents.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.r);
-    await ermine.driver.waitFor(find.byType('Thumbnails'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Meta + r should now hide (toggle) Recents.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.r);
-    await ermine.driver.waitForAbsent(find.byType('Thumbnails'));
-  });
-
-  test('Toggle Fullscreen', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitForAbsent(find.byValueKey('fullscreen'));
-
-    // Shortcut Meta + f should display terminal fullscreen.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.f);
-    await ermine.driver.waitFor(find.byValueKey('fullscreen'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Meta + f should restore(toggle) fullscreen.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.f);
-    await ermine.driver.waitForAbsent(find.byValueKey('fullscreen'));
-  });
-
-  test('Close View', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitFor(find.text('terminal.cmx'));
-
-    // Shortcut Meta + w should close terminal view and display Overview.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.w);
-    await ermine.driver.waitFor(find.byValueKey('overview'));
-    await ermine.driver.waitForAbsent(find.text('terminal.cmx'));
-  });
-
-  test('Switch workspaces', () async {
-    // Launch terminal. This should display Home screen with terminal view.
-    await launchTerminal();
-    await ermine.driver.waitFor(find.text('terminal.cmx'));
-
-    // Shortcut Meta + right should switch to new workspace on right.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.right);
-    await ermine.driver.waitForAbsent(find.text('terminal.cmx'));
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: keyExecution);
-
-    // Shortcut Meta + left should switch back to previous workspace on left.
-    await ermine.twoKeyShortcut(Key.leftMeta, Key.left);
-    await ermine.driver.waitFor(find.text('terminal.cmx'));
-  });
-}
diff --git a/tests/e2e/test/ermine_shell_test.dart b/tests/e2e/test/ermine_shell_test.dart
deleted file mode 100644
index 687af21..0000000
--- a/tests/e2e/test/ermine_shell_test.dart
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2021 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:math';
-
-import 'package:ermine_driver/ermine_driver.dart';
-import 'package:sl4f/sl4f.dart';
-import 'package:test/test.dart';
-
-void main() {
-  late Sl4f sl4f;
-  late ErmineDriver ermine;
-  late Input input;
-
-  const kTransientWait = Duration(seconds: 2);
-
-  setUpAll(() async {
-    sl4f = Sl4f.fromEnvironment();
-    await sl4f.startServer();
-
-    ermine = ErmineDriver(sl4f);
-    await ermine.setUp();
-
-    input = Input(sl4f);
-  });
-
-  tearDownAll(() async {
-    // Any of these may end up being null if the test fails in setup.
-    await ermine.tearDown();
-    await sl4f.stopServer();
-    sl4f.close();
-  });
-
-  test('Launch terminal and show recents', () async {
-    // Launch terminal.
-    const componentUrl = 'fuchsia-pkg://fuchsia.com/terminal#meta/terminal.cmx';
-    await ermine.launch(componentUrl);
-
-    // Terminal should fill the view from left to right edge.
-    var viewRect = await ermine.getViewRect(componentUrl);
-    expect(viewRect.left, equals(0));
-
-    // Toggle Recents, until it is visible. Terminal view is shifted right.
-    expect(
-        await ermine.waitFor(() async {
-          await ermine.driver.requestData('recents');
-          await ermine.driver
-              .waitUntilNoTransientCallbacks(timeout: kTransientWait);
-          viewRect = await ermine.getViewRect(componentUrl);
-          return viewRect.left > 0;
-        }),
-        isTrue);
-
-    // Close terminal.
-    await ermine.driver.requestData('close');
-    await ermine.driver.waitUntilNoTransientCallbacks(timeout: kTransientWait);
-    await ermine.isStopped(componentUrl);
-  });
-
-  // TODO(https://fxbug.dev/73501): Enable once tap gesture is implemented.
-  test('Switch focus using pointer', () async {
-    // Launch terminal.
-    const terminalUrl = 'fuchsia-pkg://fuchsia.com/terminal#meta/terminal.cmx';
-    await ermine.launch(terminalUrl);
-    await ermine.waitForView(terminalUrl, testForFocus: true);
-
-    // Launch spinning-square-rs, it should have focus.
-    const spinningSquareViewUrl =
-        'fuchsia-pkg://fuchsia.com/spinning-square-rs#meta/spinning-square-rs.cmx';
-    await ermine.launch(spinningSquareViewUrl);
-    await ermine.waitForView(spinningSquareViewUrl, testForFocus: true);
-
-    // Tap on terminal to switch focus to it. Terminal view should be left half
-    // of the screen. [input.tap] assumes screen resolution as 1000 x 1000.
-    await input.tap(Point(250, 500));
-    await ermine.driver.waitUntilNoTransientCallbacks();
-
-    // Terminal should now have focus.
-    await ermine.waitForView(terminalUrl, testForFocus: true);
-  }, skip: true);
-}
diff --git a/tests/e2e/test/ermine_spinning_square_view_test.dart b/tests/e2e/test/ermine_spinning_square_view_test.dart
index 4db2261..2aefc30 100644
--- a/tests/e2e/test/ermine_spinning_square_view_test.dart
+++ b/tests/e2e/test/ermine_spinning_square_view_test.dart
@@ -46,9 +46,9 @@
     return null;
   }
 
-  test('Verify spinning square view is shown', () async {
+  test('Verify spinning square view is launched', () async {
     const componentUrl =
-        'fuchsia-pkg://fuchsia.com/spinning-square-rs#meta/spinning-square-rs.cmx';
+        'fuchsia-pkg://fuchsia.com/spinning-square-rs#meta/spinning-square-rs.cm';
     await ermine.launch(componentUrl);
     expect(
         await ermine.waitFor(() async {
@@ -59,28 +59,30 @@
         }),
         isTrue);
 
-    // Get the view rect.
-    final viewRect = await ermine.getViewRect(componentUrl);
     // Give the view couple of seconds to draw before taking its screenshot.
     await Future.delayed(Duration(seconds: 2));
-    final screenshot = await screenshotUntilNotBlack(viewRect);
-    expect(screenshot, isNotNull);
-    final histogram = ermine.histogram(screenshot!);
 
-    // spinning-square-rs displays a red square on purple background.
-    const purple = 0xffb73a67; //  (0xAABBGGRR)
-    const red = 0xff5700f5; //  (0xAABBGGRR)
-    // We should find atleast 2 colors (the visible cursor adds its own color).
-    expect(histogram.keys.length >= 2, isTrue);
-    expect(histogram[purple], isNotNull);
-    expect(histogram[red], isNotNull);
-    expect(histogram[purple]! > histogram[red]!, isTrue);
+    // Get the view rect.
+    expect(
+        await ermine.waitFor(() async {
+          final viewRect = await ermine.getViewRect(componentUrl);
+          print('Spinning-square-view rect: $viewRect');
+          return viewRect.width > 0 && viewRect.height > 0;
+        }),
+        isTrue);
+    // TODO(fxbug.dev/91950): Reenable on AEMU after Screenshots on Flatland is not flaky.
+    // final viewRect = await ermine.getViewRect(componentUrl);
+    // final screenshot = await screenshotUntilNotBlack(viewRect);
+    // expect(screenshot, isNotNull);
+    // final histogram = ermine.histogram(screenshot!);
 
-    // Close the view.
-    await ermine.driver.requestData('close');
-    // Verify the view is closed.
-    await ermine.driver.waitForAbsent(find.text('spinning_square_view'));
-    // Ensure the component has stopped running.
-    await ermine.isStopped(componentUrl);
+    // // spinning-square-rs displays a red square on purple background.
+    // const purple = 0xffb73a67; //  (0xAABBGGRR)
+    // const red = 0xff5700f5; //  (0xAABBGGRR)
+    // // We should find atleast 2 colors (the visible cursor adds its own color).
+    // expect(histogram.keys.length >= 2, isTrue);
+    // expect(histogram[purple], isNotNull);
+    // expect(histogram[red], isNotNull);
+    // expect(histogram[purple]! > histogram[red]!, isTrue);
   });
 }
diff --git a/tests/lib/ermine_driver.dart b/tests/lib/ermine_driver.dart
index ab9bbed..5ba03ef 100644
--- a/tests/lib/ermine_driver.dart
+++ b/tests/lib/ermine_driver.dart
@@ -619,12 +619,13 @@
           await login.tap(find.byValueKey('login'));
           await login.waitForAbsent(find.byType('Login'),
               timeout: Duration(minutes: 2));
-          print('password entered');
+          print('Login done');
         }
       }
     }
 
     print('Starting ermine shell');
+    await Future.delayed(Duration(seconds: 2));
     await inspectSnapshot(kLoginInspectSelector,
         predicate: (snapshot) => snapshot['ermineReady'] == true);
     // We should land on the Ermine shell.
@@ -719,7 +720,8 @@
   String get url => inspectData['url'] ?? '';
 
   Rectangle get viewport {
-    final viewRect = inspectData['viewportLTRB'];
+    final viewRect =
+        inspectData['viewportLTRB']?.split(',')?.map(num.parse).toList();
     if (viewRect != null) {
       return Rectangle.fromPoints(
         Point(viewRect[0], viewRect[1]),