tray_display_unittest.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/chromeos/tray_display.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/display/display_manager.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/root_window_controller.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/screen_ash.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/shell.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/tray/system_tray.h"
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/system/tray/test_system_tray_delegate.h"
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/test/ash_test_base.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/string16.h"
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/utf_string_conversions.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "grit/ash_strings.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/base/l10n/l10n_util.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/display.h"
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/views/controls/label.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace ash {
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace internal {
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetTooltipText(const base::string16& headline,
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::string16& name1,
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const std::string& data1,
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const base::string16& name2,
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                              const std::string& data2) {
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::vector<base::string16> lines;
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  lines.push_back(headline);
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  lines.push_back(l10n_util::GetStringFUTF16(
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      name1, UTF8ToUTF16(data1)));
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!name2.empty()) {
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    lines.push_back(l10n_util::GetStringFUTF16(
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        name2, UTF8ToUTF16(data2)));
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return JoinString(lines, '\n');
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetFirstDisplayName() {
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return UTF8ToUTF16(display_manager->GetDisplayNameForId(
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      display_manager->first_display_id()));
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetSecondDisplayName() {
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return UTF8ToUTF16(
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      Shell::GetInstance()->display_manager()->GetDisplayNameForId(
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          ScreenAsh::GetSecondaryDisplay().id()));
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 GetMirroredDisplayName() {
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return UTF8ToUTF16(display_manager->GetDisplayNameForId(
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      display_manager->mirrored_display().id()));
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TrayDisplayTest : public ash::test::AshTestBase {
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplayTest();
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~TrayDisplayTest();
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void SetUp() OVERRIDE;
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch protected:
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray() { return tray_; }
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  TrayDisplay* tray_display() { return tray_display_; }
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void CloseNotification();
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool IsDisplayVisibleInTray();
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 GetTrayDisplayText();
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 GetTrayDisplayTooltipText();
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 GetDisplayNotificationText();
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by Shell.
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SystemTray* tray_;
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Weak reference, owned by |tray_|.
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TrayDisplay* tray_display_;
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TrayDisplayTest);
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::TrayDisplayTest() : tray_(NULL), tray_display_(NULL) {
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTrayDisplayTest::~TrayDisplayTest() {
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::SetUp() {
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ash::test::AshTestBase::SetUp();
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_ = Shell::GetPrimaryRootWindowController()->GetSystemTray();
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_display_ = new TrayDisplay(tray_);
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_->AddTrayItem(tray_display_);
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TrayDisplayTest::CloseNotification() {
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_display_->CloseNotificationForTest();
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  RunAllPendingInMessageLoop();
103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool TrayDisplayTest::IsDisplayVisibleInTray() {
106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->default_view() &&
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      tray_display_->default_view()->visible();
108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TrayDisplayTest::GetTrayDisplayText() {
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->GetDefaultViewMessage();
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TrayDisplayTest::GetTrayDisplayTooltipText() {
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view())
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 tooltip;
119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!tray_display_->default_view()->GetTooltipText(gfx::Point(), &tooltip))
120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return base::string16();
121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tooltip;
122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::string16 TrayDisplayTest::GetDisplayNotificationText() {
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return tray_display_->GetNotificationMessage();
126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, NoInternalDisplay) {
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringUTF16(
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL);
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 first_name = GetFirstDisplayName();
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // mirroring
145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  Shell::GetInstance()->display_manager()->SetSoftwareMirroring(true);
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringUTF16(
150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING_NO_INTERNAL);
151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetMirroredDisplayName(), "200x200"),
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplay) {
158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  string16 expected = l10n_util::GetStringFUTF16(
168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetMirroredDisplayName(), "200x200"),
187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // TODO(mukai): add test case for docked mode here.
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, InternalDisplayResized) {
193eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 internal_info = l10n_util::GetStringFUTF16(
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_SINGLE_DISPLAY,
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetFirstDisplayName(), UTF8ToUTF16("600x600"));
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(internal_info, GetTrayDisplayText());
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(base::string16(), GetFirstDisplayName(), "600x600",
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           base::string16(), std::string()),
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName());
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600",
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "200x200"),
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName());
226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "600x600",
228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetMirroredDisplayName(), "200x200"),
229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, ExternalDisplayResized) {
233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Shows the tray_display even though there's a single-display.
238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
239eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(IsDisplayVisibleInTray());
240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended
242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const gfx::Display& secondary_display = ScreenAsh::GetSecondaryDisplay();
244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected = l10n_util::GetStringFUTF16(
248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
249ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
250ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
251ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(),
252ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          UTF8ToUTF16(secondary_display.size().ToString())));
253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), "300x300"),
256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring: in mirroring, it's not possible to lookup the DisplayInfo.
259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200@1.5");
261ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  base::string16 mirror_name = l10n_util::GetStringFUTF16(
262ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
263ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetMirroredDisplayName(), UTF8ToUTF16("300x300"));
264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  expected = l10n_util::GetStringFUTF16(
267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, mirror_name);
268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(expected, GetTrayDisplayText());
269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(expected, GetFirstDisplayName(), "400x400",
270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetMirroredDisplayName(), "300x300"),
271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, OverscanDisplay) {
275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,300x300/o");
276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray()->ShowDefaultView(BUBBLE_USE_EXISTING);
280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(IsDisplayVisibleInTray());
281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // /o creates the default overscan, and if overscan is set, the annotation
283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // should be the size.
284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 overscan = l10n_util::GetStringUTF16(
285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION_OVERSCAN);
286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 headline = l10n_util::GetStringFUTF16(
287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
288ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
289ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
290ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(), UTF8ToUTF16("286x286")));
291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::string second_data = l10n_util::GetStringFUTF8(
292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      UTF8ToUTF16("286x286"), overscan);
294eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
295eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
296eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // reset the overscan.
299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetOverscanInsets(
300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ScreenAsh::GetSecondaryDisplay().id(), gfx::Insets());
301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  headline = l10n_util::GetStringFUTF16(
302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED,
303ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringFUTF16(
304ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATED_NAME,
305ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetSecondDisplayName(), overscan));
306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  second_data = l10n_util::GetStringFUTF8(
307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ANNOTATION,
308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      UTF8ToUTF16("300x300"), overscan);
309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(GetTooltipText(headline, GetFirstDisplayName(), "400x400",
310eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           GetSecondDisplayName(), second_data),
311eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            GetTrayDisplayTooltipText());
312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(TrayDisplayTest, DisplayNotifications) {
315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::TestSystemTrayDelegate* tray_delegate =
316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      static_cast<test::TestSystemTrayDelegate*>(
317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          Shell::GetInstance()->system_tray_delegate());
318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  tray_delegate->set_should_show_display_notification(true);
319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DisplayManager* display_manager = Shell::GetInstance()->display_manager();
322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gfx::Display::SetInternalDisplayId(display_manager->first_display_id());
323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // rotation.
326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400/r");
327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 rotation_message = l10n_util::GetStringFUTF16(
328eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetFirstDisplayName());
329eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(rotation_message, GetDisplayNotificationText());
330eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
331eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(rotation_message, GetDisplayNotificationText());
334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale
336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5");
338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          GetFirstDisplayName(), UTF8ToUTF16("600x600")),
342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // UI-scale to 1.0
345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          GetFirstDisplayName(), UTF8ToUTF16("400x400")),
351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // No-update
354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
355eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400");
356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Extended.
359eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mirroring.
367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
368eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(true);
369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_MIRRORING, GetMirroredDisplayName()),
373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Back to extended.
376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  CloseNotification();
377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  display_manager->SetSoftwareMirroring(false);
378eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400,200x200");
379eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED, GetSecondDisplayName()),
382eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
383eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Resize the first display.
385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200");
386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
388eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_RESOLUTION_CHANGED,
389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          GetFirstDisplayName(), UTF8ToUTF16("600x600")),
390eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
391eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
392eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // rotate the second.
393eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  UpdateDisplay("400x400@1.5,200x200/r");
394eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(
395eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      l10n_util::GetStringFUTF16(
396eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_ROTATED, GetSecondDisplayName()),
397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      GetDisplayNotificationText());
398eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
399eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
400ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(TrayDisplayTest, DisplayConfigurationChangedTwice) {
401ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  test::TestSystemTrayDelegate* tray_delegate =
402ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      static_cast<test::TestSystemTrayDelegate*>(
403ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          Shell::GetInstance()->system_tray_delegate());
404ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_delegate->set_should_show_display_notification(true);
405ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
406ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400,200x200");
407ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
408ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
409ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
410ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
411ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
412ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // OnDisplayConfigurationChanged() may be called more than once for a single
413ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // update display in case of primary is swapped or recovered from dock mode.
414ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Should not remove the notification in such case.
415ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  tray_display()->OnDisplayConfigurationChanged();
416ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_EQ(
417ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      l10n_util::GetStringUTF16(
418ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          IDS_ASH_STATUS_TRAY_DISPLAY_EXTENDED_NO_INTERNAL),
419ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      GetDisplayNotificationText());
420ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
421ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // Back to the single display. It SHOULD remove the notification since the
422ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // information is stale.
423ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  UpdateDisplay("400x400");
424ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  EXPECT_TRUE(GetDisplayNotificationText().empty());
425ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
426ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
427eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace internal
428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace ash
429