+ LoadTextShapeFonts();
+
+ if( !ShapeInfoTest( data[index] ) )
+ {
+ tet_result(TET_FAIL);
+ }
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
+int UtcDaliTextSoftwareStyling(void)
+{
+ tet_infoline(" UtcDaliTextSoftwareStyling");
+
+ struct GlyphInfoData glyphs01[] =
+ {
+ { 4u, 38u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
+ { 4u, 39u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f, true, true },
+ { 4u, 40u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
+ { 4u, 41u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
+ };
+ struct GlyphInfoData glyphs02[] =
+ {
+ { 1u, 38u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, false, false },
+ { 2u, 39u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, false, true },
+ { 3u, 40u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, false },
+ { 4u, 41u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f, true, true },
+ };
+
+ CharacterIndex characterIndices[] = { 0u, 1u, 2u, 3u };
+ Length charactersPerGlyph[] = { 1u, 1u, 1u, 1u };
+
+ Vector<FontDescriptionRun> fontDescriptions01;
+ Vector<FontDescriptionRun> fontDescriptions02;
+
+ const std::string fontFamily( "Roboto" );
+
+ FontDescriptionRun fontDescriptionRun01 =
+ {
+ {
+ 0u,
+ 4u
+ },
+ nullptr,
+ 0u,
+ TextAbstraction::FontWeight::BOLD,
+ TextAbstraction::FontWidth::NONE,
+ TextAbstraction::FontSlant::ITALIC,
+ TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+ true,
+ true,
+ false,
+ true,
+ false
+ };
+ fontDescriptionRun01.familyLength = fontFamily.size();
+ fontDescriptionRun01.familyName = new char[fontDescriptionRun01.familyLength];
+ memcpy( fontDescriptionRun01.familyName, fontFamily.c_str(), fontDescriptionRun01.familyLength );
+
+ fontDescriptions01.PushBack(fontDescriptionRun01);
+
+ FontDescriptionRun fontDescriptionRun02 =
+ {
+ {
+ 0u,
+ 1u
+ },
+ nullptr,
+ 0u,
+ TextAbstraction::FontWeight::NONE,
+ TextAbstraction::FontWidth::NONE,
+ TextAbstraction::FontSlant::NONE,
+ TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+ true,
+ false,
+ false,
+ false,
+ false
+ };
+ fontDescriptionRun02.familyLength = fontFamily.size();
+ fontDescriptionRun02.familyName = new char[fontDescriptionRun02.familyLength];
+ memcpy( fontDescriptionRun02.familyName, fontFamily.c_str(), fontDescriptionRun02.familyLength );
+
+ FontDescriptionRun fontDescriptionRun03 =
+ {
+ {
+ 1u,
+ 1u
+ },
+ nullptr,
+ 0u,
+ TextAbstraction::FontWeight::BOLD,
+ TextAbstraction::FontWidth::NONE,
+ TextAbstraction::FontSlant::NONE,
+ TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+ true,
+ true,
+ false,
+ false,
+ false
+ };
+ fontDescriptionRun03.familyLength = fontFamily.size();
+ fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+ memcpy( fontDescriptionRun03.familyName, fontFamily.c_str(), fontDescriptionRun03.familyLength );
+
+ FontDescriptionRun fontDescriptionRun04 =
+ {
+ {
+ 2u,
+ 1u
+ },
+ nullptr,
+ 0u,
+ TextAbstraction::FontWeight::NONE,
+ TextAbstraction::FontWidth::NONE,
+ TextAbstraction::FontSlant::ITALIC,
+ TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+ true,
+ false,
+ false,
+ true,
+ false
+ };
+ fontDescriptionRun04.familyLength = fontFamily.size();
+ fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+ memcpy( fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength );
+
+ FontDescriptionRun fontDescriptionRun05 =
+ {
+ {
+ 3u,
+ 1u
+ },
+ nullptr,
+ 0u,
+ TextAbstraction::FontWeight::BOLD,
+ TextAbstraction::FontWidth::NONE,
+ TextAbstraction::FontSlant::ITALIC,
+ TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+ true,
+ true,
+ false,
+ true,
+ false
+ };
+ fontDescriptionRun05.familyLength = fontFamily.size();
+ fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+ memcpy( fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength );
+
+ fontDescriptions02.PushBack(fontDescriptionRun02);
+ fontDescriptions02.PushBack(fontDescriptionRun03);
+ fontDescriptions02.PushBack(fontDescriptionRun04);
+ fontDescriptions02.PushBack(fontDescriptionRun05);
+
+
+ struct ShapeInfoData data[] =
+ {
+ {
+ "Latin script. Characters have same font description",
+ "ABCD",
+ 0u,
+ 4u,
+ 4u,
+ glyphs01,
+ characterIndices,
+ charactersPerGlyph,
+ 0u,
+ nullptr,
+ false,
+ fontDescriptions01
+ },
+ {
+ "Latin script. Each character has different font description.",
+ "ABCD",
+ 0u,
+ 4u,
+ 4u,
+ glyphs02,
+ characterIndices,
+ charactersPerGlyph,
+ 0u,
+ nullptr,
+ false,
+ fontDescriptions02
+ }
+ };
+
+ const unsigned int numberOfTests = 2u;
+
+ for( unsigned int index = 0u; index < numberOfTests; ++index )
+ {
+ ToolkitTestApplication application;
+ LoadSoftwareStylingFonts();
+
+ if( !ShapeInfoTest( data[index] ) )
+ {
+ tet_result(TET_FAIL);
+ }
+ }
+
+ tet_result(TET_PASS);
+ END_TEST;
+}
+
+
+int UtcDaliTextShapeEmojiSequences(void)
+{
+
+ ToolkitTestApplication application;
+
+ tet_infoline(" UtcDaliTextShapeEmojiSequences");
+
+ const std::string colorFontFamily( "NotoColorEmoji" );
+ const std::string textFontFamily( "DejaVuSans" );
+
+ LoadEmojiFonts();
+
+ //Common attributes for font Descriptions
+ CharacterRun characterRun = {0u, 2u};
+ FontWeight weight = TextAbstraction::FontWeight::NORMAL;
+ FontWidth width = TextAbstraction::FontWidth::NORMAL;
+ FontSlant slant = TextAbstraction::FontSlant::ITALIC;
+ PointSize26Dot6 size = TextAbstraction::FontClient::DEFAULT_POINT_SIZE;
+
+ bool familyDefined = true;
+ bool weightDefined = false;
+ bool widthDefined = false;
+ bool slantDefined = false;
+ bool sizeDefined = false;
+
+
+ // variation selector 16 (Emoji)
+ struct GlyphInfoData glyphsVS16[] =
+ {
+ { 2u, 74u, 0.f, 0.f, 0.f, 0.f, 39.0f, 0.f, false, false },
+ };
+ CharacterIndex characterIndicesVS16[] = { 0u, 1u};
+ Length charactersPerGlyphVS16[] = { 2u };
+
+
+
+ // variation selector 15 (Text)
+ struct GlyphInfoData glyphsVS15[] =
+ {
+ { 1u, 3842u, 0.f, 0.f, 0.f, 0.f, 14.0f, 0.f, false, false },
+ { 1u, 8203u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, false, false },
+ };
+ CharacterIndex characterIndicesVS15[] = { 0u, 0u};
+ Length charactersPerGlyphVS15[] = { 0u, 2u };
+
+ //Font Descriptions
+ Vector<FontDescriptionRun> fontDescriptionsColorVS16 =
+ CreateSingleFontDescription (characterRun, colorFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+ Vector<FontDescriptionRun> fontDescriptionsColorVS15 =
+ CreateSingleFontDescription (characterRun, colorFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+ Vector<FontDescriptionRun> fontDescriptionsTextVS16 =
+ CreateSingleFontDescription (characterRun, textFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+ Vector<FontDescriptionRun> fontDescriptionsTextVS15 =
+ CreateSingleFontDescription (characterRun, textFontFamily, weight, width,
+ slant, size, familyDefined, weightDefined, widthDefined, slantDefined, sizeDefined);
+
+
+ struct ShapeInfoData data[] =
+ {
+ {
+ "EMOJI Sequence: Color Font with VS16",
+ "☪️",
+ 0u,
+ 2u,
+ 1u,
+ glyphsVS16,
+ characterIndicesVS16,
+ charactersPerGlyphVS16,
+ 0u,
+ nullptr,
+ true,
+ fontDescriptionsColorVS16
+ },
+ {
+ "EMOJI Sequence: Color Font with VS15",
+ "☪︎",
+ 0u,
+ 2u,
+ 2u,
+ glyphsVS15,
+ characterIndicesVS15,
+ charactersPerGlyphVS15,
+ 0u,
+ nullptr,
+ true,
+ fontDescriptionsColorVS15
+ },
+ {
+ "EMOJI Sequence: Text Font with VS16",
+ "☪️",
+ 0u,
+ 2u,
+ 1u,
+ glyphsVS16,
+ characterIndicesVS16,
+ charactersPerGlyphVS16,
+ 0u,
+ nullptr,
+ true,
+ fontDescriptionsTextVS16
+ },
+ {
+ "EMOJI Sequence: Text Font with VS15",
+ "☪︎",
+ 0u,
+ 2u,
+ 2u,
+ glyphsVS15,
+ characterIndicesVS15,
+ charactersPerGlyphVS15,
+ 0u,
+ nullptr,
+ true,
+ fontDescriptionsTextVS15
+ },
+ };
+
+ const unsigned int numberOfTests = 4u;
+
+ for( unsigned int index = 0u; index < numberOfTests; ++index )
+ {
+ tet_infoline( data[index].description.c_str());