UTC Text Shaping Fix. 34/225934/2
authorVictor Cebollada <v.cebollada@samsung.com>
Mon, 24 Feb 2020 14:36:35 +0000 (14:36 +0000)
committerVictor Cebollada <v.cebollada@samsung.com>
Tue, 25 Feb 2020 15:39:23 +0000 (15:39 +0000)
* The test case was written in the old style that relies
  on the fonts installed on the platform.
  The fix adds the specific fonts to be used.

* In order to pass the test cases locally it might be needed
  to install the following fonts:

  dali-toolkit/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf
  dali-toolkit/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf
  dali-toolkit/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf
  dali-toolkit/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf
  dali-toolkit/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf

* To install the fonts copy the font files to a relevant folder
  i.e ~/.local/share/fonts
  and execute the command fc-cache.

  Alternatively the Font Viewer application or similar can be used in Ubuntu
  to install fonts.

Change-Id: I82271ddb304bd041180dfa6fb3c3f81a5e2c553c
Signed-off-by: Victor Cebollada <v.cebollada@samsung.com>
automated-tests/resources/fonts/noto/LICENSE_OFL.txt [new file with mode: 0644]
automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/LICENSE [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-Bold.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-Italic.ttf [new file with mode: 0644]
automated-tests/resources/fonts/roboto/Roboto-Regular.ttf [new file with mode: 0644]
automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Shaping.cpp

diff --git a/automated-tests/resources/fonts/noto/LICENSE_OFL.txt b/automated-tests/resources/fonts/noto/LICENSE_OFL.txt
new file mode 100644 (file)
index 0000000..d952d62
--- /dev/null
@@ -0,0 +1,92 @@
+This Font Software is licensed under the SIL Open Font License,
+Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font
+creation efforts of academic and linguistic communities, and to
+provide a free and open framework in which fonts may be shared and
+improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply to
+any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software
+components as distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to,
+deleting, or substituting -- in part or in whole -- any of the
+components of the Original Version, by changing formats or by porting
+the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed,
+modify, redistribute, and sell modified and unmodified copies of the
+Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in
+Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the
+corresponding Copyright Holder. This restriction only applies to the
+primary font name as presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created using
+the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf b/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf
new file mode 100644 (file)
index 0000000..be82967
Binary files /dev/null and b/automated-tests/resources/fonts/noto/NotoSansMalayalam-Regular.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/LICENSE b/automated-tests/resources/fonts/roboto/LICENSE
new file mode 100644 (file)
index 0000000..261eeb9
--- /dev/null
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf b/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf
new file mode 100644 (file)
index 0000000..8869666
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-Bold.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf b/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf
new file mode 100644 (file)
index 0000000..f7f845a
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-BoldItalic.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf b/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf
new file mode 100644 (file)
index 0000000..a76d286
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-Italic.ttf differ
diff --git a/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf b/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf
new file mode 100644 (file)
index 0000000..ddee473
Binary files /dev/null and b/automated-tests/resources/fonts/roboto/Roboto-Regular.ttf differ
index 2bdd217..9dd7d57 100755 (executable)
@@ -17,6 +17,7 @@
 
 #include <iostream>
 #include <stdlib.h>
 
 #include <iostream>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include <dali-toolkit/internal/text/shaper.h>
 #include <dali-toolkit-test-suite-utils.h>
 
 #include <dali-toolkit/internal/text/shaper.h>
 #include <dali-toolkit-test-suite-utils.h>
@@ -44,6 +45,7 @@ using namespace Text;
 
 namespace
 {
 
 namespace
 {
+const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
 
 struct GlyphInfoData
 {
 
 struct GlyphInfoData
 {
@@ -130,6 +132,7 @@ bool ShapeInfoTest( const ShapeInfoData& data )
 
   const Vector<FontDescriptionRun> fontDescriptions;
   const LayoutOptions options;
 
   const Vector<FontDescriptionRun> fontDescriptions;
   const LayoutOptions options;
+
   CreateTextModel( data.text,
                    textArea,
                    data.fontDescriptions,
   CreateTextModel( data.text,
                    textArea,
                    data.fontDescriptions,
@@ -236,6 +239,33 @@ bool ShapeInfoTest( const ShapeInfoData& data )
     if( !IsEqualGlyph( data.glyphs[index], glyphs[index] ) )
     {
       std::cout << "  different glyph info, index : " << index << std::endl;
     if( !IsEqualGlyph( data.glyphs[index], glyphs[index] ) )
     {
       std::cout << "  different glyph info, index : " << index << std::endl;
+
+      const GlyphInfo& glyphInfo = glyphs[index];
+      std::cout << "            fontId : " << glyphInfo.fontId << std::endl;
+      std::cout << "             index : " << glyphInfo.index << std::endl;
+      std::cout << "             width : " << glyphInfo.width << std::endl;
+      std::cout << "            height : " << glyphInfo.height << std::endl;
+      std::cout << "          xBearing : " << glyphInfo.xBearing << std::endl;
+      std::cout << "          yBearing : " << glyphInfo.yBearing << std::endl;
+      std::cout << "           advance : " << glyphInfo.advance << std::endl;
+      std::cout << "       scaleFactor : " << glyphInfo.scaleFactor << std::endl;
+      std::cout << "  isItalicRequired : " << glyphInfo.isItalicRequired << std::endl;
+      std::cout << "    isBoldRequired : " << glyphInfo.isBoldRequired << std::endl;
+
+      std::cout << "  Expected : " << std::endl;
+      const GlyphInfoData& expectedGlyphInfo = data.glyphs[index];
+      std::cout << "            fontId : " << expectedGlyphInfo.fontId << std::endl;
+      std::cout << "             index : " << expectedGlyphInfo.index << std::endl;
+      std::cout << "             width : " << expectedGlyphInfo.width << std::endl;
+      std::cout << "            height : " << expectedGlyphInfo.height << std::endl;
+      std::cout << "          xBearing : " << expectedGlyphInfo.xBearing << std::endl;
+      std::cout << "          yBearing : " << expectedGlyphInfo.yBearing << std::endl;
+      std::cout << "           advance : " << expectedGlyphInfo.advance << std::endl;
+      std::cout << "       scaleFactor : " << expectedGlyphInfo.scaleFactor << std::endl;
+      std::cout << "  isItalicRequired : " << expectedGlyphInfo.isItalicRequired << std::endl;
+      std::cout << "    isBoldRequired : " << expectedGlyphInfo.isBoldRequired << std::endl;
+
+
       return false;
     }
   }
       return false;
     }
   }
@@ -276,6 +306,34 @@ bool ShapeInfoTest( const ShapeInfoData& data )
   return true;
 }
 
   return true;
 }
 
+void LoadTextShapeFonts()
+{
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  fontClient.SetDpi( 96u, 96u );
+
+  char* pathNamePtr = get_current_dir_name();
+  const std::string pathName( pathNamePtr );
+  free( pathNamePtr );
+
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/noto/NotoSansMalayalam-Regular.ttf" );
+}
+
+void LoadSoftwareStylingFonts()
+{
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  fontClient.SetDpi( 96u, 96u );
+
+  char* pathNamePtr = get_current_dir_name();
+  const std::string pathName( pathNamePtr );
+  free( pathNamePtr );
+
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Regular.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Bold.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-Italic.ttf" );
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/roboto/Roboto-BoldItalic.ttf" );
+}
+
 } // namespace
 
 //////////////////////////////////////////////////////////
 } // namespace
 
 //////////////////////////////////////////////////////////
@@ -286,17 +344,17 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs02[] =
   {
 
   struct GlyphInfoData glyphs02[] =
   {
-    { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
+    { 1u, 276u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 317u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
   };
 
   CharacterIndex characterIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
   };
 
   CharacterIndex characterIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
@@ -304,23 +362,23 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs03[] =
   {
 
   struct GlyphInfoData glyphs03[] =
   {
-    { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
+    { 1u, 276u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 317u, 0.f, 0.f, 0.f, 0.f, 11.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u,   0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
   };
 
   CharacterIndex characterIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u };
   };
 
   CharacterIndex characterIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u };
@@ -329,18 +387,18 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs04[] =
   {
 
   struct GlyphInfoData glyphs04[] =
   {
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1693u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1721u, 0.f, 0.f, 0.f, 0.f, 20.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1722u, 0.f, 0.f, 0.f, 0.f, 18.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1733u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 2u, 1718u, 0.f, 0.f, 0.f, 0.f, 14.f, 0.f },
-    { 2u, 1725u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 27u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 55u, 0.f, 0.f, 0.f, 0.f, 19.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 56u, 0.f, 0.f, 0.f, 0.f, 19.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 2u, 67u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 2u, 52u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
+    { 2u, 59u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
   };
 
   CharacterIndex characterIndices04[] = { 0u, 0u, 0u, 2u, 2u, 2u, 4u, 4u, 4u, 6u, 6u, 6u };
   };
 
   CharacterIndex characterIndices04[] = { 0u, 0u, 0u, 2u, 2u, 2u, 4u, 4u, 4u, 6u, 6u, 6u };
@@ -348,79 +406,79 @@ int UtcDaliTextShape(void)
 
   struct GlyphInfoData glyphs05[] =
   {
 
   struct GlyphInfoData glyphs05[] =
   {
-    { 1u, 47u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 79u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 87u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 87u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u, 280u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 310u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 306u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 314u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 314u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 84u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 5039u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 69u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 311u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 403u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 308u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 296u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
-    { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 82u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 86u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 85u, 0.f, 0.f, 0.f, 0.f,  6.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u, 70u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 76u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
-    { 1u, 68u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 72u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
-    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
-    { 1u, 70u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
-    { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
-    { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
-    { 1u, 17u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
+    { 1u, 310u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 309u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 313u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 312u, 0.f, 0.f, 0.f, 0.f,  5.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 297u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 308u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 298u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 303u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 295u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 308u, 0.f, 0.f, 0.f, 0.f,  9.f, 0.f },
+    { 1u, 299u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u,  3u, 0.f, 0.f, 0.f, 0.f,  4.f, 0.f },
+    { 1u, 297u, 0.f, 0.f, 0.f, 0.f,  7.f, 0.f },
+    { 1u, 315u, 0.f, 0.f, 0.f, 0.f,  8.f, 0.f },
+    { 1u, 307u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
+    { 1u,  4u, 0.f, 0.f, 0.f, 0.f,  3.f, 0.f },
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
   };
 
     { 1u,  0u, 0.f, 0.f, 0.f, 0.f,  0.f, 0.f },
   };
 
@@ -444,6 +502,160 @@ int UtcDaliTextShape(void)
   CharacterIndex newParagraphGlyphs06[] = { 49u };
   CharacterIndex newParagraphGlyphs07[] = { 73u };
 
   CharacterIndex newParagraphGlyphs06[] = { 49u };
   CharacterIndex newParagraphGlyphs07[] = { 73u };
 
+  Vector<FontDescriptionRun> fontDescriptions01;
+  Vector<FontDescriptionRun> fontDescriptions02;
+  Vector<FontDescriptionRun> fontDescriptions03;
+  Vector<FontDescriptionRun> fontDescriptions04;
+  Vector<FontDescriptionRun> fontDescriptions05;
+  Vector<FontDescriptionRun> fontDescriptions06;
+
+  const std::string fontFamily( "TizenSans" );
+  const std::string fontFamilyMalayalam( "Noto Sans Malayalam" );
+
+  FontDescriptionRun fontDescriptionRun01 =
+  {
+    {
+      0u,
+      11u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    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,
+      17u
+    },
+    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 );
+
+  fontDescriptions02.PushBack( fontDescriptionRun02 );
+
+  FontDescriptionRun fontDescriptionRun03 =
+  {
+    {
+      0u,
+      8u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun03.familyLength = fontFamilyMalayalam.size();
+  fontDescriptionRun03.familyName = new char[fontDescriptionRun03.familyLength];
+  memcpy( fontDescriptionRun03.familyName, fontFamilyMalayalam.c_str(), fontDescriptionRun03.familyLength );
+
+  fontDescriptions03.PushBack( fontDescriptionRun03 );
+
+  FontDescriptionRun fontDescriptionRun04 =
+  {
+    {
+      0u,
+      75u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun04.familyLength = fontFamily.size();
+  fontDescriptionRun04.familyName = new char[fontDescriptionRun04.familyLength];
+  memcpy( fontDescriptionRun04.familyName, fontFamily.c_str(), fontDescriptionRun04.familyLength );
+
+  fontDescriptions04.PushBack( fontDescriptionRun04 );
+
+  FontDescriptionRun fontDescriptionRun05 =
+  {
+    {
+      0u,
+      75u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun05.familyLength = fontFamily.size();
+  fontDescriptionRun05.familyName = new char[fontDescriptionRun05.familyLength];
+  memcpy( fontDescriptionRun05.familyName, fontFamily.c_str(), fontDescriptionRun05.familyLength );
+
+  fontDescriptions05.PushBack( fontDescriptionRun05 );
+
+  FontDescriptionRun fontDescriptionRun06 =
+  {
+    {
+      0u,
+      75u
+    },
+    nullptr,
+    0u,
+    TextAbstraction::FontWeight::NONE,
+    TextAbstraction::FontWidth::NONE,
+    TextAbstraction::FontSlant::NONE,
+    TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
+    false,
+    false,
+    false,
+    false
+  };
+  fontDescriptionRun06.familyLength = fontFamily.size();
+  fontDescriptionRun06.familyName = new char[fontDescriptionRun06.familyLength];
+  memcpy( fontDescriptionRun06.familyName, fontFamily.c_str(), fontDescriptionRun06.familyLength );
+
+  fontDescriptions06.PushBack( fontDescriptionRun06 );
+
   struct ShapeInfoData data[] =
   {
     {
   struct ShapeInfoData data[] =
   {
     {
@@ -452,11 +664,11 @@ int UtcDaliTextShape(void)
       0u,
       0u,
       0u,
       0u,
       0u,
       0u,
-      NULL,
-      NULL,
-      NULL,
+      nullptr,
+      nullptr,
+      nullptr,
       0u,
       0u,
-      NULL
+      nullptr
     },
     {
       "Latin script",
     },
     {
       "Latin script",
@@ -468,7 +680,8 @@ int UtcDaliTextShape(void)
       characterIndices02,
       charactersPerGlyph02,
       0u,
       characterIndices02,
       charactersPerGlyph02,
       0u,
-      NULL
+      nullptr,
+      fontDescriptions01
     },
     {
       "Latin script. Some paragraphs.",
     },
     {
       "Latin script. Some paragraphs.",
@@ -480,7 +693,8 @@ int UtcDaliTextShape(void)
       characterIndices03,
       charactersPerGlyph03,
       2u,
       characterIndices03,
       charactersPerGlyph03,
       2u,
-      newParagraphGlyphs03
+      newParagraphGlyphs03,
+      fontDescriptions02
     },
     {
       "Malayalam script. More glyphs than characters.",
     },
     {
       "Malayalam script. More glyphs than characters.",
@@ -492,7 +706,8 @@ int UtcDaliTextShape(void)
       characterIndices04,
       charactersPerGlyph04,
       0u,
       characterIndices04,
       charactersPerGlyph04,
       0u,
-      NULL
+      nullptr,
+      fontDescriptions03
     },
     {
       "Latin script with some paragraphs. Update initial paragraph.",
     },
     {
       "Latin script with some paragraphs. Update initial paragraph.",
@@ -504,7 +719,8 @@ int UtcDaliTextShape(void)
       characterIndices05,
       charactersPerGlyph05,
       1u,
       characterIndices05,
       charactersPerGlyph05,
       1u,
-      newParagraphGlyphs05
+      newParagraphGlyphs05,
+      fontDescriptions04
     },
     {
       "Latin script with some paragraphs. Update mid paragraph.",
     },
     {
       "Latin script with some paragraphs. Update mid paragraph.",
@@ -516,7 +732,8 @@ int UtcDaliTextShape(void)
       characterIndices05,
       charactersPerGlyph05,
       1u,
       characterIndices05,
       charactersPerGlyph05,
       1u,
-      newParagraphGlyphs06
+      newParagraphGlyphs06,
+      fontDescriptions05
     },
     {
       "Latin script with some paragraphs. Update final paragraph.",
     },
     {
       "Latin script with some paragraphs. Update final paragraph.",
@@ -528,7 +745,8 @@ int UtcDaliTextShape(void)
       characterIndices05,
       charactersPerGlyph05,
       1u,
       characterIndices05,
       charactersPerGlyph05,
       1u,
-      newParagraphGlyphs07
+      newParagraphGlyphs07,
+      fontDescriptions06
     },
   };
   const unsigned int numberOfTests = 7u;
     },
   };
   const unsigned int numberOfTests = 7u;
@@ -536,6 +754,8 @@ int UtcDaliTextShape(void)
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
     ToolkitTestApplication application;
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
     ToolkitTestApplication application;
+    LoadTextShapeFonts();
+
     if( !ShapeInfoTest( data[index] ) )
     {
       tet_result(TET_FAIL);
     if( !ShapeInfoTest( data[index] ) )
     {
       tet_result(TET_FAIL);
@@ -552,41 +772,49 @@ int UtcDaliTextSoftwareStyling(void)
 
   struct GlyphInfoData glyphs01[] =
   {
 
   struct GlyphInfoData glyphs01[] =
   {
-    { 2u, 21154u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
-    { 2u, 12298u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
-    { 2u, 17828u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
+    { 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[] =
   {
   };
   struct GlyphInfoData glyphs02[] =
   {
-    { 2u, 21154u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, false },
-    { 2u, 12298u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, true },
-    { 2u, 17828u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true,  false },
+    { 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 };
-  Length charactersPerGlyph[] = { 1u, 1u, 1u };
+  CharacterIndex characterIndices[] = { 0u, 1u, 2u, 3u };
+  Length charactersPerGlyph[] = { 1u, 1u, 1u, 1u };
 
   Vector<FontDescriptionRun> fontDescriptions01;
   Vector<FontDescriptionRun> fontDescriptions02;
 
 
   Vector<FontDescriptionRun> fontDescriptions01;
   Vector<FontDescriptionRun> fontDescriptions02;
 
+  const std::string fontFamily( "Roboto" );
+
   FontDescriptionRun fontDescriptionRun01 =
   {
     {
       0u,
   FontDescriptionRun fontDescriptionRun01 =
   {
     {
       0u,
-      3u
+      4u
     },
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::BOLD,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     0u,
     TextAbstraction::FontWeight::BOLD,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
-    false,
+    true,
     true,
     false,
     true,
     false
   };
     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 =
   fontDescriptions01.PushBack(fontDescriptionRun01);
 
   FontDescriptionRun fontDescriptionRun02 =
@@ -595,86 +823,120 @@ int UtcDaliTextSoftwareStyling(void)
       0u,
       1u
     },
       0u,
       1u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     0u,
     TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
-    false,
+    true,
     false,
     false,
     false,
     false
   };
     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
     },
   FontDescriptionRun fontDescriptionRun03 =
   {
     {
       1u,
       1u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::BOLD,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     0u,
     TextAbstraction::FontWeight::BOLD,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::NONE,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
-    false,
+    true,
     true,
     false,
     false,
     false
   };
     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
     },
   FontDescriptionRun fontDescriptionRun04 =
   {
     {
       2u,
       1u
     },
-    NULL,
+    nullptr,
     0u,
     TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
     0u,
     TextAbstraction::FontWeight::NONE,
     TextAbstraction::FontWidth::NONE,
     TextAbstraction::FontSlant::ITALIC,
     TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
+    true,
     false,
     false,
     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
   };
     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(fontDescriptionRun02);
   fontDescriptions02.PushBack(fontDescriptionRun03);
   fontDescriptions02.PushBack(fontDescriptionRun04);
+  fontDescriptions02.PushBack(fontDescriptionRun05);
 
 
   struct ShapeInfoData data[] =
   {
     {
 
 
   struct ShapeInfoData data[] =
   {
     {
-      "Chiness script. Characters have same font description",
-      "未取得",
+      "Latin script. Characters have same font description",
+      "ABCD",
       0u,
       0u,
-      3u,
-      3u,
+      4u,
+      4u,
       glyphs01,
       characterIndices,
       charactersPerGlyph,
       0u,
       glyphs01,
       characterIndices,
       charactersPerGlyph,
       0u,
-      NULL,
+      nullptr,
       fontDescriptions01
     },
     {
       fontDescriptions01
     },
     {
-      "Chiness script. Each character has different font description.",
-      "未取得",
+      "Latin script. Each character has different font description.",
+      "ABCD",
       0u,
       0u,
-      3u,
-      3u,
+      4u,
+      4u,
       glyphs02,
       characterIndices,
       charactersPerGlyph,
       0u,
       glyphs02,
       characterIndices,
       charactersPerGlyph,
       0u,
-      NULL,
+      nullptr,
       fontDescriptions02
     }
   };
       fontDescriptions02
     }
   };
@@ -684,6 +946,8 @@ int UtcDaliTextSoftwareStyling(void)
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
     ToolkitTestApplication application;
   for( unsigned int index = 0u; index < numberOfTests; ++index )
   {
     ToolkitTestApplication application;
+    LoadSoftwareStylingFonts();
+
     if( !ShapeInfoTest( data[index] ) )
     {
       tet_result(TET_FAIL);
     if( !ShapeInfoTest( data[index] ) )
     {
       tet_result(TET_FAIL);