2 * Copyright (c) 2022 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.
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <dali-toolkit/internal/text/layouts/layout-engine.h>
25 #include <dali-toolkit/internal/text/layouts/layout-parameters.h>
26 #include <dali-toolkit/internal/text/text-run-container.h>
27 #include <toolkit-text-utils.h>
30 using namespace Toolkit;
35 const std::string DEFAULT_FONT_DIR("/resources/fonts");
41 unsigned int numberOfFonts;
42 FontDescriptionRun* fontDescriptions;
43 unsigned int numberOfLines;
45 Layout::Engine::Type layout;
46 unsigned int startIndex;
47 unsigned int numberOfGlyphs;
48 Text::LineWrap::Mode wrapMode;
51 void Print(const LineRun& line)
53 std::cout << " glyph run, index : " << line.glyphRun.glyphIndex << ", num glyphs : " << line.glyphRun.numberOfGlyphs << std::endl;
54 std::cout << " character run, index : " << line.characterRun.characterIndex << ", num chars : " << line.characterRun.numberOfCharacters << std::endl;
57 bool LayoutTextTest(const LayoutTextData& data)
60 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
61 fontClient.SetDpi(96u, 96u);
63 char* pathNamePtr = get_current_dir_name();
64 const std::string pathName(pathNamePtr);
67 fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf");
69 // 1) Create the model.
74 Vector<FontDescriptionRun> fontDescriptionRuns;
75 if(0u != data.numberOfFonts)
77 fontDescriptionRuns.Insert(fontDescriptionRuns.End(),
78 data.fontDescriptions,
79 data.fontDescriptions + data.numberOfFonts);
82 LayoutOptions options;
83 options.align = false;
84 CreateTextModel(data.text,
94 Toolkit::DevelText::EllipsisPosition::END,
96 0.0f // characterSpacing
99 Vector<LineRun>& lines = textModel->mVisualModel->mLines;
101 // 4) Compare the results.
103 if(lines.Count() != data.numberOfLines)
105 std::cout << " Different number of lines : " << lines.Count() << ", expected : " << data.numberOfLines << std::endl;
109 for(unsigned int index = 0u; index < data.numberOfLines; ++index)
111 const LineRun& line = *(lines.Begin() + index);
112 const LineRun& expectedLine = *(data.lines + index);
114 if(line.characterRun.characterIndex != expectedLine.characterRun.characterIndex)
116 std::cout << " Different line info for line : " << index << std::endl;
118 std::cout << " expected" << std::endl;
122 if(line.characterRun.numberOfCharacters != expectedLine.characterRun.numberOfCharacters)
124 std::cout << " Different line info for line : " << index << std::endl;
126 std::cout << " expected" << std::endl;
137 int UtcDaliTextHyphenWrapping(void)
139 ToolkitTestApplication application;
140 tet_infoline(" UtcDaliTextHyphenWrapping");
142 // Layout some lines of left to right text.
144 const std::string fontFamily("TizenSans");
146 // Set a known font description
147 FontDescriptionRun fontDescriptionRun1;
148 fontDescriptionRun1.characterRun.characterIndex = 0u;
149 fontDescriptionRun1.characterRun.numberOfCharacters = 13u;
150 fontDescriptionRun1.familyLength = fontFamily.size();
151 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
152 memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
153 fontDescriptionRun1.familyDefined = true;
154 fontDescriptionRun1.weightDefined = false;
155 fontDescriptionRun1.widthDefined = false;
156 fontDescriptionRun1.slantDefined = false;
157 fontDescriptionRun1.sizeDefined = false;
159 Vector<FontDescriptionRun> fontDescriptionRuns;
160 fontDescriptionRuns.PushBack(fontDescriptionRun1);
161 Size textArea(65.0f, 200.f);
188 Vector<LineRun> lines;
189 lines.PushBack(line1);
190 lines.PushBack(line2);
192 LayoutTextData data =
197 fontDescriptionRuns.Begin(),
200 Layout::Engine::MULTI_LINE_BOX,
203 (Text::LineWrap::Mode)DevelText::LineWrap::HYPHENATION};
205 if(!LayoutTextTest(data))
207 tet_result(TET_FAIL);
210 tet_result(TET_PASS);
214 int UtcDaliTextMixedWrapping(void)
216 ToolkitTestApplication application;
217 tet_infoline(" UtcDaliTextMixedWrapping");
219 // Layout some lines of left to right text.
221 const std::string fontFamily("DejaVuSans");
223 // Set a known font description
224 FontDescriptionRun fontDescriptionRun1;
225 fontDescriptionRun1.characterRun.characterIndex = 0u;
226 fontDescriptionRun1.characterRun.numberOfCharacters = 13u;
227 fontDescriptionRun1.familyLength = fontFamily.size();
228 fontDescriptionRun1.familyName = new char[fontDescriptionRun1.familyLength];
229 memcpy(fontDescriptionRun1.familyName, fontFamily.c_str(), fontDescriptionRun1.familyLength);
230 fontDescriptionRun1.familyDefined = true;
231 fontDescriptionRun1.weightDefined = false;
232 fontDescriptionRun1.widthDefined = false;
233 fontDescriptionRun1.slantDefined = false;
234 fontDescriptionRun1.sizeDefined = false;
236 Vector<FontDescriptionRun> fontDescriptionRuns;
237 fontDescriptionRuns.PushBack(fontDescriptionRun1);
238 Size textArea(72.0f, 200.f);
277 Vector<LineRun> lines;
278 lines.PushBack(line1);
279 lines.PushBack(line2);
280 lines.PushBack(line3);
282 LayoutTextData data =
287 fontDescriptionRuns.Begin(),
290 Layout::Engine::MULTI_LINE_BOX,
293 (Text::LineWrap::Mode)DevelText::LineWrap::MIXED};
295 if(!LayoutTextTest(data))
297 tet_result(TET_FAIL);
300 tet_result(TET_PASS);