• 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 "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