Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: ui/views/widget/native_widget_mac_unittest.mm

Issue 659233002: STASH: Epic Experimental patch for toolkit-views App List on Mac Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: Fix a few things. Works@master Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/widget/native_widget_mac.mm ('k') | ui/views/widget/widget_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ui/views/widget/native_widget_mac.h"
6
7 #import <Cocoa/Cocoa.h>
8
9 #include "ui/views/test/test_widget_observer.h"
10 #include "ui/views/test/widget_test.h"
11
12 namespace views {
13 namespace test {
14
15 // Tests for parts of NativeWidgetMac not covered by BridgedNativeWidget, which
16 // need access to Cocoa APIs.
17 typedef WidgetTest NativeWidgetMacTest;
18
19 class WidgetChangeObserver : public TestWidgetObserver {
20 public:
21 WidgetChangeObserver(Widget* widget)
22 : TestWidgetObserver(widget),
23 bounds_changed_count_(0),
24 gained_visible_count_(0),
25 lost_visible_count_(0) {}
26
27 gfx::Rect last_bounds_when_changed() const {
28 return last_bounds_when_changed_;
29 }
30 int bounds_changed_count() const { return bounds_changed_count_; }
31 int gained_visible_count() const { return gained_visible_count_; }
32 int lost_visible_count() const { return lost_visible_count_; }
33
34 private:
35 // WidgetObserver:
36 virtual void OnWidgetVisibilityChanged(Widget* widget,
37 bool visible) OVERRIDE {
38 ++(visible ? gained_visible_count_ : lost_visible_count_);
39 }
40
41 virtual void OnWidgetBoundsChanged(Widget* widget,
42 const gfx::Rect& new_bounds) OVERRIDE {
43 ++bounds_changed_count_;
44 last_bounds_when_changed_ = new_bounds;
45 }
46
47 gfx::Rect last_bounds_when_changed_;
48 int bounds_changed_count_;
49
50 int gained_visible_count_;
51 int lost_visible_count_;
52
53 DISALLOW_COPY_AND_ASSIGN(WidgetChangeObserver);
54 };
55
56 // Test visibility states triggered externally.
57 TEST_F(NativeWidgetMacTest, HideAndShowExternally) {
58 Widget* widget = CreateTopLevelPlatformWidget();
59 NSWindow* ns_window = widget->GetNativeWindow();
60 WidgetChangeObserver observer(widget);
61
62 // Should initially be hidden.
63 EXPECT_FALSE(widget->IsVisible());
64 EXPECT_FALSE([ns_window isVisible]);
65 EXPECT_EQ(0, observer.gained_visible_count());
66 EXPECT_EQ(0, observer.lost_visible_count());
67
68 widget->Show();
69 EXPECT_TRUE(widget->IsVisible());
70 EXPECT_TRUE([ns_window isVisible]);
71 EXPECT_EQ(1, observer.gained_visible_count());
72 EXPECT_EQ(0, observer.lost_visible_count());
73
74 widget->Hide();
75 EXPECT_FALSE(widget->IsVisible());
76 EXPECT_FALSE([ns_window isVisible]);
77 EXPECT_EQ(1, observer.gained_visible_count());
78 EXPECT_EQ(1, observer.lost_visible_count());
79
80 widget->Show();
81 EXPECT_TRUE(widget->IsVisible());
82 EXPECT_TRUE([ns_window isVisible]);
83 EXPECT_EQ(2, observer.gained_visible_count());
84 EXPECT_EQ(1, observer.lost_visible_count());
85
86 // Test when hiding individual windows.
87 [ns_window orderOut:nil];
88 EXPECT_FALSE(widget->IsVisible());
89 EXPECT_FALSE([ns_window isVisible]);
90 EXPECT_EQ(2, observer.gained_visible_count());
91 EXPECT_EQ(2, observer.lost_visible_count());
92
93 [ns_window orderFront:nil];
94 EXPECT_TRUE(widget->IsVisible());
95 EXPECT_TRUE([ns_window isVisible]);
96 EXPECT_EQ(3, observer.gained_visible_count());
97 EXPECT_EQ(2, observer.lost_visible_count());
98
99 // Test when hiding the entire application. This doesn't send an orderOut:
100 // to the NSWindow.
101 [NSApp hide:nil];
102 EXPECT_FALSE(widget->IsVisible());
103 EXPECT_FALSE([ns_window isVisible]);
104 EXPECT_EQ(3, observer.gained_visible_count());
105 EXPECT_EQ(3, observer.lost_visible_count());
106
107 [NSApp unhideWithoutActivation];
108 EXPECT_TRUE(widget->IsVisible());
109 EXPECT_TRUE([ns_window isVisible]);
110 EXPECT_EQ(4, observer.gained_visible_count());
111 EXPECT_EQ(3, observer.lost_visible_count());
112
113 // Hide again to test unhiding with an activation.
114 [NSApp hide:nil];
115 EXPECT_EQ(4, observer.lost_visible_count());
116 [NSApp unhide:nil];
117 EXPECT_EQ(5, observer.gained_visible_count());
118
119 // No change when closing.
120 widget->CloseNow();
121 EXPECT_EQ(4, observer.lost_visible_count());
122 EXPECT_EQ(5, observer.gained_visible_count());
123 }
124
125 // Test minimized states triggered externally, implied visibility and restored
126 // bounds whilst minimized.
127 TEST_F(NativeWidgetMacTest, MiniaturizeExternally) {
128 Widget* widget = CreateTopLevelPlatformWidget();
129 NSWindow* ns_window = widget->GetNativeWindow();
130 WidgetChangeObserver observer(widget);
131
132 widget->Show();
133 EXPECT_EQ(1, observer.gained_visible_count());
134 EXPECT_EQ(0, observer.lost_visible_count());
135 const gfx::Rect restored_bounds = widget->GetRestoredBounds();
136 EXPECT_FALSE(restored_bounds.IsEmpty());
137
138 [ns_window miniaturize:nil];
139
140 EXPECT_TRUE(widget->IsMinimized());
141 EXPECT_FALSE(widget->IsVisible());
142 EXPECT_EQ(1, observer.gained_visible_count());
143 EXPECT_EQ(1, observer.lost_visible_count());
144 EXPECT_EQ(restored_bounds, widget->GetRestoredBounds());
145
146 [ns_window deminiaturize:nil];
147 EXPECT_FALSE(widget->IsMinimized());
148 EXPECT_TRUE(widget->IsVisible());
149 EXPECT_EQ(2, observer.gained_visible_count());
150 EXPECT_EQ(1, observer.lost_visible_count());
151 EXPECT_EQ(restored_bounds, widget->GetRestoredBounds());
152
153 EXPECT_FALSE([ns_window isMiniaturized]);
154 widget->Minimize();
155 EXPECT_TRUE(widget->IsMinimized());
156 EXPECT_TRUE([ns_window isMiniaturized]);
157 EXPECT_EQ(2, observer.gained_visible_count());
158 EXPECT_EQ(2, observer.lost_visible_count());
159 EXPECT_EQ(restored_bounds, widget->GetRestoredBounds());
160
161 widget->Restore(); // If miniaturized, should deminiaturize.
162 EXPECT_FALSE(widget->IsMinimized());
163 EXPECT_FALSE([ns_window isMiniaturized]);
164 EXPECT_EQ(3, observer.gained_visible_count());
165 EXPECT_EQ(2, observer.lost_visible_count());
166 EXPECT_EQ(restored_bounds, widget->GetRestoredBounds());
167
168 widget->Restore(); // If not miniaturized, does nothing.
169 EXPECT_FALSE(widget->IsMinimized());
170 EXPECT_FALSE([ns_window isMiniaturized]);
171 EXPECT_EQ(3, observer.gained_visible_count());
172 EXPECT_EQ(2, observer.lost_visible_count());
173 EXPECT_EQ(restored_bounds, widget->GetRestoredBounds());
174 }
175
176 // Test moving and resizing the window externally.
177 TEST_F(NativeWidgetMacTest, MoveAndResizeExternally) {
178 Widget* widget = new Widget; // Note: will be owned by NativeWidgetMac.
179
180 // Start observing early.
181 WidgetChangeObserver observer(widget);
182 widget->Init(Widget::InitParams());
183
184 EXPECT_EQ(0, observer.bounds_changed_count());
185 widget->Show();
186
187 // Should be one change when going on screen.
188 EXPECT_EQ(1, observer.bounds_changed_count());
189
190 // Make sure it hasn't changed since.
191 EXPECT_EQ(observer.last_bounds_when_changed(),
192 widget->GetWindowBoundsInScreen());
193 EXPECT_EQ(observer.last_bounds_when_changed(), widget->GetRestoredBounds());
194 }
195
196 } // namespace test
197 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/native_widget_mac.mm ('k') | ui/views/widget/widget_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698