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