• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 // gtest
17 #include <gtest/gtest.h>
18 #include "wm_common.h"
19 #include "window_test_utils.h"
20 using namespace testing;
21 using namespace testing::ext;
22 
23 namespace OHOS {
24 namespace Rosen {
25 namespace {
26     constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "WindowOccupiedAreaChangeTest"};
27 }
28 
29 using Utils = WindowTestUtils;
30 const int WAIT_ASYNC_US = 100000;  // 100000us
31 
32 class TestOccupiedAreaChangeListener : public IOccupiedAreaChangeListener {
33 public:
34     OccupiedAreaType type_ = OccupiedAreaType::TYPE_INPUT;
35     Rect rect_ = { 0, 0, 0, 0 };
36     void OnSizeChange(const sptr<OccupiedAreaChangeInfo>& info) override;
37 };
38 
39 class WindowOccupiedAreaChangeTest : public testing::Test {
40 public:
41     static void SetUpTestCase();
42     static void TearDownTestCase();
43     virtual void SetUp() override;
44     virtual void TearDown() override;
45     static sptr<TestOccupiedAreaChangeListener> testOccupiedAreaChangeListener_;
46     Utils::TestWindowInfo fullScreenAppInfo_;
47     Utils::TestWindowInfo imeAppInfo_;
48 };
49 
50 sptr<TestOccupiedAreaChangeListener> WindowOccupiedAreaChangeTest::testOccupiedAreaChangeListener_ =
51     new TestOccupiedAreaChangeListener();
52 
OnSizeChange(const sptr<OccupiedAreaChangeInfo> & info)53 void TestOccupiedAreaChangeListener::OnSizeChange(const sptr<OccupiedAreaChangeInfo>& info)
54 {
55     WLOGFI("OccupiedAreaChangeInfo: [%{public}u, {%{public}u, %{public}u}]",
56         info->type_, info->rect_.width_, info->rect_.height_);
57     type_ = info->type_;
58     rect_ = info->rect_;
59 }
60 
SetUpTestCase()61 void WindowOccupiedAreaChangeTest::SetUpTestCase()
62 {
63     auto display = DisplayManager::GetInstance().GetDisplayById(0);
64     ASSERT_TRUE((display != nullptr));
65     WLOGFI("GetDefaultDisplay: id %{public}" PRIu64", w %{public}d, h %{public}d, fps %{public}u",
66         display->GetId(), display->GetWidth(), display->GetHeight(), display->GetRefreshRate());
67     Rect displayRect = {0, 0, display->GetWidth(), display->GetHeight()};
68     Utils::InitByDisplayRect(displayRect);
69 }
70 
TearDownTestCase()71 void WindowOccupiedAreaChangeTest::TearDownTestCase()
72 {
73 }
74 
SetUp()75 void WindowOccupiedAreaChangeTest::SetUp()
76 {
77     fullScreenAppInfo_ = {
78             .name = "FullWindow",
79             .rect = Utils::customAppRect_,
80             .type = WindowType::WINDOW_TYPE_APP_MAIN_WINDOW,
81             .mode = WindowMode::WINDOW_MODE_FULLSCREEN,
82             .needAvoid = false,
83             .parentLimit = false,
84             .parentId = INVALID_WINDOW_ID,
85     };
86     imeAppInfo_ = {
87             .name = "ImeWindow",
88             .rect = Utils::customAppRect_,
89             .type = WindowType::WINDOW_TYPE_INPUT_METHOD_FLOAT,
90             .mode = WindowMode::WINDOW_MODE_FLOATING,
91     };
92 }
93 
TearDown()94 void WindowOccupiedAreaChangeTest::TearDown()
95 {
96 }
97 
98 namespace {
99 /**
100  * @tc.name: KeyboardHeightChangeTest01
101  * @tc.desc: test get keyboard height when WINDOW_TYPE_INPUT_METHOD_FLOAT show
102  * @tc.type: FUNC
103  */
104 HWTEST_F(WindowOccupiedAreaChangeTest, KeyboardHeightChangeTest01, Function | MediumTest | Level3)
105 {
106     fullScreenAppInfo_.name = "KeyboardHeightChangeTest01";
107     const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppInfo_);
108     ASSERT_NE(nullptr, window1);
109     window1->RegisterOccupiedAreaChangeListener(testOccupiedAreaChangeListener_);
110 
111     imeAppInfo_.name = "imeWindow1";
112     imeAppInfo_.rect = { 10, 200, 300, 400 };
113     const sptr<Window>& window2 = Utils::CreateTestWindow(imeAppInfo_);
114     ASSERT_NE(nullptr, window2);
115 
116     ASSERT_EQ(WMError::WM_OK, window1->Show());
117     ASSERT_EQ(WMError::WM_OK, window2->SetCallingWindow(window1->GetWindowId()));
118     ASSERT_EQ(WMError::WM_OK, window2->Show());
119     // Await 100ms and get callback result in listener.
120     usleep(WAIT_ASYNC_US);
121 
122     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.posX_, window2->GetRect().posX_);
123     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.posY_, window2->GetRect().posY_);
124     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.width_, window2->GetRect().width_);
125     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.height_, window2->GetRect().height_);
126 }
127 
128 /**
129  * @tc.name: KeyboardHeightChangeTest02
130  * @tc.desc: test get keyboard height when WINDOW_TYPE_INPUT_METHOD_FLOAT hide
131  * @tc.type: FUNC
132  */
133 HWTEST_F(WindowOccupiedAreaChangeTest, KeyboardHeightChangeTest02, Function | MediumTest | Level3)
134 {
135     fullScreenAppInfo_.name = "KeyboardHeightChangeTest02";
136     const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppInfo_);
137     ASSERT_NE(nullptr, window1);
138     window1->RegisterOccupiedAreaChangeListener(testOccupiedAreaChangeListener_);
139 
140     imeAppInfo_.name = "imeWindow2";
141     imeAppInfo_.rect = { 10, 200, 300, 400 };
142     const sptr<Window>& window2 = Utils::CreateTestWindow(imeAppInfo_);
143     ASSERT_NE(nullptr, window2);
144 
145     ASSERT_EQ(WMError::WM_OK, window1->Show());
146     ASSERT_EQ(WMError::WM_OK, window2->SetCallingWindow(window1->GetWindowId()));
147     ASSERT_EQ(WMError::WM_OK, window2->Show());
148     ASSERT_EQ(WMError::WM_OK, window2->Hide());
149     // Await 100ms and get callback result in listener.
150     usleep(WAIT_ASYNC_US);
151     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.posX_, 0);
152     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.posY_, 0);
153     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.width_, 0);
154     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.height_, 0);
155 }
156 
157 /**
158  * @tc.name: KeyboardHeightChangeTest03
159  * @tc.desc: test get keyboard height when WINDOW_TYPE_INPUT_METHOD_FLOAT destroy
160  * @tc.type: FUNC
161  */
162 HWTEST_F(WindowOccupiedAreaChangeTest, KeyboardHeightChangeTest03, Function | MediumTest | Level3)
163 {
164     fullScreenAppInfo_.name = "KeyboardHeightChangeTest03";
165     const sptr<Window>& window1 = Utils::CreateTestWindow(fullScreenAppInfo_);
166     ASSERT_NE(nullptr, window1);
167     window1->RegisterOccupiedAreaChangeListener(testOccupiedAreaChangeListener_);
168 
169     imeAppInfo_.name = "imeWindow3";
170     imeAppInfo_.rect = { 10, 200, 300, 400 };
171     const sptr<Window>& window2 = Utils::CreateTestWindow(imeAppInfo_);
172     ASSERT_NE(nullptr, window2);
173 
174     ASSERT_EQ(WMError::WM_OK, window1->Show());
175     ASSERT_EQ(WMError::WM_OK, window2->SetCallingWindow(window1->GetWindowId()));
176     ASSERT_EQ(WMError::WM_OK, window2->Show());
177     ASSERT_EQ(WMError::WM_OK, window2->Destroy());
178     // Await 100ms and get callback result in listener.
179     usleep(WAIT_ASYNC_US);
180     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.posX_, 0);
181     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.posY_, 0);
182     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.width_, 0);
183     ASSERT_EQ(testOccupiedAreaChangeListener_->rect_.height_, 0);
184 }
185 }
186 } // namespace Rosen
187 } // namespace OHOS
188