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
23using namespace testing;
24using namespace testing::ext;
25
26namespace OHOS {
27namespace Rosen {
28class ScreenGroupTest : public testing::Test {
29public:
30    static void SetUpTestCase();
31    static void TearDownTestCase();
32    void SetUp() override;
33    void TearDown() override;
34    sptr<ScreenGroup> group_;
35};
36
37
38void ScreenGroupTest::SetUpTestCase()
39{
40}
41
42void ScreenGroupTest::TearDownTestCase()
43{
44}
45
46void ScreenGroupTest::SetUp()
47{
48    group_ = ScreenManager::GetInstance().GetScreenGroup(0);
49}
50
51void ScreenGroupTest::TearDown()
52{
53}
54
55namespace {
56/**
57 * @tc.name: UpdateScreenGroupInfo02
58 * @tc.desc: test InterfaceToken check failed
59 * @tc.type: FUNC
60 */
61HWTEST_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 */
76HWTEST_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 */
92HWTEST_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 */
109HWTEST_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}