1/*
2 * Copyright (c) 2024 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#include <gtest/gtest.h>
16#include "native_display_soloist.h"
17
18using namespace testing;
19using namespace testing::ext;
20
21namespace OHOS {
22namespace Rosen {
23namespace {
24    constexpr uint32_t FRAME_RATE_30_HZ = 30;
25    constexpr uint32_t FRAME_RATE_60_HZ = 60;
26    constexpr uint32_t FRAME_RATE_90_HZ = 90;
27    constexpr uint32_t FRAME_RATE_120_HZ = 120;
28    constexpr uint32_t SLEEP_TIME_US = 100000;
29    constexpr int32_t EXEC_SUCCESS = 0;
30    constexpr int32_t SOLOIST_ERROR = -1;
31}
32class NativeDisplaySoloistTest : public testing::Test {
33public:
34    static void SetUpTestCase();
35    static void TearDownTestCase();
36    void SetUp();
37    void TearDown();
38
39    static inline OH_DisplaySoloist* nativeDisplaySoloist = nullptr;
40};
41
42void NativeDisplaySoloistTest::SetUpTestCase()
43{
44}
45
46void NativeDisplaySoloistTest::TearDownTestCase()
47{
48    usleep(SLEEP_TIME_US);
49}
50
51void NativeDisplaySoloistTest::SetUp()
52{
53}
54
55void NativeDisplaySoloistTest::TearDown()
56{
57}
58
59static void OnVSync(long long timestamp, long long targetTimestamp, void* data)
60{
61}
62
63namespace {
64/*
65* Function: OH_DisplaySoloist_Create
66* Type: Function
67* Rank: Important(2)
68* EnvConditions: N/A
69* CaseDescription: 1. call OH_DisplaySoloist_Create by normal input
70 */
71HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Create001, Function | MediumTest | Level2)
72{
73    EXPECT_EQ(nullptr, nativeDisplaySoloist);
74    nativeDisplaySoloist = OH_DisplaySoloist_Create(false);
75    EXPECT_NE(nullptr, nativeDisplaySoloist);
76}
77
78/*
79* Function: OH_DisplaySoloist_Start
80* Type: Function
81* Rank: Important(2)
82* EnvConditions: N/A
83* CaseDescription: 1. call OH_DisplaySoloist_Start by abnormal input
84 */
85HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Start001, Function | MediumTest | Level2)
86{
87    OH_DisplaySoloist_FrameCallback callback = OnVSync;
88    int32_t result = OH_DisplaySoloist_Start(nullptr, callback, nullptr);
89    EXPECT_EQ(SOLOIST_ERROR, result);
90}
91
92/*
93* Function: OH_DisplaySoloist_Start
94* Type: Function
95* Rank: Important(2)
96* EnvConditions: N/A
97* CaseDescription: 1. call OH_DisplaySoloist_Start by normal input
98 */
99HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Start002, Function | MediumTest | Level2)
100{
101    OH_DisplaySoloist_FrameCallback callback = OnVSync;
102    int32_t result = OH_DisplaySoloist_Start(nativeDisplaySoloist, callback, nullptr);
103    EXPECT_EQ(EXEC_SUCCESS, result);
104}
105
106/*
107* Function: OH_DisplaySoloist_SetExpectedFrameRateRange
108* Type: Function
109* Rank: Important(2)
110* EnvConditions: N/A
111* CaseDescription: 1. call OH_DisplaySoloist_SetExpectedFrameRateRange by abnormal input
112 */
113HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_SetExpectedFrameRateRange001, Function | MediumTest | Level2)
114{
115    DisplaySoloist_ExpectedRateRange validRange = { FRAME_RATE_30_HZ, FRAME_RATE_120_HZ, FRAME_RATE_60_HZ };
116    int32_t result1 = OH_DisplaySoloist_SetExpectedFrameRateRange(nullptr, &validRange);
117    EXPECT_EQ(SOLOIST_ERROR, result1);
118    int32_t result2 = OH_DisplaySoloist_SetExpectedFrameRateRange(nativeDisplaySoloist, nullptr);
119    EXPECT_EQ(SOLOIST_ERROR, result2);
120}
121
122/*
123* Function: OH_DisplaySoloist_SetExpectedFrameRateRange
124* Type: Function
125* Rank: Important(2)
126* EnvConditions: N/A
127* CaseDescription: 1. call OH_DisplaySoloist_SetExpectedFrameRateRange by abnormal input
128 */
129HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_SetExpectedFrameRateRange002, Function | MediumTest | Level2)
130{
131    DisplaySoloist_ExpectedRateRange invalidRange = { FRAME_RATE_30_HZ, FRAME_RATE_90_HZ, FRAME_RATE_120_HZ };
132    int32_t result = OH_DisplaySoloist_SetExpectedFrameRateRange(nullptr, &invalidRange);
133    EXPECT_EQ(SOLOIST_ERROR, result);
134}
135
136/*
137* Function: OH_DisplaySoloist_SetExpectedFrameRateRange
138* Type: Function
139* Rank: Important(2)
140* EnvConditions: N/A
141* CaseDescription: 1. call OH_DisplaySoloist_SetExpectedFrameRateRange by normal input
142 */
143HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_SetExpectedFrameRateRange003, Function | MediumTest | Level2)
144{
145    DisplaySoloist_ExpectedRateRange validRange = { FRAME_RATE_30_HZ, FRAME_RATE_120_HZ, FRAME_RATE_60_HZ };
146    int32_t result = OH_DisplaySoloist_SetExpectedFrameRateRange(nativeDisplaySoloist, &validRange);
147    EXPECT_EQ(EXEC_SUCCESS, result);
148}
149
150/*
151* Function: OH_DisplaySoloist_Stop
152* Type: Function
153* Rank: Important(2)
154* EnvConditions: N/A
155* CaseDescription: 1. call OH_DisplaySoloist_Stop by abnormal input
156 */
157HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Stop001, Function | MediumTest | Level2)
158{
159    int32_t result = OH_DisplaySoloist_Stop(nullptr);
160    EXPECT_EQ(SOLOIST_ERROR, result);
161}
162
163/*
164* Function: OH_DisplaySoloist_Stop
165* Type: Function
166* Rank: Important(2)
167* EnvConditions: N/A
168* CaseDescription: 1. call OH_DisplaySoloist_Stop by normal input
169 */
170HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Stop002, Function | MediumTest | Level2)
171{
172    int32_t result = OH_DisplaySoloist_Stop(nativeDisplaySoloist);
173    EXPECT_EQ(EXEC_SUCCESS, result);
174}
175
176/*
177* Function: OH_DisplaySoloist_Destroy
178* Type: Function
179* Rank: Important(2)
180* EnvConditions: N/A
181* CaseDescription: 1. call OH_DisplaySoloist_Destroy by abnormal input
182 */
183HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Destroy001, Function | MediumTest | Level2)
184{
185    int32_t result = OH_DisplaySoloist_Destroy(nullptr);
186    EXPECT_EQ(SOLOIST_ERROR, result);
187}
188
189/*
190* Function: OH_DisplaySoloist_Destroy
191* Type: Function
192* Rank: Important(2)
193* EnvConditions: N/A
194* CaseDescription: 1. call OH_DisplaySoloist_Destroy by normal input
195 */
196HWTEST_F(NativeDisplaySoloistTest, OH_DisplaySoloist_Destroy002, Function | MediumTest | Level2)
197{
198    int32_t result = OH_DisplaySoloist_Destroy(nativeDisplaySoloist);
199    EXPECT_EQ(EXEC_SUCCESS, result);
200}
201
202} // namespace
203} // namespace Rosen
204} // namespace OHOS
205