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