Index: ash/system/chromeos/tray_display_unittest.cc |
diff --git a/ash/system/chromeos/tray_display_unittest.cc b/ash/system/chromeos/tray_display_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5f5cbd234b0722f4daaf2b84959ee0462f80c395 |
--- /dev/null |
+++ b/ash/system/chromeos/tray_display_unittest.cc |
@@ -0,0 +1,328 @@ |
+// Copyright (c) 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/tray_display.h" |
+ |
+#include "ash/display/display_manager.h" |
+#include "ash/root_window_controller.h" |
+#include "ash/screen_ash.h" |
+#include "ash/shell.h" |
+#include "ash/system/tray/system_tray.h" |
+#include "ash/test/ash_test_base.h" |
+#include "base/string16.h" |
+#include "base/utf_string_conversions.h" |
+#include "grit/ash_strings.h" |
+#include "ui/base/l10n/l10n_util.h" |
+#include "ui/gfx/display.h" |
+ |
+namespace ash { |
+namespace internal { |
+ |
+base::string16 GetTooltipText(const base::string16& line1, |
+ const base::string16& line2) { |
+ return line1 + base::string16(1, '\n') + line2; |
oshima
2013/06/20 21:28:57
nit: ASCIIToUTF16("\n") may be shorter and easier
Jun Mukai
2013/06/20 22:03:07
Done.
|
+} |
+ |
+base::string16 GetTooltipText1(const base::string16& line1) { |
+ return GetTooltipText(line1, base::string16()); |
+} |
+ |
+base::string16 GetTooltipText2(const base::string16& line2) { |
+ return GetTooltipText(base::string16(), line2); |
+} |
+ |
+base::string16 GetFirstDisplayName() { |
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
+ return UTF8ToUTF16(display_manager->GetDisplayNameForId( |
+ display_manager->first_display_id())); |
+} |
+ |
+base::string16 GetSecondDisplayName() { |
+ return UTF8ToUTF16( |
+ Shell::GetInstance()->display_manager()->GetDisplayNameForId( |
+ ScreenAsh::GetSecondaryDisplay().id())); |
+} |
+ |
+base::string16 GetMirroredDisplayName() { |
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
+ return UTF8ToUTF16(display_manager->GetDisplayNameForId( |
+ display_manager->mirrored_display().id())); |
+} |
+ |
+class TrayDisplayTest : public ash::test::AshTestBase { |
+ public: |
+ TrayDisplayTest(); |
+ virtual ~TrayDisplayTest(); |
+ |
+ virtual void SetUp() OVERRIDE; |
+ |
+ protected: |
+ SystemTray* tray() { return tray_; } |
+ |
+ void CloseNotification(); |
+ bool IsDisplayVisibleInTray(); |
+ base::string16 GetTrayDisplayText(); |
+ base::string16 GetTrayDisplayTooltipText(); |
+ base::string16 GetDisplayNotificationText(); |
+ |
+ private: |
+ SystemTray* tray_; |
+ TrayDisplay* tray_display_; |
oshima
2013/06/20 21:28:57
nit: comment ownership.
Jun Mukai
2013/06/20 22:03:07
Done.
|
+ |
+ DISALLOW_COPY_AND_ASSIGN(TrayDisplayTest); |
+}; |
+ |
+TrayDisplayTest::TrayDisplayTest() : tray_(NULL), tray_display_(NULL) { |
+} |
+ |
+TrayDisplayTest::~TrayDisplayTest() { |
+} |
+ |
+void TrayDisplayTest::SetUp() { |
+ ash::test::AshTestBase::SetUp(); |
+ tray_ = Shell::GetPrimaryRootWindowController()->GetSystemTray(); |
+ tray_display_ = new TrayDisplay(tray_); |
+ tray_->AddTrayItem(tray_display_); |
+} |
+ |
+void TrayDisplayTest::CloseNotification() { |
+ tray()->CloseNotificationBubbleForTest(); |
+ tray_display_->HideNotificationView(); |
+ RunAllPendingInMessageLoop(); |
+} |
+ |
+bool TrayDisplayTest::IsDisplayVisibleInTray() { |
+ return tray_display_->IsDisplayViewVisibleForTest(); |
+} |
+ |
+base::string16 TrayDisplayTest::GetTrayDisplayText() { |
+ return tray_display_->GetTrayDisplayTextForTest(); |
+} |
+ |
+base::string16 TrayDisplayTest::GetTrayDisplayTooltipText() { |
+ return tray_display_->GetTrayDisplayTooltipTextForTest(); |
+} |
+ |
+base::string16 TrayDisplayTest::GetDisplayNotificationText() { |
+ return tray_display_->GetDisplayNotificationTextForTest(); |
+} |
+ |
+TEST_F(TrayDisplayTest, NoInternalDisplay) { |
+ UpdateDisplay("400x400"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_FALSE(IsDisplayVisibleInTray()); |
+ |
+ UpdateDisplay("400x400,200x200"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ base::string16 expected = l10n_util::GetStringUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText1(expected), GetTrayDisplayTooltipText()); |
+ |
+ // mirroring |
+ Shell::GetInstance()->display_manager()->SetSoftwareMirroring(true); |
+ UpdateDisplay("400x400,200x200"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ expected = l10n_util::GetStringUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText1(expected), GetTrayDisplayTooltipText()); |
+} |
+ |
+TEST_F(TrayDisplayTest, InternalDisplay) { |
+ UpdateDisplay("400x400"); |
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
+ gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); |
+ |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_FALSE(IsDisplayVisibleInTray()); |
+ |
+ // Extended |
+ UpdateDisplay("400x400,200x200"); |
+ string16 expected = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText1(expected), GetTrayDisplayTooltipText()); |
+ |
+ // Mirroring |
+ display_manager->SetSoftwareMirroring(true); |
+ UpdateDisplay("400x400,200x200"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ |
+ expected = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText1(expected), GetTrayDisplayTooltipText()); |
+ |
+ // TODO(mukai): add test case for docked mode here. |
+} |
+ |
+TEST_F(TrayDisplayTest, InternalDisplayResized) { |
+ UpdateDisplay("400x400@1.5"); |
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
+ gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); |
+ |
+ // Shows the tray_display even though there's a single-display. |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ base::string16 internal_info = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY, |
+ GetFirstDisplayName(), |
+ UTF8ToUTF16("600x600")); |
+ EXPECT_EQ(internal_info, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText2(internal_info), GetTrayDisplayTooltipText()); |
+ |
+ // Extended |
+ UpdateDisplay("400x400@1.5,200x200"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ base::string16 expected = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText(expected, internal_info), |
+ GetTrayDisplayTooltipText()); |
+ |
+ // Mirroring |
+ display_manager->SetSoftwareMirroring(true); |
+ UpdateDisplay("400x400@1.5,200x200"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ expected = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText(expected, internal_info), |
+ GetTrayDisplayTooltipText()); |
+} |
+ |
+TEST_F(TrayDisplayTest, ExternalDisplayResized) { |
+ UpdateDisplay("400x400"); |
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
+ gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); |
+ |
+ // Shows the tray_display even though there's a single-display. |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_FALSE(IsDisplayVisibleInTray()); |
+ |
+ // Extended |
+ UpdateDisplay("400x400,200x200@1.5"); |
+ const gfx::Display& secondary_display = ScreenAsh::GetSecondaryDisplay(); |
+ base::string16 secondary_annotation = UTF8ToUTF16( |
+ " (" + secondary_display.size().ToString() + ")"); |
+ |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ base::string16 expected = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, |
+ GetSecondDisplayName() + secondary_annotation); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText1(expected), GetTrayDisplayTooltipText()); |
+ |
+ // Mirroring: in mirroring, it's not possible to lookup the DisplayInfo. |
+ display_manager->SetSoftwareMirroring(true); |
+ UpdateDisplay("400x400,200x200@1.5"); |
+ tray()->ShowDefaultView(BUBBLE_USE_EXISTING); |
+ EXPECT_TRUE(IsDisplayVisibleInTray()); |
+ expected = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()); |
+ EXPECT_EQ(expected, GetTrayDisplayText()); |
+ EXPECT_EQ(GetTooltipText1(expected), GetTrayDisplayTooltipText()); |
+} |
+ |
+TEST_F(TrayDisplayTest, DisplayNotifications) { |
+ UpdateDisplay("400x400"); |
+ DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
+ gfx::Display::SetInternalDisplayId(display_manager->first_display_id()); |
+ EXPECT_FALSE(tray()->HasNotificationBubble()); |
+ |
+ // rotation. |
+ UpdateDisplay("400x400/r"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ base::string16 rotation_message = l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName()); |
+ EXPECT_EQ(rotation_message, GetDisplayNotificationText()); |
+ |
+ CloseNotification(); |
+ UpdateDisplay("400x400"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ(rotation_message, GetDisplayNotificationText()); |
+ |
+ // UI-scale |
+ CloseNotification(); |
+ UpdateDisplay("400x400@1.5"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, |
+ GetFirstDisplayName(), UTF8ToUTF16("600x600")), |
+ GetDisplayNotificationText()); |
+ |
+ // UI-scale to 1.0 |
+ CloseNotification(); |
+ UpdateDisplay("400x400"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, |
+ GetFirstDisplayName(), UTF8ToUTF16("400x400")), |
+ GetDisplayNotificationText()); |
+ |
+ // No-update |
+ CloseNotification(); |
+ UpdateDisplay("400x400"); |
+ EXPECT_FALSE(tray()->HasNotificationBubble()); |
+ |
+ // Extended. |
+ CloseNotification(); |
+ UpdateDisplay("400x400,200x200"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()), |
+ GetDisplayNotificationText()); |
+ |
+ // Mirroring. |
+ CloseNotification(); |
+ display_manager->SetSoftwareMirroring(true); |
+ UpdateDisplay("400x400,200x200"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()), |
+ GetDisplayNotificationText()); |
+ |
+ // Back to extended. |
+ CloseNotification(); |
+ display_manager->SetSoftwareMirroring(false); |
+ UpdateDisplay("400x400,200x200"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()), |
+ GetDisplayNotificationText()); |
+ |
+ // Resize the first display. |
+ UpdateDisplay("400x400@1.5,200x200"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED, |
+ GetFirstDisplayName(), UTF8ToUTF16("600x600")), |
+ GetDisplayNotificationText()); |
+ |
+ // rotate the second. |
+ UpdateDisplay("400x400@1.5,200x200/r"); |
+ EXPECT_TRUE(tray()->HasNotificationBubble()); |
+ EXPECT_EQ( |
+ l10n_util::GetStringFUTF16( |
+ IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetSecondDisplayName()), |
+ GetDisplayNotificationText()); |
+} |
+ |
+} // namespace internal |
+} // namespace ash |