OLD | NEW |
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 |
OLD | NEW |