1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License.
5e0dac50fSopenharmony_ci * You may obtain a copy of the License at
6e0dac50fSopenharmony_ci *
7e0dac50fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e0dac50fSopenharmony_ci *
9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and
13e0dac50fSopenharmony_ci * limitations under the License.
14e0dac50fSopenharmony_ci */
15e0dac50fSopenharmony_ci
16e0dac50fSopenharmony_ci// gtest
17e0dac50fSopenharmony_ci#include <gtest/gtest.h>
18e0dac50fSopenharmony_ci#include "dm_common.h"
19e0dac50fSopenharmony_ci#include "screen_manager.h"
20e0dac50fSopenharmony_ciusing namespace testing;
21e0dac50fSopenharmony_ciusing namespace testing::ext;
22e0dac50fSopenharmony_ci
23e0dac50fSopenharmony_cinamespace OHOS {
24e0dac50fSopenharmony_cinamespace Rosen {
25e0dac50fSopenharmony_ciclass ScreenGamutTest : public testing::Test {
26e0dac50fSopenharmony_cipublic:
27e0dac50fSopenharmony_ci    static void SetUpTestCase();
28e0dac50fSopenharmony_ci    static void TearDownTestCase();
29e0dac50fSopenharmony_ci    virtual void SetUp() override;
30e0dac50fSopenharmony_ci    virtual void TearDown() override;
31e0dac50fSopenharmony_ci    static sptr<Screen> defaultScreen_;
32e0dac50fSopenharmony_ci};
33e0dac50fSopenharmony_ci
34e0dac50fSopenharmony_cisptr<Screen> ScreenGamutTest::defaultScreen_ = nullptr;
35e0dac50fSopenharmony_ci
36e0dac50fSopenharmony_civoid ScreenGamutTest::SetUpTestCase()
37e0dac50fSopenharmony_ci{
38e0dac50fSopenharmony_ci    auto screens = ScreenManager::GetInstance().GetAllScreens();
39e0dac50fSopenharmony_ci    if (screens.size() > 0) {
40e0dac50fSopenharmony_ci        defaultScreen_ = screens[0];
41e0dac50fSopenharmony_ci    }
42e0dac50fSopenharmony_ci}
43e0dac50fSopenharmony_ci
44e0dac50fSopenharmony_civoid ScreenGamutTest::TearDownTestCase()
45e0dac50fSopenharmony_ci{
46e0dac50fSopenharmony_ci    defaultScreen_ = nullptr;
47e0dac50fSopenharmony_ci}
48e0dac50fSopenharmony_ci
49e0dac50fSopenharmony_civoid ScreenGamutTest::SetUp()
50e0dac50fSopenharmony_ci{
51e0dac50fSopenharmony_ci}
52e0dac50fSopenharmony_ci
53e0dac50fSopenharmony_civoid ScreenGamutTest::TearDown()
54e0dac50fSopenharmony_ci{
55e0dac50fSopenharmony_ci}
56e0dac50fSopenharmony_ci
57e0dac50fSopenharmony_cinamespace {
58e0dac50fSopenharmony_ci/**
59e0dac50fSopenharmony_ci * @tc.name: GetScreenSupportedColorGamuts01
60e0dac50fSopenharmony_ci * @tc.desc: gamut GetScreenSupportedColorGamuts
61e0dac50fSopenharmony_ci * @tc.type: FUNC
62e0dac50fSopenharmony_ci */
63e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, GetScreenSupportedColorGamuts01, Function | MediumTest | Level3)
64e0dac50fSopenharmony_ci{
65e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
66e0dac50fSopenharmony_ci    DMError ret;
67e0dac50fSopenharmony_ci    std::vector<ScreenColorGamut> colorGamuts;
68e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenSupportedColorGamuts(colorGamuts);
69e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
70e0dac50fSopenharmony_ci    ASSERT_GT(colorGamuts.size(), 0);
71e0dac50fSopenharmony_ci}
72e0dac50fSopenharmony_ci
73e0dac50fSopenharmony_ci/**
74e0dac50fSopenharmony_ci * @tc.name: GetScreenColorGamut01
75e0dac50fSopenharmony_ci * @tc.desc: gamut GetScreenColorGamut
76e0dac50fSopenharmony_ci * @tc.type: FUNC
77e0dac50fSopenharmony_ci */
78e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, GetScreenColorGamut01, Function | MediumTest | Level3)
79e0dac50fSopenharmony_ci{
80e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
81e0dac50fSopenharmony_ci    DMError ret;
82e0dac50fSopenharmony_ci    ScreenColorGamut colorGamut;
83e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenColorGamut(colorGamut);
84e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
85e0dac50fSopenharmony_ci    ASSERT_NE(COLOR_GAMUT_INVALID, colorGamut);
86e0dac50fSopenharmony_ci}
87e0dac50fSopenharmony_ci
88e0dac50fSopenharmony_ci/**
89e0dac50fSopenharmony_ci * @tc.name: SetScreenColorGamut01
90e0dac50fSopenharmony_ci * @tc.desc: gamut SetScreenColorGamut, valid index
91e0dac50fSopenharmony_ci * @tc.type: FUNC
92e0dac50fSopenharmony_ci */
93e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, SetScreenColorGamut01, Function | MediumTest | Level3)
94e0dac50fSopenharmony_ci{
95e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
96e0dac50fSopenharmony_ci    DMError ret;
97e0dac50fSopenharmony_ci    ScreenColorGamut colorGamutBackup;
98e0dac50fSopenharmony_ci    int32_t colorGamutBackupIdx = -1;
99e0dac50fSopenharmony_ci    ScreenColorGamut colorGamut;
100e0dac50fSopenharmony_ci    std::vector<ScreenColorGamut> colorGamuts;
101e0dac50fSopenharmony_ci
102e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenColorGamut(colorGamutBackup); // backup origin
103e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
104e0dac50fSopenharmony_ci
105e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenSupportedColorGamuts(colorGamuts);
106e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
107e0dac50fSopenharmony_ci
108e0dac50fSopenharmony_ci    for (int32_t i = 0; i < static_cast<int32_t>(colorGamuts.size()); i++) {
109e0dac50fSopenharmony_ci        ret = defaultScreen_->SetScreenColorGamut(i);
110e0dac50fSopenharmony_ci        ASSERT_EQ(ret, DMError::DM_OK);
111e0dac50fSopenharmony_ci
112e0dac50fSopenharmony_ci        ret = defaultScreen_->GetScreenColorGamut(colorGamut);
113e0dac50fSopenharmony_ci        ASSERT_EQ(ret, DMError::DM_OK);
114e0dac50fSopenharmony_ci
115e0dac50fSopenharmony_ci#ifdef SCREEN_GAMUT_SET_GET_OK
116e0dac50fSopenharmony_ci        ASSERT_EQ(colorGamut, colorGamuts[i]);
117e0dac50fSopenharmony_ci#endif
118e0dac50fSopenharmony_ci        if (colorGamutBackup == colorGamuts[i]) {
119e0dac50fSopenharmony_ci            colorGamutBackupIdx = i;
120e0dac50fSopenharmony_ci        }
121e0dac50fSopenharmony_ci    }
122e0dac50fSopenharmony_ci
123e0dac50fSopenharmony_ci    ASSERT_GE(colorGamutBackupIdx, 0);
124e0dac50fSopenharmony_ci    ret = defaultScreen_->SetScreenColorGamut(colorGamutBackupIdx); // restore
125e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
126e0dac50fSopenharmony_ci}
127e0dac50fSopenharmony_ci
128e0dac50fSopenharmony_ci/**
129e0dac50fSopenharmony_ci * @tc.name: SetScreenColorGamut02
130e0dac50fSopenharmony_ci * @tc.desc: gamut SetScreenColorGamut, invalid index < 0
131e0dac50fSopenharmony_ci * @tc.type: FUNC
132e0dac50fSopenharmony_ci */
133e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, SetScreenColorGamut02, Function | MediumTest | Level3)
134e0dac50fSopenharmony_ci{
135e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
136e0dac50fSopenharmony_ci    DMError ret;
137e0dac50fSopenharmony_ci    ScreenColorGamut colorGamutBefore;
138e0dac50fSopenharmony_ci    ScreenColorGamut colorGamutAfter;
139e0dac50fSopenharmony_ci
140e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenColorGamut(colorGamutBefore);
141e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
142e0dac50fSopenharmony_ci
143e0dac50fSopenharmony_ci    constexpr int32_t invalidColorGamutIndex = -1; // index < 0
144e0dac50fSopenharmony_ci    ret = defaultScreen_->SetScreenColorGamut(invalidColorGamutIndex);
145e0dac50fSopenharmony_ci    ASSERT_NE(ret, DMError::DM_OK);
146e0dac50fSopenharmony_ci
147e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenColorGamut(colorGamutAfter);
148e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
149e0dac50fSopenharmony_ci
150e0dac50fSopenharmony_ci    ASSERT_EQ(colorGamutBefore, colorGamutAfter); // don't change colorgamut after invalid set
151e0dac50fSopenharmony_ci}
152e0dac50fSopenharmony_ci
153e0dac50fSopenharmony_ci/**
154e0dac50fSopenharmony_ci * @tc.name: SetScreenColorGamut03
155e0dac50fSopenharmony_ci * @tc.desc: gamut SetScreenColorGamut, invalid index >= size
156e0dac50fSopenharmony_ci * @tc.type: FUNC
157e0dac50fSopenharmony_ci */
158e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, SetScreenColorGamut03, Function | MediumTest | Level3)
159e0dac50fSopenharmony_ci{
160e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
161e0dac50fSopenharmony_ci    DMError ret;
162e0dac50fSopenharmony_ci    ScreenColorGamut colorGamutBefore;
163e0dac50fSopenharmony_ci    ScreenColorGamut colorGamutAfter;
164e0dac50fSopenharmony_ci
165e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenColorGamut(colorGamutBefore);
166e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
167e0dac50fSopenharmony_ci
168e0dac50fSopenharmony_ci    std::vector<ScreenColorGamut> colorGamuts;
169e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenSupportedColorGamuts(colorGamuts);
170e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
171e0dac50fSopenharmony_ci
172e0dac50fSopenharmony_ci    const int32_t invalidColorGamutIndex = static_cast<int32_t>(colorGamuts.size()); // index >= size
173e0dac50fSopenharmony_ci    ret = defaultScreen_->SetScreenColorGamut(invalidColorGamutIndex);
174e0dac50fSopenharmony_ci    ASSERT_NE(ret, DMError::DM_OK);
175e0dac50fSopenharmony_ci
176e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenColorGamut(colorGamutAfter);
177e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
178e0dac50fSopenharmony_ci
179e0dac50fSopenharmony_ci    ASSERT_EQ(colorGamutBefore, colorGamutAfter); // don't change colorgamut after invalid set
180e0dac50fSopenharmony_ci}
181e0dac50fSopenharmony_ci
182e0dac50fSopenharmony_ci/**
183e0dac50fSopenharmony_ci * @tc.name: GetScreenGamutMap01
184e0dac50fSopenharmony_ci * @tc.desc: gamut GetScreenGamutMap
185e0dac50fSopenharmony_ci * @tc.type: FUNC
186e0dac50fSopenharmony_ci */
187e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, GetScreenGamutMap01, Function | MediumTest | Level3)
188e0dac50fSopenharmony_ci{
189e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
190e0dac50fSopenharmony_ci    DMError ret;
191e0dac50fSopenharmony_ci    ScreenGamutMap gamutMap;
192e0dac50fSopenharmony_ci
193e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenGamutMap(gamutMap);
194e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
195e0dac50fSopenharmony_ci}
196e0dac50fSopenharmony_ci
197e0dac50fSopenharmony_ci/**
198e0dac50fSopenharmony_ci * @tc.name: SetScreenGamutMap01
199e0dac50fSopenharmony_ci * @tc.desc: gamut SetScreenGamutMap, valid param
200e0dac50fSopenharmony_ci * @tc.type: FUNC
201e0dac50fSopenharmony_ci */
202e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, SetScreenGamutMap01, Function | MediumTest | Level3)
203e0dac50fSopenharmony_ci{
204e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
205e0dac50fSopenharmony_ci    DMError ret;
206e0dac50fSopenharmony_ci    const ScreenGamutMap gamutMaps[] = {
207e0dac50fSopenharmony_ci        GAMUT_MAP_CONSTANT,
208e0dac50fSopenharmony_ci        GAMUT_MAP_EXTENSION,
209e0dac50fSopenharmony_ci        GAMUT_MAP_HDR_CONSTANT,
210e0dac50fSopenharmony_ci        GAMUT_MAP_HDR_EXTENSION,
211e0dac50fSopenharmony_ci    };
212e0dac50fSopenharmony_ci    ScreenGamutMap gamutMap;
213e0dac50fSopenharmony_ci    ScreenGamutMap gamutMapBackup;
214e0dac50fSopenharmony_ci
215e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenGamutMap(gamutMapBackup); // backup origin
216e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
217e0dac50fSopenharmony_ci
218e0dac50fSopenharmony_ci    for (uint32_t i = 0; i < sizeof(gamutMaps) / sizeof(ScreenGamutMap); i++) {
219e0dac50fSopenharmony_ci        ret = defaultScreen_->SetScreenGamutMap(gamutMaps[i]);
220e0dac50fSopenharmony_ci        ASSERT_EQ(ret, DMError::DM_OK);
221e0dac50fSopenharmony_ci
222e0dac50fSopenharmony_ci        ret = defaultScreen_->GetScreenGamutMap(gamutMap);
223e0dac50fSopenharmony_ci        ASSERT_EQ(ret, DMError::DM_OK);
224e0dac50fSopenharmony_ci#ifdef SCREEN_GAMUT_SET_GET_OK
225e0dac50fSopenharmony_ci        ASSERT_EQ(gamutMaps[i], gamutMap);
226e0dac50fSopenharmony_ci#endif
227e0dac50fSopenharmony_ci    }
228e0dac50fSopenharmony_ci
229e0dac50fSopenharmony_ci    ret = defaultScreen_->SetScreenGamutMap(gamutMapBackup); // restore
230e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
231e0dac50fSopenharmony_ci}
232e0dac50fSopenharmony_ci
233e0dac50fSopenharmony_ci/**
234e0dac50fSopenharmony_ci * @tc.name: SetScreenGamutMap02
235e0dac50fSopenharmony_ci * @tc.desc: gamut SetScreenGamutMap, invalid param
236e0dac50fSopenharmony_ci * @tc.type: FUNC
237e0dac50fSopenharmony_ci */
238e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, SetScreenGamutMap02, Function | MediumTest | Level3)
239e0dac50fSopenharmony_ci{
240e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
241e0dac50fSopenharmony_ci    DMError ret;
242e0dac50fSopenharmony_ci    ScreenGamutMap gamutMap;
243e0dac50fSopenharmony_ci    ScreenGamutMap gamutMapBefore;
244e0dac50fSopenharmony_ci    ScreenGamutMap gamutMapAfter;
245e0dac50fSopenharmony_ci
246e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenGamutMap(gamutMapBefore);
247e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
248e0dac50fSopenharmony_ci
249e0dac50fSopenharmony_ci    gamutMap = static_cast<ScreenGamutMap>(static_cast<uint32_t>(ScreenGamutMap::GAMUT_MAP_HDR_EXTENSION) + 1);
250e0dac50fSopenharmony_ci    ret = defaultScreen_->SetScreenGamutMap(gamutMap);
251e0dac50fSopenharmony_ci    ASSERT_NE(ret, DMError::DM_OK);
252e0dac50fSopenharmony_ci
253e0dac50fSopenharmony_ci    ret = defaultScreen_->GetScreenGamutMap(gamutMapAfter);
254e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
255e0dac50fSopenharmony_ci
256e0dac50fSopenharmony_ci    ASSERT_EQ(gamutMapBefore, gamutMapAfter);
257e0dac50fSopenharmony_ci}
258e0dac50fSopenharmony_ci
259e0dac50fSopenharmony_ci/**
260e0dac50fSopenharmony_ci * @tc.name: SetScreenColorTransform01
261e0dac50fSopenharmony_ci * @tc.desc: gamut SetScreenColorTransform
262e0dac50fSopenharmony_ci * @tc.type: FUNC
263e0dac50fSopenharmony_ci */
264e0dac50fSopenharmony_ciHWTEST_F(ScreenGamutTest, SetScreenColorTransform01, Function | MediumTest | Level3)
265e0dac50fSopenharmony_ci{
266e0dac50fSopenharmony_ci    ASSERT_NE(defaultScreen_, nullptr);
267e0dac50fSopenharmony_ci    DMError ret;
268e0dac50fSopenharmony_ci
269e0dac50fSopenharmony_ci    ret = defaultScreen_->SetScreenColorTransform();
270e0dac50fSopenharmony_ci    ASSERT_EQ(ret, DMError::DM_OK);
271e0dac50fSopenharmony_ci}
272e0dac50fSopenharmony_ci}
273e0dac50fSopenharmony_ci} // namespace Rosen
274e0dac50fSopenharmony_ci} // namespace OHOS
275