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 "display_test_utils.h"
19 #include "pixel_map.h"
20
21 using namespace testing;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Rosen {
26 namespace {
27 constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_DISPLAY, "ScreenshotTest"};
28 }
29 using utils = DisplayTestUtils;
30 class ScreenshotTest : public testing::Test {
31 public:
32 static void SetUpTestCase();
33 static void TearDownTestCase();
34 virtual void SetUp() override;
35 virtual void TearDown() override;
36 static DisplayId defaultId_;
37 static Media::Rect defaultScreen_;
38 static Media::Size defaultImage_;
39 DisplayId invalidId_ = DISPLAY_ID_INVALID;
40 Media::Rect invalidRect_ = {-1, -1, -1, -1};
41 uint32_t defaultRot_ = 0;
42 };
43
44 DisplayId ScreenshotTest::defaultId_ = DISPLAY_ID_INVALID;
45 Media::Rect ScreenshotTest::defaultScreen_ = {0, 0, 0, 0};
46 Media::Size ScreenshotTest::defaultImage_ = {0, 0};
47
SetUpTestCase()48 void ScreenshotTest::SetUpTestCase()
49 {
50 auto display = DisplayManager::GetInstance().GetDefaultDisplay();
51 if (display == nullptr) {
52 WLOGFE("GetDefaultDisplay: failed!\n");
53 return;
54 }
55 WLOGFI("GetDefaultDisplay: id %llu, w %d, h %d, fps %u\n", display->GetId(), display->GetWidth(),
56 display->GetHeight(), display->GetRefreshRate());
57
58 defaultId_ = display->GetId();
59 defaultScreen_ = {0, 0, display->GetWidth(), display->GetHeight()};
60 defaultImage_ = {display->GetWidth(), display->GetHeight()};
61 }
62
TearDownTestCase()63 void ScreenshotTest::TearDownTestCase()
64 {
65 }
66
SetUp()67 void ScreenshotTest::SetUp()
68 {
69 }
70
TearDown()71 void ScreenshotTest::TearDown()
72 {
73 }
74
75 namespace {
76 /**
77 * @tc.name: ScreenShotValid
78 * @tc.desc: Check if screenshot of default display's ID is valid
79 * @tc.type: FUNC
80 */
81 HWTEST_F(ScreenshotTest, ScreenShotValid01, Function | MediumTest | Level2)
82 {
83 ASSERT_NE(nullptr, DisplayManager::GetInstance().GetScreenshot(defaultId_));
84 }
85
86 /**
87 * @tc.name: ScreenShotValid
88 * @tc.desc: Check if screenshot of invalid display's ID is nullptr
89 * @tc.type: FUNC
90 */
91 HWTEST_F(ScreenshotTest, ScreenShotValid02, Function | MediumTest | Level2)
92 {
93 ASSERT_EQ(nullptr, DisplayManager::GetInstance().GetScreenshot(invalidId_));
94 }
95
96 /**
97 * @tc.name: ScreenShotValid
98 * @tc.desc: Check if screenshot of default display's ID match default display's Media::Size
99 * @tc.type: FUNC
100 */
101 HWTEST_F(ScreenshotTest, ScreenShotValid03, Function | MediumTest | Level2)
102 {
103 auto& dm = DisplayManager::GetInstance();
104 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(defaultId_);
105 ASSERT_NE(nullptr, screenshot);
106
107 Media::Size screenSize = {screenshot->GetWidth(), screenshot->GetHeight()};
108 ASSERT_TRUE(utils::SizeEqualToDisplay(dm.GetDefaultDisplay(), screenSize));
109 }
110
111 /**
112 * @tc.name: ScreenShotValid
113 * @tc.desc: Check if screenshot created by default parameters is valid
114 * @tc.type: FUNC
115 */
116 HWTEST_F(ScreenshotTest, ScreenShotValid04, Function | MediumTest | Level2)
117 {
118 auto& dm = DisplayManager::GetInstance();
119 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(defaultId_, defaultScreen_,
120 defaultImage_, defaultRot_);
121 ASSERT_NE(nullptr, screenshot);
122 }
123
124 /**
125 * @tc.name: ScreenShotValid
126 * @tc.desc: Check if screenshot match default imageSize
127 * @tc.type: FUNC
128 */
129 HWTEST_F(ScreenshotTest, ScreenShotValid05, Function | MediumTest | Level2)
130 {
131 auto& dm = DisplayManager::GetInstance();
132 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(defaultId_, defaultScreen_,
133 defaultImage_, defaultRot_);
134 ASSERT_NE(nullptr, screenshot);
135 Media::Size screenSize = {screenshot->GetWidth(), screenshot->GetHeight()};
136 ASSERT_TRUE(utils::SizeEqual(defaultImage_, screenSize));
137
138 Media::Size halfDefault_ = {defaultImage_.width / 2, defaultImage_.height / 2};
139 Media::Rect halfRect = {defaultScreen_.left, defaultScreen_.top, halfDefault_.width, halfDefault_.height};
140 screenshot = dm.GetScreenshot(defaultId_, halfRect, defaultImage_, defaultRot_);
141 ASSERT_NE(nullptr, screenshot);
142 screenSize = {screenshot->GetWidth(), screenshot->GetHeight()};
143 ASSERT_TRUE(utils::SizeEqual(defaultImage_, screenSize));
144
145 Media::Size halfSize = {halfDefault_.width, halfDefault_.height};
146 screenshot = dm.GetScreenshot(defaultId_, defaultScreen_, halfSize, defaultRot_);
147 ASSERT_NE(nullptr, screenshot);
148 screenSize = {screenshot->GetWidth(), screenshot->GetHeight()};
149 ASSERT_TRUE(utils::SizeEqual(halfSize, screenSize));
150 }
151
152 /**
153 * @tc.name: ScreenShotValid
154 * @tc.desc: Check if screenshot created by default parameters match default display's Media::Size
155 * @tc.type: FUNC
156 */
157 HWTEST_F(ScreenshotTest, ScreenShotValid06, Function | MediumTest | Level2)
158 {
159 auto& dm = DisplayManager::GetInstance();
160 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(defaultId_, defaultScreen_,
161 defaultImage_, defaultRot_);
162 ASSERT_NE(nullptr, screenshot);
163 Media::Size screenSize = {screenshot->GetWidth(), screenshot->GetHeight()};
164 ASSERT_TRUE(utils::SizeEqualToDisplay(dm.GetDefaultDisplay(), screenSize));
165 }
166
167 /**
168 * @tc.name: ScreenShotValid
169 * @tc.desc: Check if screenshot created by invalid display ID is nullptr
170 * @tc.type: FUNC
171 */
172 HWTEST_F(ScreenshotTest, ScreenShot07, Function | MediumTest | Level2)
173 {
174 auto& dm = DisplayManager::GetInstance();
175 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(invalidId_, defaultScreen_,
176 defaultImage_, defaultRot_);
177 ASSERT_EQ(nullptr, screenshot);
178 }
179
180 /**
181 * @tc.name: ScreenShotValid
182 * @tc.desc: Check if screenshot created by invalid screenRect is nullptr
183 * @tc.type: FUNC
184 */
185 HWTEST_F(ScreenshotTest, ScreenShot08, Function | MediumTest | Level2)
186 {
187 auto& dm = DisplayManager::GetInstance();
188 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(defaultId_, invalidRect_,
189 defaultImage_, defaultRot_);
190 ASSERT_EQ(nullptr, screenshot);
191 Media::Rect invalidScreen = {invalidRect_.left, defaultScreen_.top, defaultScreen_.width, defaultScreen_.height};
192 screenshot = dm.GetScreenshot(defaultId_, invalidScreen, defaultImage_, defaultRot_);
193 ASSERT_EQ(nullptr, screenshot);
194 invalidScreen = {defaultScreen_.left, defaultScreen_.top, invalidRect_.width, defaultScreen_.height};
195 screenshot = dm.GetScreenshot(defaultId_, invalidScreen, defaultImage_, defaultRot_);
196 ASSERT_EQ(nullptr, screenshot);
197 }
198
199 /**
200 * @tc.name: ScreenShotValid
201 * @tc.desc: Check if screenshot created by invalid imageSize is nullptr
202 * @tc.type: FUNC
203 */
204 HWTEST_F(ScreenshotTest, ScreenShot09, Function | MediumTest | Level2)
205 {
206 auto& dm = DisplayManager::GetInstance();
207 Media::Size invalidSize = {invalidRect_.width, invalidRect_.height};
208 std::shared_ptr<Media::PixelMap> screenshot = dm.GetScreenshot(defaultId_, defaultScreen_,
209 invalidSize, defaultRot_);
210 ASSERT_EQ(nullptr, screenshot);
211 invalidSize = {invalidRect_.width, defaultScreen_.height};
212 screenshot = dm.GetScreenshot(defaultId_, defaultScreen_, invalidSize, defaultRot_);
213 ASSERT_EQ(nullptr, screenshot);
214 invalidSize = {defaultScreen_.width, invalidRect_.height};
215 screenshot = dm.GetScreenshot(defaultId_, defaultScreen_, invalidSize, defaultRot_);
216 ASSERT_EQ(nullptr, screenshot);
217 }
218 } // namespace
219 } // namespace Rosen
220 } // namespace OHOS