TextView - Reduces the size of the character layout.
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-TextView-Processor-Types.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <iostream>
19 #include <stdlib.h>
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22
23
24 // Internal headers are allowed here
25 #include <dali-toolkit/internal/controls/text-view/text-view-processor-types.h>
26
27 using namespace Dali;
28 using namespace Dali::Toolkit;
29 using namespace Dali::Toolkit::Internal;
30
31 void dali_text_view_processor_types_startup(void)
32 {
33   test_return_value = TET_UNDEF;
34 }
35
36 void dali_text_view_processor_types_cleanup(void)
37 {
38   test_return_value = TET_PASS;
39 }
40
41
42 namespace
43 {
44 // Data structures used to create an 'experiment' in TET cases
45
46 //////////////////////////////////////////////////////////////////
47 } // namespace
48
49
50 int UtcDaliTextViewDefaultConstructorDestructor_PT(void)
51 {
52   ToolkitTestApplication application;
53
54   tet_infoline("UtcDaliTextViewDefaultConstructorDestructor : ");
55
56   TextViewProcessor::TextInfoIndices indices;
57   DALI_TEST_EQUALS( indices.mParagraphIndex, 0u, TEST_LOCATION );
58   DALI_TEST_EQUALS( indices.mWordIndex, 0u, TEST_LOCATION );
59   DALI_TEST_EQUALS( indices.mCharacterIndex, 0u, TEST_LOCATION );
60
61   TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
62   DALI_TEST_EQUALS( characterLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
63   DALI_TEST_EQUALS( characterLayoutInfo.mBearing, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
64   DALI_TEST_EQUALS( characterLayoutInfo.mPosition, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
65   DALI_TEST_EQUALS( characterLayoutInfo.mOffset, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
66   DALI_TEST_EQUALS( characterLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
67   DALI_TEST_EQUALS( characterLayoutInfo.mUnderlineThickness, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
68   DALI_TEST_EQUALS( characterLayoutInfo.mUnderlinePosition, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
69   DALI_TEST_CHECK( !characterLayoutInfo.mGlyphActor );
70   DALI_TEST_CHECK( characterLayoutInfo.mStyledText.mText.IsEmpty() );
71   DALI_TEST_EQUALS( characterLayoutInfo.mColorAlpha, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
72   DALI_TEST_CHECK( NULL == characterLayoutInfo.mGradientInfo );
73   DALI_TEST_CHECK( characterLayoutInfo.mIsVisible );
74   DALI_TEST_CHECK( characterLayoutInfo.mSetText );
75   DALI_TEST_CHECK( characterLayoutInfo.mSetStyle );
76
77   TextViewProcessor::WordLayoutInfo wordLayoutInfo;
78   DALI_TEST_EQUALS( wordLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
79   DALI_TEST_EQUALS( wordLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
80   DALI_TEST_EQUALS( wordLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
81   DALI_TEST_EQUALS( wordLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
82
83   TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo;
84   DALI_TEST_EQUALS( paragraphLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
85   DALI_TEST_EQUALS( paragraphLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
86   DALI_TEST_EQUALS( paragraphLayoutInfo.mLineHeightOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
87   DALI_TEST_EQUALS( paragraphLayoutInfo.mWordsLayoutInfo.size(), 0u, TEST_LOCATION );
88   DALI_TEST_EQUALS( paragraphLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
89
90   TextViewProcessor::TextLayoutInfo textLayoutInfo;
91   DALI_TEST_EQUALS( textLayoutInfo.mWholeTextSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
92   DALI_TEST_EQUALS( textLayoutInfo.mMaxWordWidth, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
93   DALI_TEST_EQUALS( textLayoutInfo.mParagraphsLayoutInfo.size(), 0u, TEST_LOCATION );
94   DALI_TEST_EQUALS( textLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
95   DALI_TEST_EQUALS( textLayoutInfo.mMaxItalicsOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
96   DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
97   DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
98   DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
99   DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
100   END_TEST;
101 }
102
103 int UtcDaliTextViewCopyConstructorOperator(void)
104 {
105   ToolkitTestApplication application;
106
107   tet_infoline("UtcDaliTextViewCopyConstructorOperator : ");
108
109   TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
110   characterLayoutInfo.mSize = Vector2( 1.f, 1.f );
111   characterLayoutInfo.mBearing = 1.f;
112   characterLayoutInfo.mPosition = Vector3( 1.f, 1.f, 1.f );
113   characterLayoutInfo.mOffset = Vector2( 1.f, 1.f );
114   characterLayoutInfo.mAscender = 1.f;
115   characterLayoutInfo.mUnderlineThickness = 1.f;
116   characterLayoutInfo.mUnderlinePosition = 1.f;
117
118   characterLayoutInfo.mGlyphActor = TextActor::New( "Hello" );
119   characterLayoutInfo.mStyledText.mText = Text( "Hello" );
120
121   TextViewProcessor::GradientInfo* info = new TextViewProcessor::GradientInfo();
122   info->mGradientColor = Vector4( 1.f, 1.f, 1.f, 1.f );
123   info->mStartPoint = Vector2( 1.f, 1.f );
124   info->mEndPoint = Vector2( 1.f, 1.f );
125
126   characterLayoutInfo.mColorAlpha = 0.f;
127   characterLayoutInfo.mGradientInfo = info;
128
129   characterLayoutInfo.mIsVisible = false;
130   characterLayoutInfo.mSetText = false;
131   characterLayoutInfo.mSetStyle = false;
132
133   TextViewProcessor::CharacterLayoutInfo characterLayoutInfo1;
134   characterLayoutInfo1 = characterLayoutInfo;
135
136   DALI_TEST_EQUALS( characterLayoutInfo1.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
137   DALI_TEST_EQUALS( characterLayoutInfo1.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
138   DALI_TEST_EQUALS( characterLayoutInfo1.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
139   DALI_TEST_EQUALS( characterLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
140   DALI_TEST_EQUALS( characterLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
141   DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
142   DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
143   DALI_TEST_CHECK( characterLayoutInfo1.mGlyphActor );
144   DALI_TEST_EQUALS( characterLayoutInfo1.mStyledText.mText.GetLength(), 5u, TEST_LOCATION );
145   DALI_TEST_EQUALS( characterLayoutInfo1.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
146   DALI_TEST_EQUALS( characterLayoutInfo1.mGradientInfo->mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
147   DALI_TEST_EQUALS( characterLayoutInfo1.mGradientInfo->mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
148   DALI_TEST_EQUALS( characterLayoutInfo1.mGradientInfo->mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
149   DALI_TEST_CHECK( !characterLayoutInfo1.mIsVisible );
150   DALI_TEST_CHECK( !characterLayoutInfo1.mSetText );
151   DALI_TEST_CHECK( !characterLayoutInfo1.mSetStyle );
152
153   TextViewProcessor::CharacterLayoutInfo characterLayoutInfo2( characterLayoutInfo );
154   DALI_TEST_EQUALS( characterLayoutInfo2.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
155   DALI_TEST_EQUALS( characterLayoutInfo2.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
156   DALI_TEST_EQUALS( characterLayoutInfo2.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
157   DALI_TEST_EQUALS( characterLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
158   DALI_TEST_EQUALS( characterLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
159   DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
160   DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
161   DALI_TEST_CHECK( characterLayoutInfo2.mGlyphActor );
162   DALI_TEST_EQUALS( characterLayoutInfo2.mStyledText.mText.GetLength(), 5u, TEST_LOCATION );
163   DALI_TEST_EQUALS( characterLayoutInfo2.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
164   DALI_TEST_EQUALS( characterLayoutInfo2.mGradientInfo->mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
165   DALI_TEST_EQUALS( characterLayoutInfo2.mGradientInfo->mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
166   DALI_TEST_EQUALS( characterLayoutInfo2.mGradientInfo->mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
167   DALI_TEST_CHECK( !characterLayoutInfo2.mIsVisible );
168   DALI_TEST_CHECK( !characterLayoutInfo2.mSetText );
169   DALI_TEST_CHECK( !characterLayoutInfo2.mSetStyle );
170
171   // Increases coverage.
172   characterLayoutInfo2.mGlyphActor.Reset();
173   characterLayoutInfo1 = characterLayoutInfo2;
174   DALI_TEST_CHECK( !characterLayoutInfo1.mGlyphActor );
175
176   TextViewProcessor::WordLayoutInfo wordLayoutInfo;
177   wordLayoutInfo.mSize = Vector2( 1.f, 1.f );
178   wordLayoutInfo.mAscender = 1.f;
179   wordLayoutInfo.mType = TextViewProcessor::ParagraphSeparator;
180
181   TextViewProcessor::WordLayoutInfo wordLayoutInfo1;
182   wordLayoutInfo1 = wordLayoutInfo;
183
184   DALI_TEST_EQUALS( wordLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
185   DALI_TEST_EQUALS( wordLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
186   DALI_TEST_EQUALS( wordLayoutInfo1.mType, TextViewProcessor::ParagraphSeparator, TEST_LOCATION );
187
188   TextViewProcessor::WordLayoutInfo wordLayoutInfo2( wordLayoutInfo );
189
190   DALI_TEST_EQUALS( wordLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
191   DALI_TEST_EQUALS( wordLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
192   DALI_TEST_EQUALS( wordLayoutInfo2.mType, TextViewProcessor::ParagraphSeparator, TEST_LOCATION );
193
194   TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo;
195   paragraphLayoutInfo.mSize = Vector2( 1.f, 1.f );
196   paragraphLayoutInfo.mAscender = 1.f;
197   paragraphLayoutInfo.mLineHeightOffset = 1.f;
198   paragraphLayoutInfo.mNumberOfCharacters = 1u;
199
200   TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo1;
201   paragraphLayoutInfo1 = paragraphLayoutInfo;
202
203   DALI_TEST_EQUALS( paragraphLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
204   DALI_TEST_EQUALS( paragraphLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
205   DALI_TEST_EQUALS( paragraphLayoutInfo1.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
206   DALI_TEST_EQUALS( paragraphLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
207
208   TextViewProcessor::ParagraphLayoutInfo paragraphLayoutInfo2( paragraphLayoutInfo );
209
210   DALI_TEST_EQUALS( paragraphLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
211   DALI_TEST_EQUALS( paragraphLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
212   DALI_TEST_EQUALS( paragraphLayoutInfo2.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
213   DALI_TEST_EQUALS( paragraphLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
214
215   TextViewProcessor::TextLayoutInfo textLayoutInfo;
216   textLayoutInfo.mWholeTextSize = Vector2( 1.f, 1.f );
217   textLayoutInfo.mMaxWordWidth = 1.f;
218   textLayoutInfo.mNumberOfCharacters = 1u;
219   textLayoutInfo.mMaxItalicsOffset = 1.f;
220
221   TextViewProcessor::TextLayoutInfo textLayoutInfo1;
222   textLayoutInfo1 = textLayoutInfo;
223
224   DALI_TEST_EQUALS( textLayoutInfo1.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
225   DALI_TEST_EQUALS( textLayoutInfo1.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
226   DALI_TEST_EQUALS( textLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
227   DALI_TEST_EQUALS( textLayoutInfo1.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
228
229   TextViewProcessor::TextLayoutInfo textLayoutInfo2( textLayoutInfo );
230
231   DALI_TEST_EQUALS( textLayoutInfo2.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
232   DALI_TEST_EQUALS( textLayoutInfo2.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
233   DALI_TEST_EQUALS( textLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
234   DALI_TEST_EQUALS( textLayoutInfo2.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
235   END_TEST;
236 }
237
238 int UtcDaliTextViewEqualityOperator(void)
239 {
240   ToolkitTestApplication application;
241
242   tet_infoline("UtcDaliTextViewEqualityOperator : ");
243
244   TextViewProcessor::TextInfoIndices indices;
245   TextViewProcessor::TextInfoIndices indices1( 1u, 1u, 1u );
246
247   DALI_TEST_CHECK( !( indices == indices1 ) );
248
249   indices = indices1;
250
251   DALI_TEST_CHECK( indices == indices1 );
252   END_TEST;
253 }