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 #include <gtest/gtest.h>
17 #include "screen_group.h"
18 #include "screen_manager.h"
19 #include "screen_group_info.h"
20 #include "mock_display_manager_adapter.h"
21 #include "singleton_mocker.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace OHOS {
27 namespace Rosen {
28 class ScreenGroupTest : public testing::Test {
29 public:
30     static void SetUpTestCase();
31     static void TearDownTestCase();
32     void SetUp() override;
33     void TearDown() override;
34     sptr<ScreenGroup> group_;
35 };
36 
37 
SetUpTestCase()38 void ScreenGroupTest::SetUpTestCase()
39 {
40 }
41 
TearDownTestCase()42 void ScreenGroupTest::TearDownTestCase()
43 {
44 }
45 
SetUp()46 void ScreenGroupTest::SetUp()
47 {
48     group_ = ScreenManager::GetInstance().GetScreenGroup(0);
49 }
50 
TearDown()51 void ScreenGroupTest::TearDown()
52 {
53 }
54 
55 namespace {
56 /**
57  * @tc.name: UpdateScreenGroupInfo02
58  * @tc.desc: test InterfaceToken check failed
59  * @tc.type: FUNC
60  */
61 HWTEST_F(ScreenGroupTest, UpdateScreenGroupInfo02, Function | SmallTest | Level2)
62 {
63     sptr<ScreenGroupInfo> screenGroupInfo = new(std::nothrow) ScreenGroupInfo();
64     sptr<ScreenGroup> screenGroup = new ScreenGroup(screenGroupInfo);
65     SingletonMocker<ScreenManagerAdapter, MockScreenManagerAdapter> m;
66     EXPECT_CALL(m.Mock(), GetScreenGroupInfoById(_)).Times(1).WillOnce(Return(nullptr));
67     ScreenCombination comb = screenGroup->GetCombination();
68     ASSERT_EQ(ScreenCombination::SCREEN_ALONE, comb);
69 }
70 
71 /**
72  * @tc.name: UpdateScreenGroupInfo01
73  * @tc.desc: test InterfaceToken check success
74  * @tc.type: FUNC
75  */
76 HWTEST_F(ScreenGroupTest, UpdateScreenGroupInfo01, Function | SmallTest | Level2)
77 {
78     sptr<ScreenGroupInfo> screenGroupInfo = new(std::nothrow) ScreenGroupInfo();
79     sptr<ScreenGroup> screenGroup = new ScreenGroup(screenGroupInfo);
80     screenGroupInfo->combination_ = ScreenCombination::SCREEN_EXPAND;
81     SingletonMocker<ScreenManagerAdapter, MockScreenManagerAdapter> m;
82     EXPECT_CALL(m.Mock(), GetScreenGroupInfoById(_)).Times(1).WillOnce(Return(screenGroupInfo));
83     ScreenCombination comb = screenGroup->GetCombination();
84     ASSERT_EQ(ScreenCombination::SCREEN_EXPAND, comb);
85 }
86 
87 /**
88  * @tc.name: UpdateScreenGroupInfo03
89  * @tc.desc: test InterfaceToken check success
90  * @tc.type: FUNC
91  */
92 HWTEST_F(ScreenGroupTest, UpdateScreenGroupInfo03, Function | SmallTest | Level2)
93 {
94     sptr<ScreenGroupInfo> screenGroupInfo = new(std::nothrow) ScreenGroupInfo();
95     sptr<ScreenGroup> screenGroup = new ScreenGroup(screenGroupInfo);
96     std::vector<Point> position;
97     position.emplace_back(0, 0);
98     screenGroupInfo->position_ = position;
99     SingletonMocker<ScreenManagerAdapter, MockScreenManagerAdapter> m;
100     EXPECT_CALL(m.Mock(), GetScreenGroupInfoById(_)).Times(1).WillOnce(Return(screenGroupInfo));
101     std::vector<Point> pos = screenGroup->GetChildPositions();
102     ASSERT_EQ(position.size(), pos.size());
103 }
104 /**
105  * @tc.name: GetChildIds
106  * @tc.desc: for interface coverage & check GetChildIds
107  * @tc.type: FUNC
108  */
109 HWTEST_F(ScreenGroupTest, GetChildIds, Function | SmallTest | Level2)
110 {
111     sptr<ScreenGroupInfo> screenGroupInfo = new(std::nothrow) ScreenGroupInfo();
112     sptr<ScreenGroup> screenGroup = new ScreenGroup(screenGroupInfo);
113     auto result = screenGroup->GetChildIds();
114     ASSERT_TRUE(result.empty());
115 
116     screenGroupInfo->children_.emplace_back(1);
117     result = screenGroup->GetChildIds();
118     ASSERT_EQ(result.size(), 1);
119 }
120 }
121 }
122 }