2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
23 #include <dali/public-api/dali-core.h>
24 #include <dali-toolkit/dali-toolkit.h>
26 #include <dali-toolkit-test-suite-utils.h>
28 // Internal headers are allowed here
29 #include <dali-toolkit/internal/controls/text-view/text-view-processor-types.h>
32 using namespace Dali::Toolkit;
33 using namespace Dali::Toolkit::Internal;
37 // Data structures used to create an 'experiment' in TET cases
39 //////////////////////////////////////////////////////////////////
42 static void Startup();
43 static void Cleanup();
46 void (*tet_startup)() = Startup;
47 void (*tet_cleanup)() = Cleanup;
51 POSITIVE_TC_IDX = 0x01,
55 #define MAX_NUMBER_OF_TESTS 10000
57 struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
60 // Add test functionality for all APIs in the class (Positive and Negative)
61 TEST_FUNCTION( UtcDaliTextViewDefaultConstructorDestructor, POSITIVE_TC_IDX );
62 TEST_FUNCTION( UtcDaliTextViewCopyConstructorOperator, POSITIVE_TC_IDX );
63 TEST_FUNCTION( UtcDaliTextViewEqualityOperator, POSITIVE_TC_IDX );
65 // Called only once before first test is run.
70 // Called only once after last test is run
75 static void UtcDaliTextViewDefaultConstructorDestructor()
77 ToolkitTestApplication application;
79 tet_infoline("UtcDaliTextViewDefaultConstructorDestructor : ");
81 TextViewProcessor::TextInfoIndices indices;
82 DALI_TEST_EQUALS( indices.mLineIndex, 0u, TEST_LOCATION );
83 DALI_TEST_EQUALS( indices.mGroupIndex, 0u, TEST_LOCATION );
84 DALI_TEST_EQUALS( indices.mWordIndex, 0u, TEST_LOCATION );
85 DALI_TEST_EQUALS( indices.mCharacterIndex, 0u, TEST_LOCATION );
87 TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
88 DALI_TEST_EQUALS( characterLayoutInfo.mHeight, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
89 DALI_TEST_EQUALS( characterLayoutInfo.mAdvance, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
90 DALI_TEST_EQUALS( characterLayoutInfo.mBearing, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
91 DALI_TEST_EQUALS( characterLayoutInfo.mPosition, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
92 DALI_TEST_EQUALS( characterLayoutInfo.mOffset, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
93 DALI_TEST_EQUALS( characterLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
94 DALI_TEST_EQUALS( characterLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
95 DALI_TEST_EQUALS( characterLayoutInfo.mUnderlineThickness, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
96 DALI_TEST_EQUALS( characterLayoutInfo.mUnderlinePosition, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
97 DALI_TEST_CHECK( !characterLayoutInfo.mGlyphActor );
98 DALI_TEST_CHECK( characterLayoutInfo.mStyledText.mText.IsEmpty() );
99 DALI_TEST_EQUALS( characterLayoutInfo.mColorAlpha, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
100 DALI_TEST_EQUALS( characterLayoutInfo.mGradientColor, Vector4::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
101 DALI_TEST_EQUALS( characterLayoutInfo.mStartPoint, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
102 DALI_TEST_EQUALS( characterLayoutInfo.mEndPoint, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
103 DALI_TEST_CHECK( characterLayoutInfo.mIsVisible );
104 DALI_TEST_CHECK( characterLayoutInfo.mSetText );
105 DALI_TEST_CHECK( characterLayoutInfo.mSetStyle );
107 TextViewProcessor::WordLayoutInfo wordLayoutInfo;
108 DALI_TEST_EQUALS( wordLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
109 DALI_TEST_EQUALS( wordLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
110 DALI_TEST_EQUALS( wordLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
111 DALI_TEST_EQUALS( wordLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
113 TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo;
114 DALI_TEST_EQUALS( wordGroupLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
115 DALI_TEST_EQUALS( wordGroupLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
116 DALI_TEST_EQUALS( wordGroupLayoutInfo.mDirection, TextViewProcessor::LTR, TEST_LOCATION );
117 DALI_TEST_EQUALS( wordGroupLayoutInfo.mWordsLayoutInfo.size(), 0u, TEST_LOCATION );
118 DALI_TEST_EQUALS( wordGroupLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
120 TextViewProcessor::LineLayoutInfo lineLayoutInfo;
121 DALI_TEST_EQUALS( lineLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
122 DALI_TEST_EQUALS( lineLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
123 DALI_TEST_EQUALS( lineLayoutInfo.mLineHeightOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
124 DALI_TEST_EQUALS( lineLayoutInfo.mWordGroupsLayoutInfo.size(), 0u, TEST_LOCATION );
125 DALI_TEST_EQUALS( lineLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
127 TextViewProcessor::TextLayoutInfo textLayoutInfo;
128 DALI_TEST_EQUALS( textLayoutInfo.mWholeTextSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
129 DALI_TEST_EQUALS( textLayoutInfo.mMaxWordWidth, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
130 DALI_TEST_EQUALS( textLayoutInfo.mLinesLayoutInfo.size(), 0u, TEST_LOCATION );
131 DALI_TEST_EQUALS( textLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
132 DALI_TEST_EQUALS( textLayoutInfo.mMaxItalicsOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
133 DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
134 DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
135 DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
136 DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
139 static void UtcDaliTextViewCopyConstructorOperator()
141 ToolkitTestApplication application;
143 tet_infoline("UtcDaliTextViewCopyConstructorOperator : ");
145 TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
146 characterLayoutInfo.mHeight = 1.f;
147 characterLayoutInfo.mAdvance = 1.f;
148 characterLayoutInfo.mBearing = 1.f;
149 characterLayoutInfo.mPosition = Vector3( 1.f, 1.f, 1.f );
150 characterLayoutInfo.mOffset = Vector2( 1.f, 1.f );
151 characterLayoutInfo.mSize = Vector2( 1.f, 1.f );
152 characterLayoutInfo.mAscender = 1.f;
153 characterLayoutInfo.mUnderlineThickness = 1.f;
154 characterLayoutInfo.mUnderlinePosition = 1.f;
156 characterLayoutInfo.mGlyphActor = TextActor::New( "Hello" );
157 characterLayoutInfo.mStyledText.mText = Text( "Hello" );
159 characterLayoutInfo.mColorAlpha = 0.f;
160 characterLayoutInfo.mGradientColor = Vector4( 1.f, 1.f, 1.f, 1.f );
161 characterLayoutInfo.mStartPoint = Vector2( 1.f, 1.f );
162 characterLayoutInfo.mEndPoint = Vector2( 1.f, 1.f );
163 characterLayoutInfo.mIsVisible = false;
164 characterLayoutInfo.mSetText = false;
165 characterLayoutInfo.mSetStyle = false;
167 TextViewProcessor::CharacterLayoutInfo characterLayoutInfo1;
168 characterLayoutInfo1 = characterLayoutInfo;
170 DALI_TEST_EQUALS( characterLayoutInfo1.mHeight, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
171 DALI_TEST_EQUALS( characterLayoutInfo1.mAdvance, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
172 DALI_TEST_EQUALS( characterLayoutInfo1.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
173 DALI_TEST_EQUALS( characterLayoutInfo1.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
174 DALI_TEST_EQUALS( characterLayoutInfo1.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
175 DALI_TEST_EQUALS( characterLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
176 DALI_TEST_EQUALS( characterLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
177 DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
178 DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
179 DALI_TEST_CHECK( characterLayoutInfo1.mGlyphActor );
180 DALI_TEST_EQUALS( characterLayoutInfo1.mStyledText.mText.GetLength(), 5u, TEST_LOCATION );
181 DALI_TEST_EQUALS( characterLayoutInfo1.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
182 DALI_TEST_EQUALS( characterLayoutInfo1.mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
183 DALI_TEST_EQUALS( characterLayoutInfo1.mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
184 DALI_TEST_EQUALS( characterLayoutInfo1.mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
185 DALI_TEST_CHECK( !characterLayoutInfo1.mIsVisible );
186 DALI_TEST_CHECK( !characterLayoutInfo1.mSetText );
187 DALI_TEST_CHECK( !characterLayoutInfo1.mSetStyle );
189 TextViewProcessor::CharacterLayoutInfo characterLayoutInfo2( characterLayoutInfo );
190 DALI_TEST_EQUALS( characterLayoutInfo2.mHeight, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
191 DALI_TEST_EQUALS( characterLayoutInfo2.mAdvance, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
192 DALI_TEST_EQUALS( characterLayoutInfo2.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
193 DALI_TEST_EQUALS( characterLayoutInfo2.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
194 DALI_TEST_EQUALS( characterLayoutInfo2.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
195 DALI_TEST_EQUALS( characterLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
196 DALI_TEST_EQUALS( characterLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
197 DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
198 DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
199 DALI_TEST_CHECK( characterLayoutInfo2.mGlyphActor );
200 DALI_TEST_EQUALS( characterLayoutInfo2.mStyledText.mText.GetLength(), 5u, TEST_LOCATION );
201 DALI_TEST_EQUALS( characterLayoutInfo2.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
202 DALI_TEST_EQUALS( characterLayoutInfo2.mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
203 DALI_TEST_EQUALS( characterLayoutInfo2.mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
204 DALI_TEST_EQUALS( characterLayoutInfo2.mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
205 DALI_TEST_CHECK( !characterLayoutInfo2.mIsVisible );
206 DALI_TEST_CHECK( !characterLayoutInfo2.mSetText );
207 DALI_TEST_CHECK( !characterLayoutInfo2.mSetStyle );
209 // Increases coverage.
210 characterLayoutInfo2.mGlyphActor.Reset();
211 characterLayoutInfo1 = characterLayoutInfo2;
212 DALI_TEST_CHECK( !characterLayoutInfo1.mGlyphActor );
214 TextViewProcessor::WordLayoutInfo wordLayoutInfo;
215 wordLayoutInfo.mSize = Vector2( 1.f, 1.f );
216 wordLayoutInfo.mAscender = 1.f;
217 wordLayoutInfo.mType = TextViewProcessor::LineSeparator;
219 TextViewProcessor::WordLayoutInfo wordLayoutInfo1;
220 wordLayoutInfo1 = wordLayoutInfo;
222 DALI_TEST_EQUALS( wordLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
223 DALI_TEST_EQUALS( wordLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
224 DALI_TEST_EQUALS( wordLayoutInfo1.mType, TextViewProcessor::LineSeparator, TEST_LOCATION );
226 TextViewProcessor::WordLayoutInfo wordLayoutInfo2( wordLayoutInfo );
228 DALI_TEST_EQUALS( wordLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
229 DALI_TEST_EQUALS( wordLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
230 DALI_TEST_EQUALS( wordLayoutInfo2.mType, TextViewProcessor::LineSeparator, TEST_LOCATION );
233 TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo;
234 wordGroupLayoutInfo.mSize = Vector2( 1.f, 1.f );
235 wordGroupLayoutInfo.mAscender = 1.f;
236 wordGroupLayoutInfo.mDirection = TextViewProcessor::RTL;
237 wordGroupLayoutInfo.mNumberOfCharacters = 1u;
239 TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo1;
240 wordGroupLayoutInfo1 = wordGroupLayoutInfo;
242 DALI_TEST_EQUALS( wordGroupLayoutInfo.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
243 DALI_TEST_EQUALS( wordGroupLayoutInfo.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
244 DALI_TEST_EQUALS( wordGroupLayoutInfo.mDirection, TextViewProcessor::RTL, TEST_LOCATION );
245 DALI_TEST_EQUALS( wordGroupLayoutInfo.mNumberOfCharacters, 1u, TEST_LOCATION );
247 TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo2( wordGroupLayoutInfo );
249 DALI_TEST_EQUALS( wordGroupLayoutInfo.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
250 DALI_TEST_EQUALS( wordGroupLayoutInfo.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
251 DALI_TEST_EQUALS( wordGroupLayoutInfo.mDirection, TextViewProcessor::RTL, TEST_LOCATION );
252 DALI_TEST_EQUALS( wordGroupLayoutInfo.mNumberOfCharacters, 1u, TEST_LOCATION );
255 TextViewProcessor::LineLayoutInfo lineLayoutInfo;
256 lineLayoutInfo.mSize = Vector2( 1.f, 1.f );
257 lineLayoutInfo.mAscender = 1.f;
258 lineLayoutInfo.mLineHeightOffset = 1.f;
259 lineLayoutInfo.mNumberOfCharacters = 1u;
261 TextViewProcessor::LineLayoutInfo lineLayoutInfo1;
262 lineLayoutInfo1 = lineLayoutInfo;
264 DALI_TEST_EQUALS( lineLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
265 DALI_TEST_EQUALS( lineLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
266 DALI_TEST_EQUALS( lineLayoutInfo1.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
267 DALI_TEST_EQUALS( lineLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
269 TextViewProcessor::LineLayoutInfo lineLayoutInfo2( lineLayoutInfo );
271 DALI_TEST_EQUALS( lineLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
272 DALI_TEST_EQUALS( lineLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
273 DALI_TEST_EQUALS( lineLayoutInfo2.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
274 DALI_TEST_EQUALS( lineLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
276 TextViewProcessor::TextLayoutInfo textLayoutInfo;
277 textLayoutInfo.mWholeTextSize = Vector2( 1.f, 1.f );
278 textLayoutInfo.mMaxWordWidth = 1.f;
279 textLayoutInfo.mNumberOfCharacters = 1u;
280 textLayoutInfo.mMaxItalicsOffset = 1.f;
282 TextViewProcessor::TextLayoutInfo textLayoutInfo1;
283 textLayoutInfo1 = textLayoutInfo;
285 DALI_TEST_EQUALS( textLayoutInfo1.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
286 DALI_TEST_EQUALS( textLayoutInfo1.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
287 DALI_TEST_EQUALS( textLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
288 DALI_TEST_EQUALS( textLayoutInfo1.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
290 TextViewProcessor::TextLayoutInfo textLayoutInfo2( textLayoutInfo );
292 DALI_TEST_EQUALS( textLayoutInfo2.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
293 DALI_TEST_EQUALS( textLayoutInfo2.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
294 DALI_TEST_EQUALS( textLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
295 DALI_TEST_EQUALS( textLayoutInfo2.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
298 static void UtcDaliTextViewEqualityOperator()
300 ToolkitTestApplication application;
302 tet_infoline("UtcDaliTextViewEqualityOperator : ");
304 TextViewProcessor::TextInfoIndices indices;
305 TextViewProcessor::TextInfoIndices indices1( 1u, 1u, 1u, 1u );
307 DALI_TEST_CHECK( !( indices == indices1 ) );
311 DALI_TEST_CHECK( indices == indices1 );