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

Side by Side Diff: components/exo/shell_surface_unittest.cc

Issue 1645043003: exo: Improve window placement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 | « components/exo/shell_surface.cc ('k') | components/exo/touch_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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/message_loop/message_loop.h" 5 #include "base/message_loop/message_loop.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "components/exo/buffer.h" 7 #include "components/exo/buffer.h"
8 #include "components/exo/shell_surface.h" 8 #include "components/exo/shell_surface.h"
9 #include "components/exo/surface.h" 9 #include "components/exo/surface.h"
10 #include "components/exo/test/exo_test_base.h" 10 #include "components/exo/test/exo_test_base.h"
11 #include "components/exo/test/exo_test_helper.h" 11 #include "components/exo/test/exo_test_helper.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "third_party/khronos/GLES2/gl2.h" 13 #include "third_party/khronos/GLES2/gl2.h"
14 #include "ui/aura/window.h" 14 #include "ui/aura/window.h"
15 #include "ui/views/widget/widget.h" 15 #include "ui/views/widget/widget.h"
16 16
17 namespace exo { 17 namespace exo {
18 namespace { 18 namespace {
19 19
20 using ShellSurfaceTest = test::ExoTestBase; 20 using ShellSurfaceTest = test::ExoTestBase;
21 21
22 TEST_F(ShellSurfaceTest, Init) {
23 gfx::Size small_buffer_size(64, 64);
24 scoped_ptr<Buffer> small_buffer(
25 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(small_buffer_size),
26 GL_TEXTURE_2D));
27 gfx::Size large_buffer_size(256, 256);
28 scoped_ptr<Buffer> large_buffer(
29 new Buffer(exo_test_helper()->CreateGpuMemoryBuffer(large_buffer_size),
30 GL_TEXTURE_2D));
31 scoped_ptr<Surface> surface(new Surface);
32 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
33
34 shell_surface->Init();
35 ASSERT_TRUE(shell_surface->GetWidget());
36
37 surface->Attach(small_buffer.get());
38 surface->Commit();
39 EXPECT_EQ(
40 small_buffer_size.ToString(),
41 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString());
42
43 surface->Attach(large_buffer.get());
44 surface->Commit();
45 EXPECT_EQ(
46 large_buffer_size.ToString(),
47 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString());
48 }
49
50 TEST_F(ShellSurfaceTest, Maximize) { 22 TEST_F(ShellSurfaceTest, Maximize) {
51 gfx::Size buffer_size(256, 256); 23 gfx::Size buffer_size(256, 256);
52 scoped_ptr<Buffer> buffer(new Buffer( 24 scoped_ptr<Buffer> buffer(new Buffer(
53 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); 25 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D));
54 scoped_ptr<Surface> surface(new Surface); 26 scoped_ptr<Surface> surface(new Surface);
55 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 27 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
56 28
57 shell_surface->Init();
58 surface->Attach(buffer.get()); 29 surface->Attach(buffer.get());
59 shell_surface->Maximize(); 30 shell_surface->Maximize();
60 surface->Commit(); 31 surface->Commit();
61 EXPECT_EQ(CurrentContext()->bounds().width(), 32 EXPECT_EQ(CurrentContext()->bounds().width(),
62 shell_surface->GetWidget()->GetWindowBoundsInScreen().width()); 33 shell_surface->GetWidget()->GetWindowBoundsInScreen().width());
63 } 34 }
64 35
65 TEST_F(ShellSurfaceTest, SetFullscreen) { 36 TEST_F(ShellSurfaceTest, SetFullscreen) {
66 gfx::Size buffer_size(256, 256); 37 gfx::Size buffer_size(256, 256);
67 scoped_ptr<Buffer> buffer(new Buffer( 38 scoped_ptr<Buffer> buffer(new Buffer(
68 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); 39 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D));
69 scoped_ptr<Surface> surface(new Surface); 40 scoped_ptr<Surface> surface(new Surface);
70 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 41 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
71 42
72 shell_surface->Init();
73 shell_surface->SetFullscreen(true); 43 shell_surface->SetFullscreen(true);
74 surface->Attach(buffer.get()); 44 surface->Attach(buffer.get());
75 surface->Commit(); 45 surface->Commit();
76 EXPECT_EQ(CurrentContext()->bounds().ToString(), 46 EXPECT_EQ(CurrentContext()->bounds().ToString(),
77 shell_surface->GetWidget()->GetWindowBoundsInScreen().ToString()); 47 shell_surface->GetWidget()->GetWindowBoundsInScreen().ToString());
78 } 48 }
79 49
80 TEST_F(ShellSurfaceTest, SetTitle) { 50 TEST_F(ShellSurfaceTest, SetTitle) {
81 scoped_ptr<Surface> surface(new Surface); 51 scoped_ptr<Surface> surface(new Surface);
82 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 52 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
83 53
84 shell_surface->SetTitle(base::string16(base::ASCIIToUTF16("test"))); 54 shell_surface->SetTitle(base::string16(base::ASCIIToUTF16("test")));
85 surface->Commit(); 55 surface->Commit();
86 } 56 }
87 57
88 TEST_F(ShellSurfaceTest, SetApplicationId) { 58 TEST_F(ShellSurfaceTest, SetApplicationId) {
89 scoped_ptr<Surface> surface(new Surface); 59 scoped_ptr<Surface> surface(new Surface);
90 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 60 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
91 61
92 shell_surface->Init();
93 surface->Commit(); 62 surface->Commit();
94 EXPECT_EQ("", ShellSurface::GetApplicationId( 63 EXPECT_EQ("", ShellSurface::GetApplicationId(
95 shell_surface->GetWidget()->GetNativeWindow())); 64 shell_surface->GetWidget()->GetNativeWindow()));
96 shell_surface->SetApplicationId("test"); 65 shell_surface->SetApplicationId("test");
97 EXPECT_EQ("test", ShellSurface::GetApplicationId( 66 EXPECT_EQ("test", ShellSurface::GetApplicationId(
98 shell_surface->GetWidget()->GetNativeWindow())); 67 shell_surface->GetWidget()->GetNativeWindow()));
99 } 68 }
100 69
101 void DestroyShellSurface(scoped_ptr<ShellSurface>* shell_surface) { 70 void DestroyShellSurface(scoped_ptr<ShellSurface>* shell_surface) {
102 shell_surface->reset(); 71 shell_surface->reset();
103 } 72 }
104 73
105 TEST_F(ShellSurfaceTest, Move) { 74 TEST_F(ShellSurfaceTest, Move) {
106 scoped_ptr<Surface> surface(new Surface); 75 scoped_ptr<Surface> surface(new Surface);
107 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 76 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
108 77
109 // Map shell surface. 78 // Map shell surface.
110 shell_surface->Init();
111 surface->Commit(); 79 surface->Commit();
112 80
113 // Post a task that will destroy the shell surface and then start an 81 // Post a task that will destroy the shell surface and then start an
114 // interactive move. The interactive move should end when surface is 82 // interactive move. The interactive move should end when surface is
115 // destroyed. 83 // destroyed.
116 base::MessageLoopForUI::current()->PostTask( 84 base::MessageLoopForUI::current()->PostTask(
117 FROM_HERE, 85 FROM_HERE,
118 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface))); 86 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface)));
119 shell_surface->Move(); 87 shell_surface->Move();
120 } 88 }
121 89
122 TEST_F(ShellSurfaceTest, SetGeometry) { 90 TEST_F(ShellSurfaceTest, SetGeometry) {
123 gfx::Size buffer_size(64, 64); 91 gfx::Size buffer_size(64, 64);
124 scoped_ptr<Buffer> buffer(new Buffer( 92 scoped_ptr<Buffer> buffer(new Buffer(
125 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D)); 93 exo_test_helper()->CreateGpuMemoryBuffer(buffer_size), GL_TEXTURE_2D));
126 scoped_ptr<Surface> surface(new Surface); 94 scoped_ptr<Surface> surface(new Surface);
127 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 95 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
128 96
129 shell_surface->Init();
130 gfx::Rect geometry(16, 16, 32, 32); 97 gfx::Rect geometry(16, 16, 32, 32);
131 shell_surface->SetGeometry(geometry); 98 shell_surface->SetGeometry(geometry);
132 surface->Attach(buffer.get()); 99 surface->Attach(buffer.get());
133 surface->Commit(); 100 surface->Commit();
134 EXPECT_EQ( 101 EXPECT_EQ(
135 geometry.size().ToString(), 102 geometry.size().ToString(),
136 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString()); 103 shell_surface->GetWidget()->GetWindowBoundsInScreen().size().ToString());
137 EXPECT_EQ(gfx::Rect(gfx::Point() - geometry.OffsetFromOrigin(), buffer_size) 104 EXPECT_EQ(gfx::Rect(gfx::Point() - geometry.OffsetFromOrigin(), buffer_size)
138 .ToString(), 105 .ToString(),
139 surface->bounds().ToString()); 106 surface->bounds().ToString());
140 } 107 }
141 108
142 void Close(int* close_call_count) { 109 void Close(int* close_call_count) {
143 (*close_call_count)++; 110 (*close_call_count)++;
144 } 111 }
145 112
146 TEST_F(ShellSurfaceTest, CloseCallback) { 113 TEST_F(ShellSurfaceTest, CloseCallback) {
147 scoped_ptr<Surface> surface(new Surface); 114 scoped_ptr<Surface> surface(new Surface);
148 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 115 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
149 116
150 int close_call_count = 0; 117 int close_call_count = 0;
151 shell_surface->set_close_callback( 118 shell_surface->set_close_callback(
152 base::Bind(&Close, base::Unretained(&close_call_count))); 119 base::Bind(&Close, base::Unretained(&close_call_count)));
153 120
154 shell_surface->Init();
155 surface->Commit(); 121 surface->Commit();
156 122
157 EXPECT_EQ(0, close_call_count); 123 EXPECT_EQ(0, close_call_count);
158 shell_surface->GetWidget()->Close(); 124 shell_surface->GetWidget()->Close();
159 EXPECT_EQ(1, close_call_count); 125 EXPECT_EQ(1, close_call_count);
160 } 126 }
161 127
162 TEST_F(ShellSurfaceTest, SurfaceDestroyedCallback) { 128 TEST_F(ShellSurfaceTest, SurfaceDestroyedCallback) {
163 scoped_ptr<Surface> surface(new Surface); 129 scoped_ptr<Surface> surface(new Surface);
164 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 130 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
165 131
166 shell_surface->set_surface_destroyed_callback( 132 shell_surface->set_surface_destroyed_callback(
167 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface))); 133 base::Bind(&DestroyShellSurface, base::Unretained(&shell_surface)));
168 134
169 shell_surface->Init();
170 surface->Commit(); 135 surface->Commit();
171 136
172 EXPECT_TRUE(shell_surface.get()); 137 EXPECT_TRUE(shell_surface.get());
173 surface.reset(); 138 surface.reset();
174 EXPECT_FALSE(shell_surface.get()); 139 EXPECT_FALSE(shell_surface.get());
175 } 140 }
176 141
177 void Configure(gfx::Size* suggested_size, const gfx::Size& size) { 142 void Configure(gfx::Size* suggested_size, const gfx::Size& size) {
178 *suggested_size = size; 143 *suggested_size = size;
179 } 144 }
180 145
181 TEST_F(ShellSurfaceTest, ConfigureCallback) { 146 TEST_F(ShellSurfaceTest, ConfigureCallback) {
182 scoped_ptr<Surface> surface(new Surface); 147 scoped_ptr<Surface> surface(new Surface);
183 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get())); 148 scoped_ptr<ShellSurface> shell_surface(new ShellSurface(surface.get()));
184 149
185 shell_surface->Init();
186
187 gfx::Size suggested_size; 150 gfx::Size suggested_size;
188 shell_surface->set_configure_callback( 151 shell_surface->set_configure_callback(
189 base::Bind(&Configure, base::Unretained(&suggested_size))); 152 base::Bind(&Configure, base::Unretained(&suggested_size)));
190 shell_surface->Maximize(); 153 shell_surface->Maximize();
191 EXPECT_EQ(CurrentContext()->bounds().width(), suggested_size.width()); 154 EXPECT_EQ(CurrentContext()->bounds().width(), suggested_size.width());
192 155
193 shell_surface->SetFullscreen(true); 156 shell_surface->SetFullscreen(true);
194 EXPECT_EQ(CurrentContext()->bounds().size().ToString(), 157 EXPECT_EQ(CurrentContext()->bounds().size().ToString(),
195 suggested_size.ToString()); 158 suggested_size.ToString());
196 } 159 }
197 160
198 } // namespace 161 } // namespace
199 } // namespace exo 162 } // namespace exo
OLDNEW
« no previous file with comments | « components/exo/shell_surface.cc ('k') | components/exo/touch_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698