1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/window.h"
#include "ui/aura_shell/shell.h"
#include "ui/aura_shell/shell_window_ids.h"
#include "ui/aura_shell/test/aura_shell_test_base.h"
#include "views/widget/widget.h"
namespace aura_shell {
namespace test {
namespace {
views::Widget* CreateTestWindow(const views::Widget::InitParams& params) {
views::Widget* widget = new views::Widget;
widget->Init(params);
return widget;
}
aura::Window* GetDefaultContainer() {
return Shell::GetInstance()->GetContainer(
aura_shell::internal::kShellWindowId_DefaultContainer);
}
aura::Window* GetAlwaysOnTopContainer() {
return Shell::GetInstance()->GetContainer(
aura_shell::internal::kShellWindowId_AlwaysOnTopContainer);
}
void TestCreateWindow(views::Widget::InitParams::Type type,
bool always_on_top,
aura::Window* expected_container) {
views::Widget::InitParams widget_params(type);
widget_params.keep_on_top = always_on_top;
views::Widget* widget = CreateTestWindow(widget_params);
widget->Show();
EXPECT_EQ(expected_container, widget->GetNativeWindow()->parent()) <<
"TestCreateWindow: type=" << type << ", always_on_top=" << always_on_top;
widget->Close();
}
} // namespace
class ShellTest : public AuraShellTestBase {
public:
ShellTest() {}
virtual ~ShellTest() {}
private:
DISALLOW_COPY_AND_ASSIGN(ShellTest);
};
TEST_F(ShellTest, CreateWindow) {
// Normal window should be created in default container.
TestCreateWindow(views::Widget::InitParams::TYPE_WINDOW,
false, // always_on_top
GetDefaultContainer());
TestCreateWindow(views::Widget::InitParams::TYPE_POPUP,
false, // always_on_top
GetDefaultContainer());
// Always-on-top window and popup are created in always-on-top container.
TestCreateWindow(views::Widget::InitParams::TYPE_WINDOW,
true, // always_on_top
GetAlwaysOnTopContainer());
TestCreateWindow(views::Widget::InitParams::TYPE_POPUP,
true, // always_on_top
GetAlwaysOnTopContainer());
}
TEST_F(ShellTest, ChangeAlwaysOnTop) {
views::Widget::InitParams widget_params(
views::Widget::InitParams::TYPE_WINDOW);
// Creates a normal window
views::Widget* widget = CreateTestWindow(widget_params);
widget->Show();
// It should be in default container.
EXPECT_EQ(GetDefaultContainer(), widget->GetNativeWindow()->parent());
// Flip always-on-top flag.
widget->SetAlwaysOnTop(true);
// And it should in always on top container now.
EXPECT_EQ(GetAlwaysOnTopContainer(), widget->GetNativeWindow()->parent());
// Flip always-on-top flag.
widget->SetAlwaysOnTop(false);
// It should go back to default container.
EXPECT_EQ(GetDefaultContainer(), widget->GetNativeWindow()->parent());
// Set the same always-on-top flag again.
widget->SetAlwaysOnTop(false);
// Should have no effect and we are still in the default container.
EXPECT_EQ(GetDefaultContainer(), widget->GetNativeWindow()->parent());
widget->Close();
}
} // namespace test
} // namespace aura_shell
|