1 /*
2  * Copyright (c) 2023 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 "core/components_ng/manager/frame_rate/frame_rate_manager.h"
18 #include "test/mock/core/pipeline/mock_pipeline_context.h"
19 
20 using namespace testing;
21 using namespace testing::ext;
22 namespace OHOS::Ace::NG {
23 class FrameRateRangeTest : public testing::Test {
24 public:
25     static void SetUpTestCase();
26     static void TearDownTestCase();
27 };
28 
SetUpTestCase()29 void FrameRateRangeTest::SetUpTestCase()
30 {
31     MockPipelineContext::SetUp();
32 }
33 
TearDownTestCase()34 void FrameRateRangeTest::TearDownTestCase()
35 {
36     MockPipelineContext::TearDown();
37 }
38 
39 /**
40  * @tc.name: RateChangedTest
41  * @tc.desc: RateChanged Set and Get test.
42  * @tc.type: FUNC
43  */
44 HWTEST_F(FrameRateRangeTest, RateChangedTest, TestSize.Level1)
45 {
46     FrameRateManager frameRageManager;
47     EXPECT_EQ(false, frameRageManager.IsRateChanged());
48     frameRageManager.SetIsRateChanged(true);
49     EXPECT_EQ(true, frameRageManager.IsRateChanged());
50 }
51 
52 /**
53  * @tc.name: NodeRateTest
54  * @tc.desc: NodeRateTest Add and Remove and Update test.
55  * @tc.type: FUNC
56  */
57 HWTEST_F(FrameRateRangeTest, NodeRateTest, TestSize.Level1)
58 {
59     int32_t nodeId = 1;
60     int32_t nodeId2 = 2;
61     int32_t rate1 = 60;
62     int32_t rate2 = 120;
63     FrameRateManager frameRageManager;
64     EXPECT_EQ(false, frameRageManager.IsRateChanged());
65     frameRageManager.AddNodeRate(nodeId, rate1);
66     EXPECT_EQ(true, frameRageManager.IsRateChanged());
67 
68     frameRageManager.SetIsRateChanged(false);
69     frameRageManager.AddNodeRate(nodeId, rate2);
70     EXPECT_EQ(false, frameRageManager.IsRateChanged());
71 
72     frameRageManager.SetIsRateChanged(false);
73     frameRageManager.UpdateNodeRate(nodeId2, rate2);
74     EXPECT_EQ(false, frameRageManager.IsRateChanged());
75     frameRageManager.UpdateNodeRate(nodeId, rate2);
76     EXPECT_EQ(true, frameRageManager.IsRateChanged());
77 
78     frameRageManager.SetIsRateChanged(false);
79     frameRageManager.RemoveNodeRate(nodeId2);
80     EXPECT_EQ(false, frameRageManager.IsRateChanged());
81     frameRageManager.RemoveNodeRate(nodeId);
82     EXPECT_EQ(true, frameRageManager.IsRateChanged());
83 }
84 
85 /**
86  * @tc.name: GetDisplaySyncRate
87  * @tc.desc: GetDisplaySyncRate test.
88  * @tc.type: FUNC
89  */
90 HWTEST_F(FrameRateRangeTest, GetDisplaySyncRate, TestSize.Level1)
91 {
92     int32_t nodeId = 1;
93     int32_t rate = 120;
94     int32_t displaySyncRate = 90;
95     int32_t animateRate = 60;
96     FrameRateManager frameRageManager;
97     auto [expectedRate1, expectedRateType1] = frameRageManager.GetExpectedRate();
98     EXPECT_EQ(0, expectedRate1);
99     EXPECT_EQ(0, expectedRateType1);
100     EXPECT_EQ(0, frameRageManager.GetDisplaySyncRate());
101     frameRageManager.SetDisplaySyncRate(displaySyncRate);
102     EXPECT_EQ(displaySyncRate, frameRageManager.GetDisplaySyncRate());
103     EXPECT_EQ(true, frameRageManager.IsRateChanged());
104 
105     frameRageManager.SetIsRateChanged(false);
106     frameRageManager.SetDisplaySyncRate(displaySyncRate);
107     EXPECT_EQ(false, frameRageManager.IsRateChanged());
108 
109     frameRageManager.SetIsRateChanged(false);
110     frameRageManager.SetAnimateRate(animateRate);
111     EXPECT_EQ(true, frameRageManager.IsRateChanged());
112     frameRageManager.SetIsRateChanged(false);
113     frameRageManager.SetAnimateRate(animateRate);
114     EXPECT_EQ(false, frameRageManager.IsRateChanged());
115 
116     frameRageManager.AddNodeRate(nodeId, rate);
117     auto [expectedRate2, expectedRateType2] = frameRageManager.GetExpectedRate();
118     EXPECT_EQ(rate, expectedRate2);
119     EXPECT_EQ(ACE_COMPONENT_FRAME_RATE_TYPE, expectedRateType2);
120 }
121 } // namespace OHOS::Ace::NG