• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <gmock/gmock.h>
17 #include <gtest/gtest.h>
18 #include <memory>
19 
20 #include "mock/mock_any_span.h"
21 #include "param_test_macros.h"
22 #include "texgine_exception.h"
23 #include "typography_builder_impl.h"
24 #include "typography_impl.h"
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS {
30 namespace Rosen {
31 namespace TextEngine {
32 struct MockVars {
33     TextStyle ys;
34     std::vector<VariantSpan> catchedSpans;
35     std::vector<TextStyle> catchedStyles;
36 } g_tbMockvars;
37 
InitMockVars(struct MockVars && vars)38 void InitMockVars(struct MockVars &&vars)
39 {
40     g_tbMockvars = std::move(vars);
41 }
42 
TypographyImpl(TypographyStyle & ys,std::vector<VariantSpan> & spans,std::shared_ptr<FontProviders> providers)43 TypographyImpl::TypographyImpl(TypographyStyle &ys, std::vector<VariantSpan> &spans,
44     std::shared_ptr<FontProviders> providers)
45 {
46     g_tbMockvars.catchedSpans = spans;
47 }
48 
SetTextStyle(const TextStyle & style)49 void VariantSpan::SetTextStyle(const TextStyle &style) noexcept(true)
50 {
51     g_tbMockvars.catchedStyles.push_back(style);
52 }
53 
ConvertToTextStyle() const54 TextStyle TypographyStyle::ConvertToTextStyle() const
55 {
56     return g_tbMockvars.ys;
57 }
58 
59 class TypographyBuilderImplTest : public testing::Test {
60 public:
61     std::shared_ptr<TypographyBuilderImpl> builder_ =
62         std::make_shared<TypographyBuilderImpl>(TypographyStyle{}, FontProviders::Create());
63 };
64 
65 /**
66  * @tc.name: Create
67  * @tc.desc: Verify the Create
68  * @tc.type:FUNC
69  */
70 HWTEST_F(TypographyBuilderImplTest, Create, TestSize.Level1)
71 {
72     EXPECT_NE(TypographyBuilder::Create(), nullptr);
73 }
74 
75 /**
76  * @tc.name: PushPopStyle
77  * @tc.desc: Verify the PushPopStyle
78  * @tc.type:FUNC
79  */
80 HWTEST_F(TypographyBuilderImplTest, PushPopStyle, TestSize.Level1)
81 {
82     TextStyle s1 = {.fontSize = 1};
83     TextStyle s2 = {.fontSize = 2};
84     TextStyle s3 = {.fontSize = 3};
85     auto normalAnySpan = std::make_shared<MockAnySpan>();
86 
87     InitMockVars({.ys = s1});
88     TypographyBuilderImpl builder1({}, FontProviders::Create());
89     builder1.AppendSpan(normalAnySpan);
90     EXPECT_NE(builder1.Build(), nullptr);
91     EXPECT_EQ(g_tbMockvars.catchedStyles[0], s1);
92 
93     InitMockVars({.ys = s1});
94     TypographyBuilderImpl builder2({}, FontProviders::Create());
95     builder2.PushStyle(s2);
96     builder2.AppendSpan(normalAnySpan);
97     EXPECT_NE(builder2.Build(), nullptr);
98     EXPECT_EQ(g_tbMockvars.catchedStyles[0], s2);
99 
100     InitMockVars({.ys = s1});
101     TypographyBuilderImpl builder3({}, FontProviders::Create());
102     builder3.PushStyle(s2);
103     builder3.PushStyle(s3);
104     builder3.AppendSpan(normalAnySpan);
105     EXPECT_NE(builder3.Build(), nullptr);
106     EXPECT_EQ(g_tbMockvars.catchedStyles[0], s3);
107 
108     InitMockVars({.ys = s1});
109     TypographyBuilderImpl builder4({}, FontProviders::Create());
110     builder4.PushStyle(s2);
111     builder4.PushStyle(s3);
112     builder4.PopStyle();
113     builder4.AppendSpan(normalAnySpan);
114     EXPECT_NE(builder4.Build(), nullptr);
115     EXPECT_EQ(g_tbMockvars.catchedStyles[0], s2);
116 }
117 
118 /**
119  * @tc.name: AppendSpan1
120  * @tc.desc: Verify the AppendSpan
121  * @tc.type:FUNC
122  */
123 HWTEST_F(TypographyBuilderImplTest, AppendSpan1, TestSize.Level1)
124 {
125     std::shared_ptr<AnySpan> nullptrAnySpan = nullptr;
126     std::shared_ptr<TextSpan> nullptrTextSpan = nullptr;
127 
128     InitMockVars({});
129     TypographyBuilderImpl builder1({}, FontProviders::Create());
130     builder1.AppendSpan(nullptrAnySpan);
131     EXPECT_NE(builder1.Build(), nullptr);
132     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 0u);
133 
134     InitMockVars({});
135     TypographyBuilderImpl builder2({}, FontProviders::Create());
136     builder2.AppendSpan(nullptrTextSpan);
137     EXPECT_NE(builder2.Build(), nullptr);
138     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 0u);
139 
140     auto as1 = std::make_shared<MockAnySpan>();
141     InitMockVars({});
142     TypographyBuilderImpl builder3({}, FontProviders::Create());
143     builder3.AppendSpan(as1);
144     EXPECT_NE(builder3.Build(), nullptr);
145     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 1u);
146     EXPECT_EQ(g_tbMockvars.catchedSpans[0], as1);
147 
148     auto ts1 = TextSpan::MakeEmpty();
149     InitMockVars({});
150     TypographyBuilderImpl builder4({}, FontProviders::Create());
151     builder4.AppendSpan(ts1);
152     EXPECT_NE(builder4.Build(), nullptr);
153     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 1u);
154     EXPECT_EQ(g_tbMockvars.catchedSpans[0], ts1);
155 
156     auto as2 = std::make_shared<MockAnySpan>();
157     auto as3 = std::make_shared<MockAnySpan>();
158     InitMockVars({});
159     TypographyBuilderImpl builder5({}, FontProviders::Create());
160     builder5.AppendSpan(as2);
161     builder5.AppendSpan(as3);
162     EXPECT_NE(builder5.Build(), nullptr);
163     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 2u);
164     EXPECT_EQ(g_tbMockvars.catchedSpans[0], as2);
165     EXPECT_EQ(g_tbMockvars.catchedSpans[1], as3);
166 }
167 
168 /**
169  * @tc.name: AppendSpan2
170  * @tc.desc: Verify the AppendSpan
171  * @tc.type:FUNC
172  */
173 HWTEST_F(TypographyBuilderImplTest, AppendSpan2, TestSize.Level1)
174 {
175     TextStyle xs = {};
176 
177     auto ts2 = TextSpan::MakeEmpty();
178     auto ts3 = TextSpan::MakeEmpty();
179     InitMockVars({});
180     TypographyBuilderImpl builder6({}, FontProviders::Create());
181     builder6.AppendSpan(ts2);
182     builder6.AppendSpan(ts3);
183     EXPECT_NE(builder6.Build(), nullptr);
184     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 1u);
185     EXPECT_EQ(g_tbMockvars.catchedSpans[0], ts2);
186 
187     auto ts4 = TextSpan::MakeEmpty();
188     auto ts5 = TextSpan::MakeEmpty();
189     InitMockVars({});
190     TypographyBuilderImpl builder7({}, FontProviders::Create());
191     builder7.AppendSpan(ts4);
192     builder7.PushStyle(xs);
193     builder7.AppendSpan(ts5);
194     EXPECT_NE(builder7.Build(), nullptr);
195     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 2u);
196     EXPECT_EQ(g_tbMockvars.catchedSpans[0], ts4);
197     EXPECT_EQ(g_tbMockvars.catchedSpans[1], ts5);
198 
199     auto ts6 = TextSpan::MakeEmpty();
200     auto as4 = std::make_shared<MockAnySpan>();
201     auto ts7 = TextSpan::MakeEmpty();
202     InitMockVars({});
203     TypographyBuilderImpl builder8({}, FontProviders::Create());
204     builder8.AppendSpan(ts6);
205     builder8.AppendSpan(as4);
206     builder8.AppendSpan(ts7);
207     EXPECT_NE(builder8.Build(), nullptr);
208     EXPECT_EQ(g_tbMockvars.catchedSpans.size(), 3u);
209     EXPECT_EQ(g_tbMockvars.catchedSpans[0], ts6);
210     EXPECT_EQ(g_tbMockvars.catchedSpans[1], as4);
211     EXPECT_EQ(g_tbMockvars.catchedSpans[2], ts7);
212 }
213 } // namespace TextEngine
214 } // namespace Rosen
215 } // namespace OHOS
216