Index: ash/system/chromeos/screen_layout_observer_unittest.cc |
diff --git a/ash/system/chromeos/screen_layout_observer_unittest.cc b/ash/system/chromeos/screen_layout_observer_unittest.cc |
deleted file mode 100644 |
index 193b254cf5e10d2fffd00509945dab3cb06b9a12..0000000000000000000000000000000000000000 |
--- a/ash/system/chromeos/screen_layout_observer_unittest.cc |
+++ /dev/null |
@@ -1,443 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ash/system/chromeos/screen_layout_observer.h" |
- |
-#include "ash/common/system/chromeos/devicetype_utils.h" |
-#include "ash/common/system/tray/system_tray.h" |
-#include "ash/common/test/test_system_tray_delegate.h" |
-#include "ash/shell.h" |
-#include "ash/strings/grit/ash_strings.h" |
-#include "ash/test/ash_test_base.h" |
-#include "base/strings/string16.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "ui/accessibility/ax_node_data.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/display/display.h" |
-#include "ui/display/display_layout_builder.h" |
-#include "ui/display/manager/display_manager.h" |
-#include "ui/message_center/message_center.h" |
-#include "ui/message_center/notification.h" |
-#include "ui/message_center/notification_list.h" |
-#include "ui/views/controls/label.h" |
- |
-namespace ash { |
- |
-class ScreenLayoutObserverTest : public test::AshTestBase { |
- public: |
- ScreenLayoutObserverTest(); |
- ~ScreenLayoutObserverTest() override; |
- |
- protected: |
- ScreenLayoutObserver* GetScreenLayoutObserver(); |
- void CheckUpdate(); |
- |
- void CloseNotification(); |
- base::string16 GetDisplayNotificationText() const; |
- base::string16 GetDisplayNotificationAdditionalText() const; |
- |
- base::string16 GetFirstDisplayName(); |
- |
- base::string16 GetSecondDisplayName(); |
- |
- base::string16 GetMirroringDisplayName(); |
- |
- private: |
- const message_center::Notification* GetDisplayNotification() const; |
- |
- DISALLOW_COPY_AND_ASSIGN(ScreenLayoutObserverTest); |
-}; |
- |
-ScreenLayoutObserverTest::ScreenLayoutObserverTest() {} |
- |
-ScreenLayoutObserverTest::~ScreenLayoutObserverTest() {} |
- |
-ScreenLayoutObserver* ScreenLayoutObserverTest::GetScreenLayoutObserver() { |
- return Shell::GetInstance()->screen_layout_observer(); |
-} |
- |
-void ScreenLayoutObserverTest::CloseNotification() { |
- message_center::MessageCenter::Get()->RemoveNotification( |
- ScreenLayoutObserver::kNotificationId, false); |
- RunAllPendingInMessageLoop(); |
-} |
- |
-base::string16 ScreenLayoutObserverTest::GetDisplayNotificationText() const { |
- const message_center::Notification* notification = GetDisplayNotification(); |
- return notification ? notification->title() : base::string16(); |
-} |
- |
-base::string16 ScreenLayoutObserverTest::GetDisplayNotificationAdditionalText() |
- const { |
- const message_center::Notification* notification = GetDisplayNotification(); |
- return notification ? notification->message() : base::string16(); |
-} |
- |
-base::string16 ScreenLayoutObserverTest::GetFirstDisplayName() { |
- return base::UTF8ToUTF16(display_manager()->GetDisplayNameForId( |
- display_manager()->first_display_id())); |
-} |
- |
-base::string16 ScreenLayoutObserverTest::GetSecondDisplayName() { |
- return base::UTF8ToUTF16(display_manager()->GetDisplayNameForId( |
- display_manager()->GetSecondaryDisplay().id())); |
-} |
- |
-base::string16 ScreenLayoutObserverTest::GetMirroringDisplayName() { |
- return base::UTF8ToUTF16(display_manager()->GetDisplayNameForId( |
- display_manager()->mirroring_display_id())); |
-} |
- |
-const message_center::Notification* |
-ScreenLayoutObserverTest::GetDisplayNotification() const { |
- const message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- for (const auto* notification : notifications) { |
- if (notification->id() == ScreenLayoutObserver::kNotificationId) |
- return notification; |
- } |
- |
- return nullptr; |
-} |
- |
-TEST_F(ScreenLayoutObserverTest, DisplayNotifications) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- |
- UpdateDisplay("400x400"); |
- display::Display::SetInternalDisplayId(display_manager()->first_display_id()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // rotation. |
- UpdateDisplay("400x400/r"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(), |
- l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)), |
- GetDisplayNotificationAdditionalText()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- CloseNotification(); |
- UpdateDisplay("400x400"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName(), |
- l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_STANDARD_ORIENTATION)), |
- GetDisplayNotificationAdditionalText()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // UI-scale |
- CloseNotification(); |
- UpdateDisplay("400x400@1.5"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, |
- GetFirstDisplayName(), base::UTF8ToUTF16("600x600")), |
- GetDisplayNotificationAdditionalText()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // UI-scale to 1.0 |
- CloseNotification(); |
- UpdateDisplay("400x400"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, |
- GetFirstDisplayName(), base::UTF8ToUTF16("400x400")), |
- GetDisplayNotificationAdditionalText()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // No-update |
- CloseNotification(); |
- UpdateDisplay("400x400"); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
- |
- // Extended. |
- CloseNotification(); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, |
- GetSecondDisplayName()), |
- GetDisplayNotificationText()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
- |
- // Mirroring. |
- CloseNotification(); |
- display_manager()->SetSoftwareMirroring(true); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, |
- GetMirroringDisplayName()), |
- GetDisplayNotificationText()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
- |
- // Back to extended. |
- CloseNotification(); |
- display_manager()->SetSoftwareMirroring(false); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, |
- GetSecondDisplayName()), |
- GetDisplayNotificationText()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
- |
- // Resize the first display. |
- UpdateDisplay("400x400@1.5,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, |
- GetFirstDisplayName(), base::UTF8ToUTF16("600x600")), |
- GetDisplayNotificationAdditionalText()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // Rotate the second. |
- UpdateDisplay("400x400@1.5,200x200/r"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetSecondDisplayName(), |
- l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)), |
- GetDisplayNotificationAdditionalText()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // Enters closed lid mode. |
- UpdateDisplay("400x400@1.5,200x200"); |
- display::Display::SetInternalDisplayId( |
- display_manager()->GetSecondaryDisplay().id()); |
- UpdateDisplay("400x400@1.5"); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
-} |
- |
-// Verify that notification shows up when display is switched from dock mode to |
-// extend mode. |
-TEST_F(ScreenLayoutObserverTest, DisplayConfigurationChangedTwice) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), |
- GetDisplayNotificationText()); |
- |
- // OnDisplayConfigurationChanged() may be called more than once for a single |
- // update display in case of primary is swapped or recovered from dock mode. |
- // Should not remove the notification in such case. |
- GetScreenLayoutObserver()->OnDisplayConfigurationChanged(); |
- EXPECT_EQ(l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), |
- GetDisplayNotificationText()); |
- |
- // Back to the single display. It should show that a display was removed. |
- UpdateDisplay("400x400"); |
- EXPECT_TRUE(base::StartsWith( |
- GetDisplayNotificationText(), |
- l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_REMOVED, |
- base::UTF8ToUTF16("")), |
- base::CompareCase::SENSITIVE)); |
-} |
- |
-// Verify the notification message content when one of the 2 displays that |
-// connected to the device is rotated. |
-TEST_F(ScreenLayoutObserverTest, UpdateAfterSuppressDisplayNotification) { |
- UpdateDisplay("400x400,200x200"); |
- |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- |
- // Rotate the second. |
- UpdateDisplay("400x400,200x200/r"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetSecondDisplayName(), |
- l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_ORIENTATION_90)), |
- GetDisplayNotificationAdditionalText()); |
-} |
- |
-// Verify that no notification is shown when overscan of a screen is changed. |
-TEST_F(ScreenLayoutObserverTest, OverscanDisplay) { |
- UpdateDisplay("400x400, 300x300"); |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- display::Display::SetInternalDisplayId(display_manager()->first_display_id()); |
- |
- // /o creates the default overscan. |
- UpdateDisplay("400x400, 300x300/o"); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
- |
- // Reset the overscan. |
- Shell::GetInstance()->display_manager()->SetOverscanInsets( |
- display_manager()->GetSecondaryDisplay().id(), gfx::Insets()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
-} |
- |
-// Tests that exiting mirror mode by closing the lid shows the correct "exiting |
-// mirror mode" message. |
-TEST_F(ScreenLayoutObserverTest, ExitMirrorModeBecauseOfDockedModeMessage) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400,200x200"); |
- display::Display::SetInternalDisplayId( |
- display_manager()->GetSecondaryDisplay().id()); |
- |
- // Mirroring. |
- display_manager()->SetSoftwareMirroring(true); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, |
- GetMirroringDisplayName()), |
- GetDisplayNotificationText()); |
- |
- // Docked. |
- CloseNotification(); |
- display_manager()->SetSoftwareMirroring(false); |
- display::Display::SetInternalDisplayId(display_manager()->first_display_id()); |
- UpdateDisplay("200x200"); |
- EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_MIRROR_EXIT), |
- GetDisplayNotificationText()); |
-} |
- |
-// Tests that exiting mirror mode because of adding a third display shows the |
-// correct "3+ displays mirror mode is not supported" message. |
-TEST_F(ScreenLayoutObserverTest, ExitMirrorModeBecauseOfThirdDisplayMessage) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400,200x200"); |
- display::Display::SetInternalDisplayId( |
- display_manager()->GetSecondaryDisplay().id()); |
- |
- // Mirroring. |
- display_manager()->SetSoftwareMirroring(true); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, |
- GetMirroringDisplayName()), |
- GetDisplayNotificationText()); |
- |
- // Adding a third display. Mirror mode for 3+ displays is not supported. |
- CloseNotification(); |
- display_manager()->SetSoftwareMirroring(false); |
- UpdateDisplay("400x400,200x200,100x100"); |
- EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_MIRRORING_NOT_SUPPORTED), |
- GetDisplayNotificationText()); |
-} |
- |
-// Special case: tests that exiting mirror mode by removing a display shows the |
-// correct message. |
-TEST_F(ScreenLayoutObserverTest, |
- ExitMirrorModeNoInternalDisplayBecauseOfDisplayRemovedMessage) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400,200x200"); |
- display::Display::SetInternalDisplayId( |
- display_manager()->GetSecondaryDisplay().id()); |
- |
- // Mirroring. |
- display_manager()->SetSoftwareMirroring(true); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, |
- GetMirroringDisplayName()), |
- GetDisplayNotificationText()); |
- |
- // Removing one of the displays. We show that we exited mirror mode. |
- CloseNotification(); |
- display_manager()->SetSoftwareMirroring(false); |
- UpdateDisplay("400x400"); |
- EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_MIRROR_EXIT), |
- GetDisplayNotificationText()); |
-} |
- |
-// Tests notification messages shown when adding and removing displays in |
-// extended mode. |
-TEST_F(ScreenLayoutObserverTest, AddingRemovingDisplayExtendedModeMessage) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400"); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // Adding a display in extended mode. |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), |
- GetDisplayNotificationText()); |
- |
- // Removing a display. |
- CloseNotification(); |
- UpdateDisplay("400x400"); |
- EXPECT_TRUE(base::StartsWith( |
- GetDisplayNotificationText(), |
- l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_REMOVED, |
- base::UTF8ToUTF16("")), |
- base::CompareCase::SENSITIVE)); |
-} |
- |
-// Tests notification messages shown when entering and exiting unified desktop |
-// mode. |
-TEST_F(ScreenLayoutObserverTest, EnteringExitingUnifiedModeMessage) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400"); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // Adding a display in extended mode. |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), |
- GetDisplayNotificationText()); |
- |
- // Enter unified mode. |
- display_manager()->SetUnifiedDesktopEnabled(true); |
- EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_UNIFIED), |
- GetDisplayNotificationText()); |
- |
- // Exit unified mode. |
- display_manager()->SetUnifiedDesktopEnabled(false); |
- EXPECT_EQ( |
- l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_UNIFIED_EXITING), |
- GetDisplayNotificationText()); |
- |
- // Enter unified mode again and exit via closing the lid. The message "Exiting |
- // unified mode" should be shown. |
- display_manager()->SetUnifiedDesktopEnabled(true); |
- EXPECT_EQ(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_UNIFIED), |
- GetDisplayNotificationText()); |
- |
- // Close the lid. |
- display::Display::SetInternalDisplayId(display_manager()->first_display_id()); |
- UpdateDisplay("200x200"); |
- display_manager()->SetUnifiedDesktopEnabled(false); |
- EXPECT_EQ( |
- l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_DISPLAY_UNIFIED_EXITING), |
- GetDisplayNotificationText()); |
-} |
- |
-// Special case: Tests notification messages shown when entering docked mode |
-// by closing the lid and the internal display is the secondary display. |
-TEST_F(ScreenLayoutObserverTest, DockedModeWithExternalPrimaryDisplayMessage) { |
- Shell::GetInstance() |
- ->screen_layout_observer() |
- ->set_show_notifications_for_testing(true); |
- UpdateDisplay("400x400,200x200"); |
- EXPECT_EQ(l10n_util::GetStringUTF16( |
- IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL), |
- GetDisplayNotificationText()); |
- CloseNotification(); |
- |
- const int64_t primary_id = display_manager()->GetDisplayAt(0).id(); |
- const int64_t internal_secondary_id = display_manager()->GetDisplayAt(1).id(); |
- display::Display::SetInternalDisplayId(internal_secondary_id); |
- display::DisplayLayoutBuilder builder(primary_id); |
- builder.AddDisplayPlacement(internal_secondary_id, primary_id, |
- display::DisplayPlacement::LEFT, 0); |
- display_manager()->SetLayoutForCurrentDisplays(builder.Build()); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- |
- // Close the lid. We go to docked mode, but we show no notifications. |
- UpdateDisplay("400x400"); |
- EXPECT_TRUE(GetDisplayNotificationText().empty()); |
- EXPECT_TRUE(GetDisplayNotificationAdditionalText().empty()); |
-} |
- |
-} // namespace ash |