[SRUK] Initial copy from Tizen 2.2 version
authorPaul Wisbey <p.wisbey@samsung.com>
Mon, 3 Mar 2014 19:04:23 +0000 (19:04 +0000)
committerPaul Wisbey <p.wisbey@samsung.com>
Mon, 3 Mar 2014 19:04:28 +0000 (19:04 +0000)
Signed-off-by: Paul Wisbey <p.wisbey@samsung.com>
Change-Id: I1088d752201827b02c6b83015c00ff158f58e2ad

658 files changed:
.gitignore [new file with mode: 0644]
LICENSE [new file with mode: 0644]
automated-tests/.gitignore [new file with mode: 0644]
automated-tests/_export_desktop.sh [new file with mode: 0644]
automated-tests/_export_env.sh [new file with mode: 0755]
automated-tests/_export_sbs.sh [new file with mode: 0644]
automated-tests/_export_target_env.sh [new file with mode: 0755]
automated-tests/build.sh [new file with mode: 0755]
automated-tests/build_out.sh [new file with mode: 0755]
automated-tests/coverage.mk [new file with mode: 0644]
automated-tests/coverage.sh [new file with mode: 0755]
automated-tests/dali-internal-test-suite/master-makefile.mk [new file with mode: 0644]
automated-tests/dali-internal-test-suite/tc-gen.sh [new symlink]
automated-tests/dali-internal-test-suite/text-input/.gitignore [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-input/Makefile [new symlink]
automated-tests/dali-internal-test-suite/text-input/file.list [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-input/tslist [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-input/utc-Dali-TextInput.cpp [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/.gitignore [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/Makefile [new symlink]
automated-tests/dali-internal-test-suite/text-view/file.list [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/tslist [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-HelperAndDebug.cpp [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor-Types.cpp [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor.cpp [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Relayout-Utilities.cpp [new file with mode: 0644]
automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView.cpp [new file with mode: 0644]
automated-tests/dali-internal-test-suite/utc-MODULE-CLASS.cpp.in [new file with mode: 0644]
automated-tests/dali-test-suite/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/alignment/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/alignment/Makefile [new symlink]
automated-tests/dali-test-suite/alignment/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/alignment/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/alignment/utc-Dali-Alignment.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/bubble-emitter/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/bubble-emitter/Makefile [new symlink]
automated-tests/dali-test-suite/bubble-emitter/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/bubble-emitter/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/bubble-emitter/utc-Dali-BubbleEmitter.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/builder/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/builder/Makefile [new symlink]
automated-tests/dali-test-suite/builder/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/builder/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/builder/utc-Dali-Builder.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/builder/utc-Dali-JsonParser.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/buttons/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/buttons/Makefile [new symlink]
automated-tests/dali-test-suite/buttons/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/buttons/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/buttons/utc-Dali-Button.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/buttons/utc-Dali-CheckBoxButton.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/buttons/utc-Dali-PushButton.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/cluster/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/cluster/Makefile [new symlink]
automated-tests/dali-test-suite/cluster/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/cluster/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/cluster/utc-Dali-Cluster.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/control/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/control/Makefile [new symlink]
automated-tests/dali-test-suite/control/dummy-control.h [new file with mode: 0644]
automated-tests/dali-test-suite/control/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/control/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/control/utc-Dali-Control.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/control/utc-Dali-ControlImpl.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/default-controls/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/default-controls/Makefile [new symlink]
automated-tests/dali-test-suite/default-controls/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/default-controls/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/default-controls/utc-Dali-DefaultControls.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/focus-manager/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/focus-manager/Makefile [new symlink]
automated-tests/dali-test-suite/focus-manager/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/focus-manager/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/focus-manager/utc-Dali-FocusManager.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/focus-manager/utc-Dali-KeyInputFocusManager.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/focus-manager/utc-Dali-KeyboardFocusManager.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/Makefile [new symlink]
automated-tests/dali-test-suite/item-view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-AlbumLayout.cpp [new file with mode: 0755]
automated-tests/dali-test-suite/item-view/utc-Dali-DepthLayout.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-GridLayout.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-ItemLayout.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-ItemView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-NavigationLayout.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-RollLayout.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/item-view/utc-Dali-SpiralLayout.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/master-makefile.mk [new file with mode: 0644]
automated-tests/dali-test-suite/navigation-frame/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/navigation-frame/Makefile [new symlink]
automated-tests/dali-test-suite/navigation-frame/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/navigation-frame/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/navigation-frame/utc-Dali-NavigationControl.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/navigation-frame/utc-Dali-Page.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/page-turn-view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/page-turn-view/Makefile [new symlink]
automated-tests/dali-test-suite/page-turn-view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/page-turn-view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/page-turn-view/utc-Dali-PageTurnView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/popup/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/popup/Makefile [new symlink]
automated-tests/dali-test-suite/popup/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/popup/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/popup/utc-Dali-Popup.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/scroll-view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/scroll-view/Makefile [new symlink]
automated-tests/dali-test-suite/scroll-view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/scroll-view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/scroll-view/utc-Dali-ScrollView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/scroll-view/utc-Dali-ScrollViewEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/selectors/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/selectors/Makefile [new symlink]
automated-tests/dali-test-suite/selectors/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/selectors/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/selectors/utc-Dali-RotatingSelector.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/Makefile [new symlink]
automated-tests/dali-test-suite/shader-effects/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-BendyEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-BlindEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-BloomView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-CarouselEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-DisplacementEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-DissolveEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-DistanceFieldEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-GaussianBlurView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-IrisEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-MaskEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-NinePatchMaskEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-OverlayEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-PageTurnEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-Ripple2DEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-RippleEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-ShadowView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-ShearEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-SoftButtonEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-SpotEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-SquareDissolveEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-SwirlEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/shader-effects/utc-Dali-WaterEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/slider/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/slider/Makefile [new symlink]
automated-tests/dali-test-suite/slider/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/slider/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/slider/utc-Dali-Slider.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/super-blur-view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/super-blur-view/Makefile [new symlink]
automated-tests/dali-test-suite/super-blur-view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/super-blur-view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/super-blur-view/utc-Dali-SuperBlurView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/table-view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/table-view/Makefile [new symlink]
automated-tests/dali-test-suite/table-view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/table-view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/table-view/utc-Dali-TableView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/tc-gen.sh [new file with mode: 0755]
automated-tests/dali-test-suite/text-input/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/text-input/Makefile [new symlink]
automated-tests/dali-test-suite/text-input/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/text-input/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/text-input/utc-Dali-TextInput.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/text-view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/text-view/Makefile [new symlink]
automated-tests/dali-test-suite/text-view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/text-view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/text-view/utc-Dali-MarkupProcessor.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/text-view/utc-Dali-TextView.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/toolbar/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/toolbar/Makefile [new symlink]
automated-tests/dali-test-suite/toolbar/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/toolbar/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/toolbar/utc-Dali-ToolBar.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/transition-effects/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/transition-effects/Makefile [new symlink]
automated-tests/dali-test-suite/transition-effects/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/transition-effects/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/transition-effects/utc-Dali-CubeTransitionEffect.cpp [new file with mode: 0644]
automated-tests/dali-test-suite/ui-builder/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/ui-builder/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/utc-MODULE-CLASS.cpp.in [new file with mode: 0644]
automated-tests/dali-test-suite/view/.gitignore [new file with mode: 0644]
automated-tests/dali-test-suite/view/Makefile [new symlink]
automated-tests/dali-test-suite/view/file.list [new file with mode: 0644]
automated-tests/dali-test-suite/view/tslist [new file with mode: 0644]
automated-tests/dali-test-suite/view/utc-Dali-View.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/dali-toolkit-test-suite-utils.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-accessibility-manager.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-accessibility-manager.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-adaptor.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-adaptor.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-application.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-application.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-clipboard-event-notifier.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-clipboard-event-notifier.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-orientation.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-orientation.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-physical-keyboard.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-physical-keyboard.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-style-monitor.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-style-monitor.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-test-application.h [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-timer.cpp [new file with mode: 0644]
automated-tests/dali-toolkit-test-utils/toolkit-timer.h [new file with mode: 0644]
automated-tests/debug.sh [new file with mode: 0755]
automated-tests/debug_target.sh [new file with mode: 0644]
automated-tests/execute.sh [new file with mode: 0755]
automated-tests/execute_target.sh [new file with mode: 0755]
automated-tests/rules.mk.in [new file with mode: 0644]
automated-tests/tbp.pl [new file with mode: 0755]
automated-tests/tet_scen [new file with mode: 0644]
automated-tests/tetbuild.cfg [new file with mode: 0644]
automated-tests/tetclean.cfg [new file with mode: 0644]
automated-tests/tetexec.cfg [new file with mode: 0644]
build/slp/.gitignore [new file with mode: 0644]
build/slp/Makefile.am [new file with mode: 0644]
build/slp/README [new file with mode: 0644]
build/slp/configure.ac [new file with mode: 0644]
build/slp/dali-toolkit.pc.in [new file with mode: 0644]
build/slp/dali-toolkit/Makefile.am [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/alignment/alignment.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/bubble-effect/bubble-emitter.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/buttons/button.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/buttons/push-button.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/cluster/cluster-style.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/control-impl.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/control.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/default-controls/push-button-factory.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/default-controls/solid-color-actor.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/image-view/masked-image-view.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/popup/popup.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scroll-component/scroll-bar.h [new file with mode: 0755]
capi/dali-toolkit/public-api/controls/scroll-component/scroll-component.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/item-view/grid-layout.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/item-view/item-factory.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/item-view/item-view.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-cube-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-custom-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-page-spiral-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-slide-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-twist-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/scrollable/scrollable.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/super-blur-view/super-blur-view.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/text-input/text-input.h [new file with mode: 0644]
capi/dali-toolkit/public-api/controls/text-view/text-view.h [new file with mode: 0644]
capi/dali-toolkit/public-api/dali-toolkit-capi-internal.h [new file with mode: 0644]
capi/dali-toolkit/public-api/enums.h [new file with mode: 0644]
capi/dali-toolkit/public-api/factory/localized-control-factory.h [new file with mode: 0644]
capi/dali-toolkit/public-api/file.list [new file with mode: 0644]
capi/dali-toolkit/public-api/focus-manager/focus-manager.h [new file with mode: 0644]
capi/dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h [new file with mode: 0644]
capi/dali-toolkit/public-api/markup-processor/markup-processor.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/dissolve-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/image-region-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/iris-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/mask-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/page-turn-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/ripple-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/ripple2d-effect.h [new file with mode: 0644]
capi/dali-toolkit/public-api/shader-effects/swirl-effect.h [new file with mode: 0644]
dali-toolkit.manifest [new file with mode: 0644]
dali-toolkit/dali-toolkit.h [new file with mode: 0644]
dali-toolkit/images/00_popup_bg.png [new file with mode: 0755]
dali-toolkit/images/00_popup_bottom_bg.png [new file with mode: 0755]
dali-toolkit/images/00_popup_bubble_bg.png [new file with mode: 0755]
dali-toolkit/images/00_popup_bubble_tail_bottom.png [new file with mode: 0755]
dali-toolkit/images/00_popup_button_bg.png [new file with mode: 0755]
dali-toolkit/images/00_popup_button_pressed.png [new file with mode: 0755]
dali-toolkit/images/B16-8_TTS_focus.png [new file with mode: 0644]
dali-toolkit/images/copy_paste_icon_clipboard.png [new file with mode: 0644]
dali-toolkit/images/copy_paste_icon_copy.png [new file with mode: 0644]
dali-toolkit/images/copy_paste_icon_cut.png [new file with mode: 0644]
dali-toolkit/images/copy_paste_icon_paste.png [new file with mode: 0644]
dali-toolkit/images/copy_paste_icon_select.png [new file with mode: 0644]
dali-toolkit/images/copy_paste_icon_select_all.png [new file with mode: 0644]
dali-toolkit/images/copypanelLine.png [new file with mode: 0755]
dali-toolkit/images/cursor.png [new file with mode: 0644]
dali-toolkit/images/cutCopyPastePopup_bg.png [new file with mode: 0644]
dali-toolkit/images/file.list [new file with mode: 0644]
dali-toolkit/images/insertpoint-icon.png [new file with mode: 0755]
dali-toolkit/images/keyboard_focus.png [new file with mode: 0644]
dali-toolkit/images/magnifier-image-frame.png [new file with mode: 0644]
dali-toolkit/images/magnifier.png [new file with mode: 0644]
dali-toolkit/images/overshoot_ripple.png [new file with mode: 0644]
dali-toolkit/images/popup_bg.png [new file with mode: 0755]
dali-toolkit/images/popup_scroll.png [new file with mode: 0755]
dali-toolkit/images/popup_tail_down.png [new file with mode: 0755]
dali-toolkit/images/popup_tail_left.png [new file with mode: 0644]
dali-toolkit/images/popup_tail_right.png [new file with mode: 0644]
dali-toolkit/images/popup_tail_up.png [new file with mode: 0644]
dali-toolkit/images/scroll_overshoot.png [new file with mode: 0755]
dali-toolkit/images/slider-popup-arrow.png [new file with mode: 0644]
dali-toolkit/images/slider-popup.png [new file with mode: 0644]
dali-toolkit/images/slider-skin-handle.png [new file with mode: 0644]
dali-toolkit/images/slider-skin-progress.png [new file with mode: 0644]
dali-toolkit/images/slider-skin.png [new file with mode: 0644]
dali-toolkit/images/text-input-selection-handle-left-press.png [new file with mode: 0755]
dali-toolkit/images/text-input-selection-handle-left.png [new file with mode: 0755]
dali-toolkit/images/text-input-selection-handle-right-press.png [new file with mode: 0755]
dali-toolkit/images/text-input-selection-handle-right.png [new file with mode: 0755]
dali-toolkit/internal/builder/builder-actor.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/builder-animations.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/builder-control.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/builder-declarations.h [new file with mode: 0644]
dali-toolkit/internal/builder/builder-filesystem.h [new file with mode: 0644]
dali-toolkit/internal/builder/builder-get-is.inl.h [new file with mode: 0644]
dali-toolkit/internal/builder/builder-impl.cpp [new file with mode: 0755]
dali-toolkit/internal/builder/builder-impl.h [new file with mode: 0644]
dali-toolkit/internal/builder/builder-set-property.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/builder-signals.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/json-parser-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/json-parser-impl.h [new file with mode: 0644]
dali-toolkit/internal/builder/json-parser-state.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/json-parser-state.h [new file with mode: 0644]
dali-toolkit/internal/builder/optional-value.h [new file with mode: 0644]
dali-toolkit/internal/builder/tree-node-manipulator.cpp [new file with mode: 0644]
dali-toolkit/internal/builder/tree-node-manipulator.h [new file with mode: 0644]
dali-toolkit/internal/controls/alignment/alignment-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/alignment/alignment-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/bloom-view/bloom-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/button-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/button-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/button-painter-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/check-box-button-default-painter-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/check-box-button-default-painter-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/check-box-button-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/check-box-button-painter-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/push-button-default-painter-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/push-button-default-painter-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/push-button-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/push-button-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/buttons/push-button-painter-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/cluster/cluster-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/cluster/cluster-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/cluster/cluster-style-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/cluster/cluster-style-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/effects-view/effects-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/image-view/image-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/image-view/image-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/image-view/masked-image-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/image-view/masked-image-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/magnifier/magnifier-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-bar.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-bar.h [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-control-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-control-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-title-bar.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-title-bar.h [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-tool-bar.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/navigation-tool-bar.h [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/page-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/navigation-frame/page-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/popup/popup-impl.cpp [new file with mode: 0755]
dali-toolkit/internal/controls/popup/popup-impl.h [new file with mode: 0755]
dali-toolkit/internal/controls/popup/popup-style-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/popup/popup-style-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/relayout-controller-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/relayout-controller-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/relayout-controller.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/relayout-controller.h [new file with mode: 0644]
dali-toolkit/internal/controls/relayout-helper.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/relayout-helper.h [new file with mode: 0644]
dali-toolkit/internal/controls/scroll-component/scroll-bar-impl.cpp [new file with mode: 0755]
dali-toolkit/internal/controls/scroll-component/scroll-bar-impl.h [new file with mode: 0755]
dali-toolkit/internal/controls/scroll-component/scroll-component-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scroll-component/scroll-component-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-base-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-base-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-overshoot-indicator-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-overshoot-indicator-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-carousel-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-carousel-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-cube-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-cube-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-custom-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-custom-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-depth-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-depth-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-helper-functions.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-helper-functions.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-page-carousel-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-page-carousel-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-page-cube-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-page-cube-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-page-spiral-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-page-spiral-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-slide-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-slide-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-twist-effect-impl.cpp [new file with mode: 0755]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-twist-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-wobble-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-wobble-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/scrollable/scrollable-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/selectors/rotating-selector-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/selectors/rotating-selector-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/shadow-view/shadow-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/slider/slider-impl.cpp [new file with mode: 0755]
dali-toolkit/internal/controls/slider/slider-impl.h [new file with mode: 0755]
dali-toolkit/internal/controls/style-change-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/style-change-processor.h [new file with mode: 0644]
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/table-view/array-2d.h [new file with mode: 0644]
dali-toolkit/internal/controls/table-view/table-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/table-view/table-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-input/text-input-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-input/text-input-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-input/text-input-popup-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-input/text-input-popup-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/relayout-utilities.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/relayout-utilities.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/split-by-char-policies.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/split-by-char-policies.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/split-by-word-policies.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/split-by-word-policies.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-actor-cache.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-actor-cache.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-processor.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-character-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-line-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-line-processor.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor-dbg.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor-dbg.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor-helper-functions.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor-helper-functions.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor-types.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-processor.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-word-group-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-word-group-processor.h [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-word-processor.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/text-view/text-view-word-processor.h [new file with mode: 0644]
dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/tool-bar/tool-bar-impl.h [new file with mode: 0644]
dali-toolkit/internal/controls/view/view-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/controls/view/view-impl.h [new file with mode: 0644]
dali-toolkit/internal/factory/localized-control-factory-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/factory/localized-control-factory-impl.h [new file with mode: 0644]
dali-toolkit/internal/file.list [new file with mode: 0644]
dali-toolkit/internal/filters/blur-two-pass-filter.cpp [new file with mode: 0644]
dali-toolkit/internal/filters/blur-two-pass-filter.h [new file with mode: 0644]
dali-toolkit/internal/filters/emboss-filter.cpp [new file with mode: 0644]
dali-toolkit/internal/filters/emboss-filter.h [new file with mode: 0644]
dali-toolkit/internal/filters/image-filter.cpp [new file with mode: 0644]
dali-toolkit/internal/filters/image-filter.h [new file with mode: 0644]
dali-toolkit/internal/filters/spread-filter.cpp [new file with mode: 0644]
dali-toolkit/internal/filters/spread-filter.h [new file with mode: 0644]
dali-toolkit/internal/focus-manager/focus-manager-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/focus-manager/focus-manager-impl.h [new file with mode: 0644]
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h [new file with mode: 0644]
dali-toolkit/internal/focus-manager/keyinput-focus-manager-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/focus-manager/keyinput-focus-manager-impl.h [new file with mode: 0644]
dali-toolkit/internal/shader-effects/page-turn-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/shader-effects/page-turn-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/shader-effects/water-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/shader-effects/water-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.h [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.h [new file with mode: 0644]
dali-toolkit/public-api/builder/builder.cpp [new file with mode: 0644]
dali-toolkit/public-api/builder/builder.h [new file with mode: 0644]
dali-toolkit/public-api/builder/json-parser.cpp [new file with mode: 0644]
dali-toolkit/public-api/builder/json-parser.h [new file with mode: 0644]
dali-toolkit/public-api/builder/tree-node.cpp [new file with mode: 0644]
dali-toolkit/public-api/builder/tree-node.h [new file with mode: 0644]
dali-toolkit/public-api/controls/alignment/alignment.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/bloom-view/bloom-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/bloom-view/bloom-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/bubble-effect/bubble-emitter.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/buttons/button.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/buttons/check-box-button.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/buttons/check-box-button.h [new file with mode: 0644]
dali-toolkit/public-api/controls/buttons/push-button.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/cluster/cluster-style.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/cluster/cluster.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/cluster/cluster.h [new file with mode: 0644]
dali-toolkit/public-api/controls/control-impl.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/control.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/default-controls/check-button-factory.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/default-controls/check-button-factory.h [new file with mode: 0644]
dali-toolkit/public-api/controls/default-controls/push-button-factory.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/default-controls/solid-color-actor.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/effects-view/effects-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/effects-view/effects-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/gaussian-blur-view/gaussian-blur-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/gaussian-blur-view/gaussian-blur-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/image-view/image-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/image-view/image-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/image-view/masked-image-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/magnifier/magnifier.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/magnifier/magnifier.h [new file with mode: 0644]
dali-toolkit/public-api/controls/navigation-frame/navigation-bar-style.h [new file with mode: 0644]
dali-toolkit/public-api/controls/navigation-frame/navigation-control.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/navigation-frame/navigation-control.h [new file with mode: 0644]
dali-toolkit/public-api/controls/navigation-frame/page.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/navigation-frame/page.h [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-factory.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-factory.h [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-turn-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/page-turn-view/page-turn-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/popup/popup.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scroll-component/scroll-bar.cpp [new file with mode: 0755]
dali-toolkit/public-api/controls/scroll-component/scroll-component.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/album-layout.cpp [new file with mode: 0755]
dali-toolkit/public-api/controls/scrollable/item-view/album-layout.h [new file with mode: 0755]
dali-toolkit/public-api/controls/scrollable/item-view/depth-layout.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/depth-layout.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/grid-layout.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/item-factory.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/item-layout.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/item-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/navigation-layout.cpp [new file with mode: 0755]
dali-toolkit/public-api/controls/scrollable/item-view/navigation-layout.h [new file with mode: 0755]
dali-toolkit/public-api/controls/scrollable/item-view/roll-layout.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/roll-layout.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/spiral-layout.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/item-view/spiral-layout.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-carousel-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-carousel-effect.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-constraints.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-constraints.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-cube-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-custom-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-depth-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-depth-effect.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-page-carousel-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-page-carousel-effect.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-page-cube-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-page-cube-effect.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-page-spiral-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-slide-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-twist-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-wobble-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-wobble-effect.h [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/scrollable/scrollable.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/selectors/rotating-selector.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/selectors/rotating-selector.h [new file with mode: 0644]
dali-toolkit/public-api/controls/shadow-view/shadow-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/shadow-view/shadow-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/slider/slider.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/slider/slider.h [new file with mode: 0644]
dali-toolkit/public-api/controls/super-blur-view/super-blur-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/table-view/table-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/table-view/table-view.h [new file with mode: 0644]
dali-toolkit/public-api/controls/text-input/text-input.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/text-view/text-view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/tool-bar/tool-bar.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/tool-bar/tool-bar.h [new file with mode: 0644]
dali-toolkit/public-api/controls/view/view.cpp [new file with mode: 0644]
dali-toolkit/public-api/controls/view/view.h [new file with mode: 0644]
dali-toolkit/public-api/enums.cpp [new file with mode: 0644]
dali-toolkit/public-api/factory/localized-control-factory.cpp [new file with mode: 0644]
dali-toolkit/public-api/file.list [new file with mode: 0755]
dali-toolkit/public-api/focus-manager/focus-manager.cpp [new file with mode: 0644]
dali-toolkit/public-api/focus-manager/keyboard-focus-manager.cpp [new file with mode: 0644]
dali-toolkit/public-api/focus-manager/keyinput-focus-manager.cpp [new file with mode: 0644]
dali-toolkit/public-api/focus-manager/keyinput-focus-manager.h [new file with mode: 0644]
dali-toolkit/public-api/markup-processor/markup-processor.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/alpha-discard-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/alpha-discard-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/bendy-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/bendy-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/blind-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/blind-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/bubble-effect/bubble-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/bubble-effect/color-adjuster.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/carousel-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/carousel-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/displacement-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/displacement-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/dissolve-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/dissolve-local-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/dissolve-local-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/distance-field-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/distance-field-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/image-region-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/iris-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/mask-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/mirror-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/mirror-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/motion-blur-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/motion-blur-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/motion-stretch-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/motion-stretch-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/nine-patch-mask-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/overlay-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/overlay-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/page-turn-book-spine-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/page-turn-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/ripple-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/ripple2d-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/shear-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/shear-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/soft-button-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/soft-button-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/spot-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/spot-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/square-dissolve-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/square-dissolve-effect.h [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/swirl-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/water-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/shader-effects/water-effect.h [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-cross-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-cross-effect.h [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-effect.h [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-fold-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-fold-effect.h [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-wave-effect.cpp [new file with mode: 0644]
dali-toolkit/public-api/transition-effects/cube-transition-wave-effect.h [new file with mode: 0644]
packaging/dali-toolkit.spec [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..8865c0b
--- /dev/null
@@ -0,0 +1,56 @@
+.cproject
+.project
+.settings
+.directory
+Makefile.in
+Makefile
+*~
+*.o
+*.o.d
+*.pc
+*.lo
+*.loT
+*.la
+*.so
+*.orig
+*.odt
+*.fodt
+*.test
+*.example
+*.a
+*.apk
+*.ap_
+*.class
+*.classpath
+*.dex
+*.gcno
+*.gcda
+*.gcov
+.deps
+.libs
+*.swp
+/docs/generated/*
+/build/slp/doc
+/build/slp/.cov
+/build/desktop
+/debian/build-stamp
+/debian/config.status
+/debian/libdali-toolkit-dbg.debhelper.log
+/debian/libdali-toolkit-dbg
+/debian/libdali-toolkit-dev.debhelper.log
+/debian/libdali-toolkit-dev
+/debian/libdali-toolkit.debhelper.log
+/debian/libdali-toolkit.postinst.debhelper
+/debian/libdali-toolkit.postrm.debhelper
+/debian/libdali-toolkit.substvars
+/debian/libdali-toolkit
+/debian/tmp
+/debian/files
+/debian/libdali-toolkit-dbg.substvars
+/debian/libdali-toolkit-dev.substvars
+/debian/libdali-nsplugin.debhelper.log
+/debian/libdali-nsplugin.postinst.debhelper
+/debian/libdali-nsplugin.postrm.debhelper
+/debian/libdali-nsplugin.substvars
+/debian/libdali-nsplugin
+/packaging/home*
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..87ed7f1
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,205 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+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.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+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
+solely as incorporated into a Tizen Certified Platform, 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 solely
+as incorporated into a Tizen Certified Platform 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 pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. 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
+  4. 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
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+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 Flora License to your work
+
+To apply the Flora 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 Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   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/.gitignore b/automated-tests/.gitignore
new file mode 100644 (file)
index 0000000..807a3b2
--- /dev/null
@@ -0,0 +1,7 @@
+!Makefile
+tet_captured
+results-desktop
+results-target
+results
+rules.mk
+dali.info
diff --git a/automated-tests/_export_desktop.sh b/automated-tests/_export_desktop.sh
new file mode 100644 (file)
index 0000000..eeea3ed
--- /dev/null
@@ -0,0 +1,33 @@
+export ARCH=desktop
+
+
+if [ -z "$DESKTOP_PREFIX" ] ; then
+    if [ -z "$PREFIX" ] ; then
+        echo "####################################################"
+        echo "# DESKTOP_PREFIX is not set. Recommend running     #"
+        echo "# dali_env -s to create setenv script              #"
+        echo "####################################################"
+    else
+        echo "####################################################"
+        echo "# DESKTOP_PREFIX is not set. Using PREFIX instead. #"
+        echo "#                                                  #"
+        echo "# Warning, PREFIX is deprecated, please use        #"
+        echo "# dali_env to set up your environment.             #"
+        echo "####################################################"
+        export DESKTOP_PREFIX=$PREFIX
+    fi
+fi
+
+export TET_INSTALL_PATH=$HOME/Packages/tetware-desktop  # Your tetware root path
+export PATH=$TET_INSTALL_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_INSTALL_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_INSTALL_PATH
+export DALI_IMAGE_DIR=$DESKTOP_PREFIX/share/app.dalimenu/images/
+export DALI_MODEL_DIR=$DESKTOP_PREFIX/share/app.dalimenu/models/
+export DALI_STYLE_DIR=$DESKTOP_PREFIX/share/themes/dali/
+
+set $(pwd)
+export TET_SUITE_ROOT=$1
+
+set $(date +%s)
+FILE_NAME_EXTENSION=$1
diff --git a/automated-tests/_export_env.sh b/automated-tests/_export_env.sh
new file mode 100755 (executable)
index 0000000..4e2dc90
--- /dev/null
@@ -0,0 +1,17 @@
+export ARCH=target
+
+export TET_INSTALL_PATH=/scratchbox/TETware  # tetware root path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target # tetware target path
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export DALI_IMAGE_DIR=/opt/share/app.dalimenu/images/
+export DALI_MODEL_DIR=/opt/share/app.dalimenu/models/
+export DALI_STYLE_DIR=/opt/share/themes/dali/
+
+export TET_ROOT=$TET_TARGET_PATH
+
+set $(pwd)
+export TET_SUITE_ROOT=$1
+
+set $(date +%s)
+FILE_NAME_EXTENSION=$1
diff --git a/automated-tests/_export_sbs.sh b/automated-tests/_export_sbs.sh
new file mode 100644 (file)
index 0000000..bc5a4af
--- /dev/null
@@ -0,0 +1,17 @@
+export ARCH=target
+
+export TET_INSTALL_PATH=$HOME/git/TETware  # tetware root path
+export TET_TARGET_PATH=$TET_INSTALL_PATH
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export DALI_IMAGE_DIR=/opt/share/app.dalimenu/images/
+export DALI_MODEL_DIR=/opt/share/app.dalimenu/models/
+export DALI_STYLE_DIR=/opt/share/themes/dali/
+
+export TET_ROOT=$TET_TARGET_PATH
+
+set $(pwd)
+export TET_SUITE_ROOT=$1
+
+set $(date +%s)
+FILE_NAME_EXTENSION=$1
diff --git a/automated-tests/_export_target_env.sh b/automated-tests/_export_target_env.sh
new file mode 100755 (executable)
index 0000000..4c1b135
--- /dev/null
@@ -0,0 +1,17 @@
+export ARCH=target
+
+export TET_INSTALL_PATH=/mnt/nfs/git/TETware  # path to mount
+export TET_TARGET_PATH=$TET_INSTALL_PATH
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export DALI_IMAGE_DIR=/opt/share/app.dalimenu/images/
+export DALI_MODEL_DIR=/opt/share/app.dalimenu/models/
+export DALI_STYLE_DIR=/opt/share/themes/dali/
+
+export TET_ROOT=$TET_TARGET_PATH
+
+set $(pwd)
+export TET_SUITE_ROOT=$1
+
+set $(date +%s)
+FILE_NAME_EXTENSION=$1
diff --git a/automated-tests/build.sh b/automated-tests/build.sh
new file mode 100755 (executable)
index 0000000..d857de3
--- /dev/null
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+TEMP=`getopt -o 2vds: --long 2,verbose,desktop,scenario: \
+     -n 'build_out.sh' -- "$@"`
+
+if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
+
+# Note the quotes around `$TEMP': they are essential!
+eval set -- "$TEMP"
+
+scenario=all
+opt_verbose=0
+opt_env=scratchbox
+
+while true ; do
+    case "$1" in
+       -d|--desktop)   opt_env=desktop ; shift ;;
+       -s|--scenario)  scenario="$2"   ; shift 2 ;;
+       -v|--verbose)   opt_verbose=1   ; shift ;;
+       -2|--2)         opt_env=sbs     ; shift ;;
+       --) shift ; break ;;
+       *) echo "Internal error!" ; exit 1 ;;
+    esac
+done
+
+
+case "$opt_env" in
+    desktop)
+       . _export_desktop.sh
+       cat <<EOF > coverage.mk
+LDFLAGS += --coverage
+EOF
+       ;;
+    scratchbox)
+       . _export_env.sh
+       cat <<EOF > coverage.mk
+LDFLAGS +=
+EOF
+       ;;
+    sbs)
+       . _export_sbs.sh
+       cat <<EOF > coverage.mk
+LDFLAGS +=
+EOF
+       ;;
+esac
+
+
+echo PATH=$PATH
+echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH
+echo TET_ROOT=$TET_ROOT
+echo TET_SUITE_ROOT=$TET_SUITE_ROOT
+echo ARCH=$ARCH
+
+RESULT_DIR=results-$ARCH
+HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html
+JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal
+
+# Faster cleanup.
+find . -name Makefile -execdir make -f {} clean \;
+
+mkdir -p $RESULT_DIR
+if [ $opt_verbose -eq 1 ] ; then
+    tcc -b -j -  ./  $scenario | tee $JOURNAL_RESULT
+else
+    tcc -b -j $JOURNAL_RESULT -p ./  $scenario
+fi
+./tbp.pl $JOURNAL_RESULT
+
+
diff --git a/automated-tests/build_out.sh b/automated-tests/build_out.sh
new file mode 100755 (executable)
index 0000000..efb93a1
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+./build.sh -v $*
diff --git a/automated-tests/coverage.mk b/automated-tests/coverage.mk
new file mode 100644 (file)
index 0000000..5012fd4
--- /dev/null
@@ -0,0 +1 @@
+LDFLAGS += --coverage
diff --git a/automated-tests/coverage.sh b/automated-tests/coverage.sh
new file mode 100755 (executable)
index 0000000..98798db
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+( cd ../build/slp ; make cov_data )
+
+for i in `find . -name Makefile` ; do
+    (
+        cd $(dirname $i)
+        echo `pwd`
+        covs=( `ls *.gcda 2>/dev/null` )
+        if [[ $? -eq 0 ]]
+        then
+            make coverage
+        fi
+    )
+done
+
+(
+    cd .. ;
+    genhtml -o build/slp/doc/coverage `find . -name dali.info`
+)
+
+
diff --git a/automated-tests/dali-internal-test-suite/master-makefile.mk b/automated-tests/dali-internal-test-suite/master-makefile.mk
new file mode 100644 (file)
index 0000000..a8e9921
--- /dev/null
@@ -0,0 +1,53 @@
+#
+# Copyright (c) 2014 Samsung Electronics Co., Ltd.
+#
+# Licensed under the Flora License, Version 1.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://floralicense.org/license/
+#
+# 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.
+#
+
+CC = g++
+
+TARGETS =
+include file.list
+
+PKGS = dali-core dali dali-toolkit dali-test-suite-utils
+include ../../rules.mk
+include ../../coverage.mk
+
+TOOLKIT_TEST_UTILS_DIR=../../dali-toolkit-test-utils/
+
+CXXFLAGS += -I$(TOOLKIT_TEST_UTILS_DIR)
+
+TOOLKIT_TEST_UTILS_SRC_FILES = \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-application.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-adaptor.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-clipboard-event-notifier.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-accessibility-manager.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-physical-keyboard.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-style-monitor.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-timer.cpp \
+  $(TOOLKIT_TEST_UTILS_DIR)/toolkit-orientation.cpp
+
+all: $(TARGETS)
+
+%: %.cpp $(TOOLKIT_TEST_UTILS_SRC_FILES)
+       $(CC) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)
+
+clean:
+       @rm -f $(notdir $(TARGETS))
+       @rm -f tet_captured
+       @rm -f *~
+       @rm -f *.gcda *.gcno
+
+coverage:
+       @lcov --directory . -c -o dali.info
+       @lcov --remove dali.info "*boost*" "/usr/include/*" "*/automated-tests/*" -o dali.info
diff --git a/automated-tests/dali-internal-test-suite/tc-gen.sh b/automated-tests/dali-internal-test-suite/tc-gen.sh
new file mode 120000 (symlink)
index 0000000..b8e6201
--- /dev/null
@@ -0,0 +1 @@
+../dali-test-suite/tc-gen.sh
\ No newline at end of file
diff --git a/automated-tests/dali-internal-test-suite/text-input/.gitignore b/automated-tests/dali-internal-test-suite/text-input/.gitignore
new file mode 100644 (file)
index 0000000..0f77dca
--- /dev/null
@@ -0,0 +1 @@
+utc-Dali-TextInput
diff --git a/automated-tests/dali-internal-test-suite/text-input/Makefile b/automated-tests/dali-internal-test-suite/text-input/Makefile
new file mode 120000 (symlink)
index 0000000..c88d5a7
--- /dev/null
@@ -0,0 +1 @@
+../master-makefile.mk
\ No newline at end of file
diff --git a/automated-tests/dali-internal-test-suite/text-input/file.list b/automated-tests/dali-internal-test-suite/text-input/file.list
new file mode 100644 (file)
index 0000000..1e6d688
--- /dev/null
@@ -0,0 +1,2 @@
+TARGETS += \
+        utc-Dali-TextInput \
diff --git a/automated-tests/dali-internal-test-suite/text-input/tslist b/automated-tests/dali-internal-test-suite/text-input/tslist
new file mode 100644 (file)
index 0000000..7bbabc6
--- /dev/null
@@ -0,0 +1 @@
+/dali-internal-test-suite/text-input/utc-Dali-TextInput
diff --git a/automated-tests/dali-internal-test-suite/text-input/utc-Dali-TextInput.cpp b/automated-tests/dali-internal-test-suite/text-input/utc-Dali-TextInput.cpp
new file mode 100644 (file)
index 0000000..6315dde
--- /dev/null
@@ -0,0 +1,145 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.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://floralicense.org/license/
+//
+// 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.
+//
+
+#include <iostream>
+
+#include <stdlib.h>
+#include <tet_api.h>
+
+#include <dali/public-api/dali-core.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit-test-suite-utils.h>
+
+#include <dali/integration-api/events/key-event-integ.h>
+
+// Internal includes
+#include <dali-toolkit/internal/controls/text-input/text-input-impl.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+static void Startup();
+static void Cleanup();
+
+extern "C" {
+  void (*tet_startup)() = Startup;
+  void (*tet_cleanup)() = Cleanup;
+}
+
+enum {
+  POSITIVE_TC_IDX = 0x01,
+  NEGATIVE_TC_IDX,
+};
+
+#define MAX_NUMBER_OF_TESTS 10000
+extern "C" {
+  struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
+}
+
+// Add test functionality for all APIs in the class (Positive and Negative)
+TEST_FUNCTION( UtcDaliInternalTextInputTextSelection, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextInputSetGetExceedEnabled, POSITIVE_TC_IDX );
+// TEST_FUNCTION( UtcDaliTextInputMethod02, NEGATIVE_TC_IDX );
+
+// Called only once before first test is run.
+static void Startup()
+{
+}
+
+// Called only once after last test is run
+static void Cleanup()
+{
+}
+
+
+/**
+ *  Test: Selected is replaced by new input text.
+ **/
+static void UtcDaliInternalTextInputTextSelection()
+{
+  const char* testChar  = "v";
+
+  ToolkitTestApplication application;
+
+  Dali::Integration::Core& core ( application.GetCore() );
+
+  tet_infoline("Testing Text Selection with replace.");
+
+  Toolkit::TextInput textInput = Toolkit::TextInput::New();
+
+  DALI_TEST_CHECK(textInput);
+
+  Stage::GetCurrent().Add(textInput);
+
+  textInput.SetInitialText("Test String");
+
+  std::string initialText = textInput.GetText();
+
+  tet_printf("Set Initial text: %s\n", initialText.c_str() );
+
+  textInput.SetKeyInputFocus();
+
+  GetImpl(textInput).SelectText(0,11);
+
+  tet_printf("Select all of Initial text\n");
+
+  Integration::KeyEvent event(testChar, testChar, 0, 0, 0, Integration::KeyEvent::Down );
+
+  core.SendEvent( event );
+
+  tet_printf("Simulate pressing of a key: %s\n", testChar );
+
+  std::string newText = textInput.GetText();
+
+  tet_printf("Check current text (%s) is the new text \n", newText.c_str() );
+
+  DALI_TEST_EQUALS("v",textInput.GetText(), TEST_LOCATION);
+}
+
+static void UtcDaliTextInputSetGetExceedEnabled()
+{
+  tet_infoline("UtcDaliTextInputSetGetExceedEnabled: ");
+
+  ToolkitTestApplication application;
+
+  Toolkit::TextInput textInput = Toolkit::TextInput::New();
+  textInput.SetMultilinePolicy( Toolkit::TextView::SplitByWord );
+  textInput.SetWidthExceedPolicy( Toolkit::TextView::Split );
+  textInput.SetHeightExceedPolicy( Toolkit::TextView::Original );
+
+  DALI_TEST_CHECK( textInput.GetExceedEnabled() );
+
+  Toolkit::Internal::TextInput& textInputImpl = static_cast<Toolkit::Internal::TextInput&>( textInput.GetImplementation() );
+
+  textInput.SetSize( 50.f, 50.f );
+  textInput.SetExceedEnabled( false );
+
+  DALI_TEST_CHECK( !textInput.GetExceedEnabled() );
+
+
+  textInputImpl.InsertAt( Text("He"), 0 );
+
+  DALI_TEST_EQUALS("He",textInput.GetText(), TEST_LOCATION);
+
+  textInputImpl.InsertAt( Text("llo"), 2 );
+
+  DALI_TEST_EQUALS("Hello",textInput.GetText(), TEST_LOCATION);
+
+  textInputImpl.InsertAt( Text(" world! hello world hello world hello world"), 5 ); // Doesn't fit so is not added.
+
+  DALI_TEST_EQUALS("Hello",textInput.GetText(), TEST_LOCATION);
+}
diff --git a/automated-tests/dali-internal-test-suite/text-view/.gitignore b/automated-tests/dali-internal-test-suite/text-view/.gitignore
new file mode 100644 (file)
index 0000000..881389b
--- /dev/null
@@ -0,0 +1,5 @@
+utc-Dali-TextView
+utc-Dali-TextView-HelperAndDebug
+utc-Dali-TextView-Processor
+utc-Dali-TextView-Processor-Types
+utc-Dali-TextView-Relayout-Utilities
diff --git a/automated-tests/dali-internal-test-suite/text-view/Makefile b/automated-tests/dali-internal-test-suite/text-view/Makefile
new file mode 120000 (symlink)
index 0000000..c88d5a7
--- /dev/null
@@ -0,0 +1 @@
+../master-makefile.mk
\ No newline at end of file
diff --git a/automated-tests/dali-internal-test-suite/text-view/file.list b/automated-tests/dali-internal-test-suite/text-view/file.list
new file mode 100644 (file)
index 0000000..7e75352
--- /dev/null
@@ -0,0 +1,6 @@
+TARGETS += \
+        utc-Dali-TextView \
+        utc-Dali-TextView-HelperAndDebug \
+        utc-Dali-TextView-Processor \
+        utc-Dali-TextView-Processor-Types \
+        utc-Dali-TextView-Relayout-Utilities \
\ No newline at end of file
diff --git a/automated-tests/dali-internal-test-suite/text-view/tslist b/automated-tests/dali-internal-test-suite/text-view/tslist
new file mode 100644 (file)
index 0000000..5ee4f51
--- /dev/null
@@ -0,0 +1,5 @@
+/dali-internal-test-suite/text-view/utc-Dali-TextView
+/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor
+/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor-Types
+/dali-internal-test-suite/text-view/utc-Dali-TextView-Relayout-Utilities
+/dali-internal-test-suite/text-view/utc-Dali-TextView-HelperAndDebug
diff --git a/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-HelperAndDebug.cpp b/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-HelperAndDebug.cpp
new file mode 100644 (file)
index 0000000..494039b
--- /dev/null
@@ -0,0 +1,304 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.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://floralicense.org/license/
+//
+// 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.
+//
+
+#include <iostream>
+
+#include <stdlib.h>
+#include <tet_api.h>
+
+#include <dali/public-api/dali-core.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit-test-suite-utils.h>
+
+// Internal headers are allowed here
+#include <dali-toolkit/internal/controls/text-view/split-by-new-line-char-policies.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-impl.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-processor.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-processor-helper-functions.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-processor-dbg.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+using namespace Dali::Toolkit::Internal;
+
+namespace
+{
+// Data structures used to create an 'experiment' in TET cases
+
+const Toolkit::Internal::TextView::LayoutParameters DEFAULT_LAYOUT_PARAMETERS;
+const Toolkit::Internal::TextView::VisualParameters DEFAULT_VISUAL_PARAMETERS;
+
+struct GetIndicesFromGlobalCharacterIndexTest
+{
+  std::string description;
+  std::string input;
+  std::size_t position;
+  std::size_t lineIndex;
+  std::size_t groupIndex;
+  std::size_t wordIndex;
+  std::size_t characterIndex;
+};
+
+/**
+ * Gets the line, group, word, and character indices for a given text and a given position and checks the results with the given indices.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment.
+ * @param input The input text.
+ * @param position Global position of the character. i.e in a text with with 1000 characters, position could be any value from 0 to 1000.
+ * @param resultLineIndex Index to the line where the character is located.
+ * @param resultGroupIndex Index to the group within the line where the character is located.
+ * @param resultWordIndex Index to the word within the group where the character is located.
+ * @param resultCharacterIndex Index to the character within the word where the character is located.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestGetIndicesFromGlobalCharacterIndex( const std::string& description,
+                                             const std::string& input,
+                                             const std::size_t position,
+                                             const std::size_t resultLineIndex,
+                                             const std::size_t resultGroupIndex,
+                                             const std::size_t resultWordIndex,
+                                             const std::size_t resultCharacterIndex,
+                                             const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create natural size, layout and text-actor info for the input word.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  TextViewProcessor::TextInfoIndices indices;
+  TextViewProcessor::GetIndicesFromGlobalCharacterIndex( position,
+                                                         inputLayout,
+                                                         indices );
+
+  if( indices.mLineIndex != resultLineIndex )
+  {
+    tet_printf( "Fail. different line index. %s", location );
+    return false;
+  }
+  if( indices.mGroupIndex != resultGroupIndex )
+  {
+    tet_printf( "Fail. different group index. %s", location );
+    return false;
+  }
+  if( indices.mWordIndex != resultWordIndex )
+  {
+    tet_printf( "Fail. different word index. %s", location );
+    return false;
+  }
+  if( indices.mCharacterIndex != resultCharacterIndex )
+  {
+    tet_printf( "Fail. different character index. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+} // namespace
+
+static void Startup();
+static void Cleanup();
+
+extern "C" {
+  void (*tet_startup)() = Startup;
+  void (*tet_cleanup)() = Cleanup;
+}
+
+enum {
+  POSITIVE_TC_IDX = 0x01,
+  NEGATIVE_TC_IDX,
+};
+
+#define MAX_NUMBER_OF_TESTS 10000
+extern "C" {
+  struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
+}
+
+// Add test functionality for all APIs in the class (Positive and Negative)
+TEST_FUNCTION( UtcDaliTextViewGetIndicesFromGlobalCharacterIndex, POSITIVE_TC_IDX ); // Tests correctness when indices to lines, groups, words and characters are worked out from a given global position.
+TEST_FUNCTION( UtcDaliTextViewDebugCouts, POSITIVE_TC_IDX );                         // Tests debug functions just to not to penalize the coverage.
+
+// Called only once before first test is run.
+static void Startup()
+{
+}
+
+// Called only once after last test is run
+static void Cleanup()
+{
+}
+
+static void UtcDaliTextViewGetIndicesFromGlobalCharacterIndex()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewGetIndicesFromGlobalCharacterIndex : ");
+  struct GetIndicesFromGlobalCharacterIndexTest getIndicesFromGlobalCharacterIndexTests[] =
+  {
+    {
+      std::string( "Test position 0" ),
+      std::string( "text te<font size='30'>xt text te</font>xt text\n"
+                   "text t<font size='30'>ext טקסט טקסט te</font>xt\n"
+                   "text text text text text\n"
+                   "\n" ),
+      0,
+      0,
+      0,
+      0,
+      0
+    },
+    {
+      std::string( "Test position 76. (just after the last \\n)" ),
+      std::string( "t<font size='30'>ext text te</font>xt text text\n"
+                   "text text טקסט טקסט text\n"
+                   "text text te<font size='30'>xt text</font> text\n"
+                   "\n" ),
+      76,
+      4,
+      0,
+      0,
+      0
+    },
+    {
+      std::string( "Test position 73. (the last \\n)" ),
+      std::string( "text te<font size='30'>xt text text </font>text\n"
+                   "text text טק<font size='30'>סט טקס</font>ט text\n"
+                   "text text text text text\n"
+                   "\n" ),
+      75,
+      3,
+      0,
+      0,
+      0
+    },
+    {
+      std::string( "Test position 35. (first hebrew character)" ),
+      std::string( "text text text text text\n"
+                   "text text טקסט טקסט text\n"
+                   "text text text text text\n"
+                   "\n" ),
+      35,
+      1,
+      1,
+      0,
+      0
+    },
+    {
+      std::string( "Test position 3. (end of the first word)" ),
+      std::string( "text te<font size='30'>xt text text text\n</font>"
+                   "text text טק<font size='30'>סט טקסט </font>text\n"
+                   "text te<font size='30'>xt text text</font> text\n"
+                   "\n" ),
+      3,
+      0,
+      0,
+      0,
+      3
+    },
+    /* TODO Check for mixed RTL and LTR text.
+    {
+      std::string( "Test position 33. (end of the second word of the second line)" ),
+      std::string( "text te<font size='30'>xt text text text\n</font>"
+                   "text text טק<font size='30'>סט טקסט </font>text\n"
+                   "text te<font size='30'>xt text text</font> text\n"
+                   "\n" ),
+      33,
+      1,
+      0,
+      2,
+      3
+    },
+    {
+      std::string( "Test position 43. (last hebrew character)" ),
+      std::string( "text te<font size='30'>xt text text text\n</font>"
+                   "text text טק<font size='30'>סט טקסט </font>text\n"
+                   "text te<font size='30'>xt text text</font> text\n"
+                   "\n" ),
+      43,
+      1,
+      1,
+      3,
+      3
+    },
+    */
+  };
+  const std::size_t numberOfTests( 5 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const GetIndicesFromGlobalCharacterIndexTest& test = getIndicesFromGlobalCharacterIndexTests[index];
+
+    if( !TestGetIndicesFromGlobalCharacterIndex( test.description, test.input, test.position, test.lineIndex, test.groupIndex, test.wordIndex, test.characterIndex, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewDebugCouts()
+{
+  /////////////////////////////////////////////////////
+  // Text debug functions to not to penalize coverage
+  /////////////////////////////////////////////////////
+
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewDebugCouts : ");
+
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( std::string( "Hello world\nhello world" ), inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  Actor dummy = Actor::New();
+  Toolkit::Internal::SplitByNewLineChar::Relayout( dummy,
+                                                   Toolkit::Internal::TextView::RELAYOUT_ALL,
+                                                   DEFAULT_LAYOUT_PARAMETERS,
+                                                   DEFAULT_VISUAL_PARAMETERS,
+                                                   relayoutData );
+
+  TextViewProcessor::dbgPrint( relayoutData.mTextLayoutInfo );
+
+  TextStyle textStyle;
+  TextViewProcessor::dbgPrint( textStyle );
+
+  TextViewProcessor::TextInfoIndices indices;
+  TextViewProcessor::dbgPrint( indices );
+
+  TextViewProcessor::dbgPrint( inputStyledText );
+
+  tet_result( TET_PASS );
+}
diff --git a/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor-Types.cpp b/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor-Types.cpp
new file mode 100644 (file)
index 0000000..3591c26
--- /dev/null
@@ -0,0 +1,311 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.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://floralicense.org/license/
+//
+// 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.
+//
+
+#include <iostream>
+
+#include <stdlib.h>
+#include <tet_api.h>
+
+#include <dali/public-api/dali-core.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit-test-suite-utils.h>
+
+// Internal headers are allowed here
+#include <dali-toolkit/internal/controls/text-view/text-view-processor-types.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+using namespace Dali::Toolkit::Internal;
+
+namespace
+{
+// Data structures used to create an 'experiment' in TET cases
+
+//////////////////////////////////////////////////////////////////
+} // namespace
+
+static void Startup();
+static void Cleanup();
+
+extern "C" {
+  void (*tet_startup)() = Startup;
+  void (*tet_cleanup)() = Cleanup;
+}
+
+enum {
+  POSITIVE_TC_IDX = 0x01,
+  NEGATIVE_TC_IDX,
+};
+
+#define MAX_NUMBER_OF_TESTS 10000
+extern "C" {
+  struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
+}
+
+// Add test functionality for all APIs in the class (Positive and Negative)
+TEST_FUNCTION( UtcDaliTextViewDefaultConstructorDestructor, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextViewCopyConstructorOperator, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextViewEqualityOperator, POSITIVE_TC_IDX );
+
+// Called only once before first test is run.
+static void Startup()
+{
+}
+
+// Called only once after last test is run
+static void Cleanup()
+{
+}
+
+static void UtcDaliTextViewDefaultConstructorDestructor()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewDefaultConstructorDestructor : ");
+
+  TextViewProcessor::TextInfoIndices indices;
+  DALI_TEST_EQUALS( indices.mLineIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( indices.mGroupIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( indices.mWordIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( indices.mCharacterIndex, 0u, TEST_LOCATION );
+
+  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
+  DALI_TEST_EQUALS( characterLayoutInfo.mHeight, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mAdvance, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mBearing, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mPosition, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mOffset, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mUnderlineThickness, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mUnderlinePosition, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( !characterLayoutInfo.mTextActor );
+  DALI_TEST_CHECK( characterLayoutInfo.mStyledText.mText.IsEmpty() );
+  DALI_TEST_EQUALS( characterLayoutInfo.mColorAlpha, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mGradientColor, Vector4::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mStartPoint, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo.mEndPoint, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( characterLayoutInfo.mIsVisible );
+  DALI_TEST_CHECK( characterLayoutInfo.mSetText );
+  DALI_TEST_CHECK( characterLayoutInfo.mSetStyle );
+
+  TextViewProcessor::WordLayoutInfo wordLayoutInfo;
+  DALI_TEST_EQUALS( wordLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
+
+  TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo;
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mDirection, TextViewProcessor::LTR, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mWordsLayoutInfo.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
+
+  TextViewProcessor::LineLayoutInfo lineLayoutInfo;
+  DALI_TEST_EQUALS( lineLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo.mLineHeightOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo.mWordGroupsLayoutInfo.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
+
+  TextViewProcessor::TextLayoutInfo textLayoutInfo;
+  DALI_TEST_EQUALS( textLayoutInfo.mWholeTextSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mMaxWordWidth, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mLinesLayoutInfo.size(), 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mNumberOfCharacters, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mMaxItalicsOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mType, TextViewProcessor::NoSeparator, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo.mEllipsizeLayoutInfo.mCharactersLayoutInfo.size(), 0u, TEST_LOCATION );
+}
+
+static void UtcDaliTextViewCopyConstructorOperator()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewCopyConstructorOperator : ");
+
+  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo;
+  characterLayoutInfo.mHeight = 1.f;
+  characterLayoutInfo.mAdvance = 1.f;
+  characterLayoutInfo.mBearing = 1.f;
+  characterLayoutInfo.mPosition = Vector3( 1.f, 1.f, 1.f );
+  characterLayoutInfo.mOffset = Vector2( 1.f, 1.f );
+  characterLayoutInfo.mSize = Vector2( 1.f, 1.f );
+  characterLayoutInfo.mAscender = 1.f;
+  characterLayoutInfo.mUnderlineThickness = 1.f;
+  characterLayoutInfo.mUnderlinePosition = 1.f;
+
+  characterLayoutInfo.mTextActor = TextActor::New( "Hello" );
+  characterLayoutInfo.mStyledText.mText = Text( "Hello" );
+
+  characterLayoutInfo.mColorAlpha = 0.f;
+  characterLayoutInfo.mGradientColor = Vector4( 1.f, 1.f, 1.f, 1.f );
+  characterLayoutInfo.mStartPoint = Vector2( 1.f, 1.f );
+  characterLayoutInfo.mEndPoint = Vector2( 1.f, 1.f );
+  characterLayoutInfo.mIsVisible = false;
+  characterLayoutInfo.mSetText = false;
+  characterLayoutInfo.mSetStyle = false;
+
+  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo1;
+  characterLayoutInfo1 = characterLayoutInfo;
+
+  DALI_TEST_EQUALS( characterLayoutInfo1.mHeight, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mAdvance, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( characterLayoutInfo1.mTextActor );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mStyledText.mText.GetLength(), 5u, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo1.mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( !characterLayoutInfo1.mIsVisible );
+  DALI_TEST_CHECK( !characterLayoutInfo1.mSetText );
+  DALI_TEST_CHECK( !characterLayoutInfo1.mSetStyle );
+
+  TextViewProcessor::CharacterLayoutInfo characterLayoutInfo2( characterLayoutInfo );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mHeight, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mAdvance, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mBearing, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mPosition, Vector3( 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mOffset, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlineThickness, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mUnderlinePosition, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( characterLayoutInfo2.mTextActor );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mStyledText.mText.GetLength(), 5u, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mColorAlpha, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mGradientColor, Vector4( 1.f, 1.f, 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mStartPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( characterLayoutInfo2.mEndPoint, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( !characterLayoutInfo2.mIsVisible );
+  DALI_TEST_CHECK( !characterLayoutInfo2.mSetText );
+  DALI_TEST_CHECK( !characterLayoutInfo2.mSetStyle );
+
+  // Increases coverage.
+  characterLayoutInfo2.mTextActor.Reset();
+  characterLayoutInfo1 = characterLayoutInfo2;
+  DALI_TEST_CHECK( !characterLayoutInfo1.mTextActor );
+
+  TextViewProcessor::WordLayoutInfo wordLayoutInfo;
+  wordLayoutInfo.mSize = Vector2( 1.f, 1.f );
+  wordLayoutInfo.mAscender = 1.f;
+  wordLayoutInfo.mType = TextViewProcessor::LineSeparator;
+
+  TextViewProcessor::WordLayoutInfo wordLayoutInfo1;
+  wordLayoutInfo1 = wordLayoutInfo;
+
+  DALI_TEST_EQUALS( wordLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo1.mType, TextViewProcessor::LineSeparator, TEST_LOCATION );
+
+  TextViewProcessor::WordLayoutInfo wordLayoutInfo2( wordLayoutInfo );
+
+  DALI_TEST_EQUALS( wordLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordLayoutInfo2.mType, TextViewProcessor::LineSeparator, TEST_LOCATION );
+
+
+  TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo;
+  wordGroupLayoutInfo.mSize = Vector2( 1.f, 1.f );
+  wordGroupLayoutInfo.mAscender = 1.f;
+  wordGroupLayoutInfo.mDirection = TextViewProcessor::RTL;
+  wordGroupLayoutInfo.mNumberOfCharacters = 1u;
+
+  TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo1;
+  wordGroupLayoutInfo1 = wordGroupLayoutInfo;
+
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mDirection, TextViewProcessor::RTL, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mNumberOfCharacters, 1u, TEST_LOCATION );
+
+  TextViewProcessor::WordGroupLayoutInfo wordGroupLayoutInfo2( wordGroupLayoutInfo );
+
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mDirection, TextViewProcessor::RTL, TEST_LOCATION );
+  DALI_TEST_EQUALS( wordGroupLayoutInfo.mNumberOfCharacters, 1u, TEST_LOCATION );
+
+
+  TextViewProcessor::LineLayoutInfo lineLayoutInfo;
+  lineLayoutInfo.mSize = Vector2( 1.f, 1.f );
+  lineLayoutInfo.mAscender = 1.f;
+  lineLayoutInfo.mLineHeightOffset = 1.f;
+  lineLayoutInfo.mNumberOfCharacters = 1u;
+
+  TextViewProcessor::LineLayoutInfo lineLayoutInfo1;
+  lineLayoutInfo1 = lineLayoutInfo;
+
+  DALI_TEST_EQUALS( lineLayoutInfo1.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo1.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo1.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
+
+  TextViewProcessor::LineLayoutInfo lineLayoutInfo2( lineLayoutInfo );
+
+  DALI_TEST_EQUALS( lineLayoutInfo2.mSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo2.mAscender, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo2.mLineHeightOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( lineLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
+
+  TextViewProcessor::TextLayoutInfo textLayoutInfo;
+  textLayoutInfo.mWholeTextSize = Vector2( 1.f, 1.f );
+  textLayoutInfo.mMaxWordWidth = 1.f;
+  textLayoutInfo.mNumberOfCharacters = 1u;
+  textLayoutInfo.mMaxItalicsOffset = 1.f;
+
+  TextViewProcessor::TextLayoutInfo textLayoutInfo1;
+  textLayoutInfo1 = textLayoutInfo;
+
+  DALI_TEST_EQUALS( textLayoutInfo1.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo1.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo1.mNumberOfCharacters, 1u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo1.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+  TextViewProcessor::TextLayoutInfo textLayoutInfo2( textLayoutInfo );
+
+  DALI_TEST_EQUALS( textLayoutInfo2.mWholeTextSize, Vector2( 1.f, 1.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo2.mMaxWordWidth, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo2.mNumberOfCharacters, 1u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textLayoutInfo2.mMaxItalicsOffset, 1.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+}
+
+static void UtcDaliTextViewEqualityOperator()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewEqualityOperator : ");
+
+  TextViewProcessor::TextInfoIndices indices;
+  TextViewProcessor::TextInfoIndices indices1( 1u, 1u, 1u, 1u );
+
+  DALI_TEST_CHECK( !( indices == indices1 ) );
+
+  indices = indices1;
+
+  DALI_TEST_CHECK( indices == indices1 );
+}
diff --git a/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor.cpp b/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Processor.cpp
new file mode 100644 (file)
index 0000000..8f9a85e
--- /dev/null
@@ -0,0 +1,428 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.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://floralicense.org/license/
+//
+// 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.
+//
+
+#include <iostream>
+
+#include <stdlib.h>
+#include <tet_api.h>
+
+#include <dali/public-api/dali-core.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit-test-suite-utils.h>
+
+// Internal headers are allowed here
+#include <dali-toolkit/internal/controls/text-view/text-processor.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+using namespace Dali::Toolkit::Internal;
+
+namespace
+{
+// Data structures used to create an 'experiment' in TET cases
+
+//////////////////////////////////////////////////////////////////
+
+struct BeginsRightToLeftCharacterTest
+{
+  std::string description;
+  std::string input;
+  bool result;
+};
+
+bool TestBeginsRightToLeftCharacter( const std::string& description, const std::string& input, const bool result, const char* location )
+{
+  // Creates a styled text with the markup or plain string.
+  MarkupProcessor::StyledTextArray styledText;
+  MarkupProcessor::GetStyledTextArray( input, styledText );
+
+  const bool ret = ( result == TextProcessor::BeginsRightToLeftCharacter( styledText ) );
+
+  if( !ret )
+  {
+    tet_printf( "Fail. %s", location );
+    tet_printf( "Input : %s", input.c_str() );
+  }
+
+  return ret;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct ContainsRightToLeftCharacterTest
+{
+  std::string description;
+  std::string input;
+  bool result;
+};
+
+bool TestContainsRightToLeftCharacter( const std::string& description, const std::string& input, const bool result, const char* location )
+{
+  // Creates a styled text with the markup or plain string.
+  MarkupProcessor::StyledTextArray styledText;
+  MarkupProcessor::GetStyledTextArray( input, styledText );
+
+  const bool ret = ( result == TextProcessor::ContainsRightToLeftCharacter( styledText ) );
+
+  if( !ret )
+  {
+    tet_printf( "Fail. %s", location );
+    tet_printf( "Input : %s", input.c_str() );
+  }
+
+  return ret;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct FindNearestWordTest
+{
+  std::string description;
+  std::string input;
+  std::size_t offset;
+  std::size_t start;
+  std::size_t end;
+};
+
+bool TestFindNearestWord( const std::string& description, const std::string& input, const std::size_t offset, const std::size_t startResult, const std::size_t endResult, const char* location )
+{
+  // Creates a styled text with the markup or plain string.
+  MarkupProcessor::StyledTextArray styledText;
+  MarkupProcessor::GetStyledTextArray( input, styledText );
+
+  std::size_t start;
+  std::size_t end;
+  TextProcessor::FindNearestWord( styledText, offset, start, end );
+
+  const bool ret = ( start == startResult ) && ( end == endResult );
+
+  if( !ret )
+  {
+    tet_printf( "Fail. %s", location );
+    tet_printf( "Input : %s, offset %d, start %d, end %d", input.c_str(), offset, start, end );
+  }
+
+  return ret;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct SplitInLinesTest
+{
+  std::string inputText;
+
+  std::size_t resultNumberOfLines;
+};
+
+bool TestSplitInLines( const SplitInLinesTest& test, const char* location )
+{
+  // Creates a styled text with the markup or plain string.
+  MarkupProcessor::StyledTextArray styledText;
+  MarkupProcessor::GetStyledTextArray( test.inputText, styledText );
+
+  std::vector<MarkupProcessor::StyledTextArray> lines;
+
+  TextProcessor::SplitInLines( styledText,
+                               lines );
+
+  if( lines.size() != test.resultNumberOfLines )
+  {
+    tet_printf( "Fail. %s", location );
+    tet_printf( "Different number of lines, result %d, expected result %d", lines.size(), test.resultNumberOfLines );
+
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct SplitInWordsTest
+{
+  std::string inputText;
+
+  std::size_t resultNumberOfWords;
+};
+
+bool TestSplitInWords( const SplitInWordsTest& test, const char* location )
+{
+  // Creates a styled text with the markup or plain string.
+  MarkupProcessor::StyledTextArray styledText;
+  MarkupProcessor::GetStyledTextArray( test.inputText, styledText );
+
+  std::vector<MarkupProcessor::StyledTextArray> words;
+
+  TextProcessor::SplitInWords( styledText,
+                               words );
+
+  if( words.size() != test.resultNumberOfWords )
+  {
+    tet_printf( "Fail. %s", location );
+    tet_printf( "Different number of words, result %d, expected result %d", words.size(), test.resultNumberOfWords );
+
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+
+} // namespace
+
+static void Startup();
+static void Cleanup();
+
+extern "C" {
+  void (*tet_startup)() = Startup;
+  void (*tet_cleanup)() = Cleanup;
+}
+
+enum {
+  POSITIVE_TC_IDX = 0x01,
+  NEGATIVE_TC_IDX,
+};
+
+#define MAX_NUMBER_OF_TESTS 10000
+extern "C" {
+  struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
+}
+
+// Add test functionality for all APIs in the class (Positive and Negative)
+TEST_FUNCTION( UtcDaliTextViewSplitInLines, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextViewSplitInWords, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextViewBeginsRightToLeftCharacter, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextViewContainsRightToLeftCharacter, POSITIVE_TC_IDX );
+TEST_FUNCTION( UtcDaliTextViewFindNearestWord, POSITIVE_TC_IDX );
+// TEST_FUNCTION( , POSITIVE_TC_IDX );
+// TEST_FUNCTION( , NEGATIVE_TC_IDX );
+
+// Called only once before first test is run.
+static void Startup()
+{
+}
+
+// Called only once after last test is run
+static void Cleanup()
+{
+}
+
+static void UtcDaliTextViewSplitInLines()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewSplitInLines : ");
+
+  struct SplitInLinesTest splitInLinesTest[] =
+  {
+    {
+      std::string( "Hello world\nhello world." ),
+      2
+    },
+    {
+      std::string( "Hello world\nhello world.\n\n" ),
+      4
+    }
+  };
+  const std::size_t numberOfTests( 2 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const SplitInLinesTest& test = splitInLinesTest[index];
+
+    if( !TestSplitInLines( test, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewSplitInWords()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewSplitInWords : ");
+
+  struct SplitInWordsTest splitInWordsTest[] =
+  {
+    {
+      std::string( "Hello world, hello word!" ),
+      7
+    },
+  };
+  const std::size_t numberOfTests( 1 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const SplitInWordsTest& test = splitInWordsTest[index];
+
+    if( !TestSplitInWords( test, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewBeginsRightToLeftCharacter()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewBeginsRightToLeftCharacter : ");
+
+  struct BeginsRightToLeftCharacterTest beginsRightToLeftCharacterTest[] =
+  {
+    {
+      std::string( "Test if it begins with a right to left character. Should return false." ),
+      std::string( "Hello world مرحبا العالم." ),
+      false
+    },
+    {
+      std::string( "Test if it begins with a right to left character. Should return true." ),
+      std::string( "مرحبا العالم Hola mundo." ),
+      true
+    }
+  };
+  const std::size_t numberOfTests( 2 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const BeginsRightToLeftCharacterTest& test = beginsRightToLeftCharacterTest[index];
+
+    if( !TestBeginsRightToLeftCharacter( test.description, test.input, test.result, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewContainsRightToLeftCharacter()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewContainsRightToLeftCharacter : ");
+
+  struct ContainsRightToLeftCharacterTest containsRightToLeftCharacterTest[] =
+  {
+    {
+      std::string( "Test if it contains a right to left character. Should return true." ),
+      std::string( "Hello world مرحبا العالم." ),
+      true
+    },
+    {
+      std::string( "Test if it contains a right to left character. Should return true." ),
+      std::string( "مرحبا العالم Hola mundo." ),
+      true
+    },
+    {
+      std::string( "Test if it contains a right to left character. Should return false." ),
+      std::string( "Hello world." ),
+      false
+    },
+    {
+      std::string( "Test if it contains a right to left character. Should return true." ),
+      std::string( "مرحبا العالم." ),
+      true
+    }
+  };
+  const std::size_t numberOfTests( 4 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const ContainsRightToLeftCharacterTest& test = containsRightToLeftCharacterTest[index];
+
+    if( !TestContainsRightToLeftCharacter( test.description, test.input, test.result, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewFindNearestWord()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewFindNearestWord : ");
+
+  struct FindNearestWordTest findNearestWordTest[] =
+  {
+    {
+      std::string( "" ),
+      std::string( "Hello world, hola mundo" ),
+      0u,
+      0u,
+      5u
+    },
+    {
+      std::string( "" ),
+      std::string( "Hello world, hola mundo" ),
+      7u,
+      6u,
+      12u
+    },
+    {
+      std::string( "" ),
+      std::string( "Hello world, hola mundo" ),
+      11u,
+      6u,
+      12u
+    },
+    {
+      std::string( "" ),
+      std::string( "Hello world, hola mundo" ),
+      23u,
+      18u,
+      23u
+    },
+    {
+      std::string( "" ),
+      std::string( "Hello world, hola mundo" ),
+      5u,
+      0u,
+      5u
+    },
+    {
+      std::string( "" ),
+      std::string( "Hello world, hola mundo  مرحبا العالم" ),
+      24u,
+      25u,
+      30u
+    }
+  };
+
+  const std::size_t numberOfTests( 6 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const FindNearestWordTest& test = findNearestWordTest[index];
+
+    if( !TestFindNearestWord( test.description, test.input, test.offset, test.start, test.end, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
diff --git a/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Relayout-Utilities.cpp b/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView-Relayout-Utilities.cpp
new file mode 100644 (file)
index 0000000..9b5ddef
--- /dev/null
@@ -0,0 +1,856 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.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://floralicense.org/license/
+//
+// 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.
+//
+
+#include <iostream>
+
+#include <stdlib.h>
+#include <tet_api.h>
+
+#include <dali/public-api/dali-core.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit-test-suite-utils.h>
+
+// Internal headers are allowed here
+#include <dali-toolkit/internal/controls/text-view/relayout-utilities.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-processor.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+using namespace Dali::Toolkit::Internal;
+
+namespace
+{
+
+const Toolkit::Internal::TextView::LayoutParameters DEFAULT_LAYOUT_PARAMETERS;
+
+// Data structures used to create an 'experiment' in TET cases
+
+
+bool TestEqual( float x, float y )
+{
+  return ( fabsf( x - y ) < Math::MACHINE_EPSILON_1000 );
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct CalculateSubLineLayoutTest
+{
+  std::string description;
+  std::string inputLine;
+  float parentWidth;
+  std::size_t groupIndex;
+  std::size_t wordIndex;
+  std::size_t characterIndex;
+  TextViewRelayout::HorizontalWrapType splitPolicy;
+  float shrinkFactor;
+
+  float resultLineLength;
+  float resultMaxCharHeight;
+  float resultMaxAscender;
+};
+
+bool TestCalculateSubLineLayout( const CalculateSubLineLayoutTest& test,  const char* location )
+{
+  tet_printf( "%s", test.description.c_str() );
+
+  // Create styled text.
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( test.inputLine, inputStyledText );
+
+  // Create styled text layout info.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  // Prepare input parameters and the result structure and call the function to be tested.
+
+  // Creaqte indices.
+  TextViewProcessor::TextInfoIndices indices( 0, test.groupIndex, test.wordIndex, test.characterIndex );
+
+  // Get the input line.
+  TextViewProcessor::LineLayoutInfo inputLineLayout;
+
+  if( !relayoutData.mTextLayoutInfo.mLinesLayoutInfo.empty() )
+  {
+    inputLineLayout = *relayoutData.mTextLayoutInfo.mLinesLayoutInfo.begin();
+  }
+
+  // Result struct.
+  TextViewRelayout::SubLineLayoutInfo resultLayoutInfo;
+
+  CalculateSubLineLayout( test.parentWidth,
+                          indices,
+                          inputLineLayout,
+                          test.splitPolicy,
+                          test.shrinkFactor,
+                          resultLayoutInfo  );
+
+  // Check results.
+  if( !TestEqual( test.resultLineLength, resultLayoutInfo.mLineLength ) )
+  {
+    tet_printf( "Fail. different line length %f == %f. %s", test.resultLineLength, resultLayoutInfo.mLineLength, location );
+    return false;
+  }
+
+  if( !TestEqual( test.resultMaxCharHeight, resultLayoutInfo.mMaxCharHeight ) )
+  {
+    tet_printf( "Fail. different max character height %f == %f. %s", test.resultMaxCharHeight, resultLayoutInfo.mMaxCharHeight, location );
+    return false;
+  }
+
+  if( !TestEqual( test.resultMaxAscender, resultLayoutInfo.mMaxAscender ) )
+  {
+    tet_printf( "Fail. different max ascender %f == %f. %s", test.resultMaxAscender, resultLayoutInfo.mMaxAscender, location );
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct AlignmentOffsetTest
+{
+  Toolkit::Alignment::Type alignment;
+  float parentSize;
+  float wholeTextSize;
+
+  float resultOffset;
+};
+
+bool TestAlignmentOffset( const AlignmentOffsetTest& test, const char* location )
+{
+  float offset = 0.f;
+
+  switch( test.alignment )
+  {
+    case Toolkit::Alignment::HorizontalLeft:
+    case Toolkit::Alignment::HorizontalCenter:
+    case Toolkit::Alignment::HorizontalRight:
+    {
+      offset = TextViewRelayout::CalculateXoffset( test.alignment, test.parentSize, test.wholeTextSize );
+      break;
+    }
+    case Toolkit::Alignment::VerticalTop:
+    case Toolkit::Alignment::VerticalCenter:
+    case Toolkit::Alignment::VerticalBottom:
+    {
+      offset = TextViewRelayout::CalculateYoffset( test.alignment, test.parentSize, test.wholeTextSize );
+      break;
+    }
+  }
+
+  // Check results.
+  if( !TestEqual( test.resultOffset, offset ) )
+  {
+    tet_printf( "Fail. different offset %f == %f. %s", test.resultOffset, offset, location );
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct JustificationOffsetTest
+{
+  Toolkit::TextView::LineJustification justification;
+  float wholeTextWidth;
+  float lineLength;
+
+  float resultOffset;
+};
+
+bool TestJustificationOffset( const JustificationOffsetTest& test, const char* location )
+{
+  float offset = TextViewRelayout::CalculateJustificationOffset( test.justification, test.wholeTextWidth, test.lineLength );
+
+  // Check results.
+  if( !TestEqual( test.resultOffset, offset ) )
+  {
+    tet_printf( "Fail. different offset %f == %f. %s", test.resultOffset, offset, location );
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+
+struct CalculateVisibilityTest
+{
+  Vector3 position;
+  Size size;
+  Size parentSize;
+  TextViewRelayout::VisibilityTestType type;
+
+  bool resultVisible;
+};
+
+bool TestCalculateVisibility( const CalculateVisibilityTest& test, const char* location )
+{
+  if( test.resultVisible != TextViewRelayout::IsVisible( test.position, test.size, test.parentSize, test.type ) )
+  {
+    tet_printf( "Fail. different visibility. Type %d, %s", test.type, location );
+    return false;
+  }
+
+  return true;
+}
+
+//////////////////////////////////////////////////////////////////
+
+} // namespace
+
+static void Startup();
+static void Cleanup();
+
+extern "C" {
+  void (*tet_startup)() = Startup;
+  void (*tet_cleanup)() = Cleanup;
+}
+
+enum {
+  POSITIVE_TC_IDX = 0x01,
+  NEGATIVE_TC_IDX,
+};
+
+#define MAX_NUMBER_OF_TESTS 10000
+extern "C" {
+  struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
+}
+
+// Add test functionality for all APIs in the class (Positive and Negative)
+TEST_FUNCTION( UtcDaliTextViewDefaultConstructorDestructor, POSITIVE_TC_IDX );  // Calls structs's default constructor and destructors and checks their default values.
+TEST_FUNCTION( UtcDaliTextViewCalculateSubLineLayout, POSITIVE_TC_IDX );        // Checks the function which calculates the layout info of the portion of the line which fits on the text-view width.
+TEST_FUNCTION( UtcDaliTextViewCalculateAlignmentOffsets, POSITIVE_TC_IDX );     // Checks the horizontal and vertical alignaments (for the whole text).
+TEST_FUNCTION( UtcDaliTextViewCalculateJustificationOffsets, POSITIVE_TC_IDX ); // Checks the justification alignment (line per line).
+TEST_FUNCTION( UtcDaliTextViewCalculateVisibility, POSITIVE_TC_IDX );           // Checks the text-actor visibility within the text-view with a rectangle intersection test.
+
+TEST_FUNCTION( UtcDaliTextViewMiscelaneousAsserts, NEGATIVE_TC_IDX );           // Tests some strange asserts.
+
+// Called only once before first test is run.
+static void Startup()
+{
+}
+
+// Called only once after last test is run
+static void Cleanup()
+{
+}
+
+static void UtcDaliTextViewDefaultConstructorDestructor()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewDefaultConstructorDestructor : ");
+
+  // Test RelayoutParameters defaults.
+  TextViewRelayout::RelayoutParameters relayoutParameters;
+
+  DALI_TEST_EQUALS( relayoutParameters.mPositionOffset, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mLineSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mWordSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mCharacterSize, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mIndices.mLineIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mIndices.mGroupIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mIndices.mWordIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mIndices.mCharacterIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( relayoutParameters.mCharacterGlobalIndex, 0u, TEST_LOCATION );
+  DALI_TEST_CHECK( !relayoutParameters.mIsFirstCharacter );
+  DALI_TEST_CHECK( !relayoutParameters.mIsFirstCharacterOfWord );
+  DALI_TEST_CHECK( !relayoutParameters.mIsNewLine );
+  DALI_TEST_CHECK( !relayoutParameters.mIsNewLineCharacter );
+  DALI_TEST_CHECK( !relayoutParameters.mIsWhiteSpace );
+  DALI_TEST_CHECK( !relayoutParameters.mIsVisible );
+
+  // Test FadeParameter defaults
+  TextViewRelayout::FadeParameters fadeParameters;
+
+  DALI_TEST_EQUALS( fadeParameters.mRightFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mRightFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mRightFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mRightFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mRightAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mLeftFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mLeftFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mLeftFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mLeftFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mLeftAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mTopFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mTopFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mTopFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mTopFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mTopAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mBottomFadeBoundary, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mBottomFadeThreshold, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mBottomFadeBoundaryOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mBottomFadeThresholdOffset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( fadeParameters.mBottomAlphaCoeficients, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_CHECK( !fadeParameters.mIsPartiallyVisible );
+
+  // Test EllipsizeParameters defaults
+  TextViewRelayout::EllipsizeParameters ellipsizeParameters;
+
+  DALI_TEST_EQUALS( ellipsizeParameters.mPosition, Vector3::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( ellipsizeParameters.mLineDescender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( ellipsizeParameters.mLineWidth, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( ellipsizeParameters.mEllipsizeBoundary, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( ellipsizeParameters.mFirstIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( ellipsizeParameters.mLastIndex, 0u, TEST_LOCATION );
+  DALI_TEST_CHECK( !ellipsizeParameters.mEllipsizeLine );
+  DALI_TEST_CHECK( !ellipsizeParameters.mIsLineWidthFullyVisible );
+  DALI_TEST_CHECK( !ellipsizeParameters.mIsLineHeightFullyVisible );
+  DALI_TEST_CHECK( !ellipsizeParameters.mIsNextLineFullyVisibleHeight );
+  DALI_TEST_CHECK( !ellipsizeParameters.mCreateEllipsizedTextActors );
+  DALI_TEST_CHECK( !ellipsizeParameters.mLineFits );
+  DALI_TEST_CHECK( !ellipsizeParameters.mWordFits );
+
+  // Test UnderlineInfo defaults
+  TextViewRelayout::UnderlineInfo underlineInfo;
+
+  DALI_TEST_EQUALS( underlineInfo.mMaxHeight, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( underlineInfo.mMaxThickness, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( underlineInfo.mPosition, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+  // Test TextUnderlineStatus defaults
+  TextViewRelayout::TextUnderlineStatus textUnderlineStatus;
+
+  DALI_TEST_CHECK( textUnderlineStatus.mUnderlineInfo.empty() );
+  DALI_TEST_EQUALS( textUnderlineStatus.mCharacterGlobalIndex, 0u, TEST_LOCATION );
+  DALI_TEST_EQUALS( textUnderlineStatus.mLineGlobalIndex, 0u, TEST_LOCATION );
+  DALI_TEST_CHECK( !textUnderlineStatus.mCurrentUnderlineStatus );
+
+  // Test SubLineLayoutInfo defaults
+  TextViewRelayout::SubLineLayoutInfo subLineLayoutInfo;
+
+  DALI_TEST_EQUALS( subLineLayoutInfo.mLineLength, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( subLineLayoutInfo.mMaxCharHeight, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+  DALI_TEST_EQUALS( subLineLayoutInfo.mMaxAscender, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+}
+
+static void UtcDaliTextViewCalculateSubLineLayout()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewCalculateSubLineLayout : ");
+
+  struct CalculateSubLineLayoutTest calculateSubLineLayoutTest[] =
+  {
+    //WrapByCharacter
+    {
+      "The line is wraped by character. All characters have the same size.",
+      "Hello world", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices
+      0,
+      TextViewRelayout::WrapByCharacter, // split policy
+      1.f,
+      // results
+      91.041672f, // line length. (only fits 8 characters 8x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by character. There are characters with different sizes.",
+      "Hello <font size='14'>world</font>", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices
+      0,
+      TextViewRelayout::WrapByCharacter, // split policy
+      1.f,
+      // results
+      94.835075f, // line length. (only fits 8 characters 6x11.38 + 2x13.27)
+      13.276911f, // max character height
+      11.949220f  // max ascender
+    },
+    {
+      "The line is wraped by character. There are characters with different sizes. It calculates the layout for the second line.",
+      "Hello <font size='14'>wo</font>rld hell<font size='14'>o world</font>", // input line
+      100.f,         // parent width
+      0,
+      2,              // indices. The third character of the third word starts in a new line.
+      2,
+      TextViewRelayout::WrapByCharacter, // split policy
+      1.f,
+      // results
+      91.041672f, // line length. (only fits 8 characters 8x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by character. There are characters with different sizes. It calculates the layout for the third line.",
+      "Hello <font size='14'>wo</font>rld hell<font size='14'>o world</font>", // input line
+      100.f,         // parent width
+      0,
+      4,              // indices. The fifth character of the fifth word starts in a new line.
+      4,
+      TextViewRelayout::WrapByCharacter, // split policy
+      1.f,
+      // results
+      92.938377f, // line length. (only fits 8 characters 8x11.38)
+      13.276911f, // max character height
+      11.949220f  // max ascender
+    },
+
+    //WrapByWord
+    {
+      "The line is wraped by word. All characters have the same size.",
+      "Hello world", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices. It shouldn't use the index character so 9999999 shouldn't make it crash.
+      9999999,
+      TextViewRelayout::WrapByWord, // split policy
+      1.f,
+      // results
+      56.901047f, // line length. (only fits 5 characters 5x11.38, white space is not counted)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by word. There are characters with different sizes.",
+      "Hell<font size='14'>o</font> world", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices.
+      0,
+      TextViewRelayout::WrapByWord, // split policy
+      1.f,
+      // results
+      58.797747f, // line length. (only fits 5 characters 4x11.38 + 13.276911, white space is not counted)
+      13.276911f, // max character height
+      11.949220f  // max ascender
+    },
+    {
+      "The line is wraped by word. There are characters with different sizes. It calculates the layout for the second line.",
+      "Hello <font size='14'>wo</font>rld <font size='16'>hello world</font>", // input line
+      100.f,         // parent width
+      0,
+      2,              // indices. The third word starts in a new line.
+      0,
+      TextViewRelayout::WrapByWord, // split policy
+      1.f,
+      // results
+      60.694449f, // line length. (only fits 5 characters 2x13.276911 + 3x11.38)
+      13.276911f, // max character height
+      11.949220f  // max ascender
+    },
+    {
+      "The line is wraped by word. The word doen't fit.",
+      "Hello world", // input line
+      40.f,          // parent width
+      0,
+      0,              // indices. The third word starts in a new line.
+      0,
+      TextViewRelayout::WrapByWord, // split policy
+      1.f,
+      // results
+      0.f,        // line length. (The word doesn't fit)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+
+    //WrapByWordAndSplit
+    {
+      "The line is wraped by word and by character. All characters have the same size. There is not a long word.",
+      "Hello world hello world", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices.
+      0,
+      TextViewRelayout::WrapByWordAndSplit, // split policy
+      1.f,
+      // results
+      56.901047f, // line length. (only fits 5 characters 5x11.38, white space is not counted)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by word and by character. All characters have the same size. There is a long word.",
+      "Helloooooooo world", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices.
+      0,
+      TextViewRelayout::WrapByWordAndSplit, // split policy
+      1.f,
+      // results
+      91.041672f, // line length. (only fits 8 characters 8x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by word and by character. There are characters with different sizes. There is a long word. It calculates the layout for the second line.",
+      "Helloooooooo <font size='14'>world</font>", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices.
+      8,
+      TextViewRelayout::WrapByWordAndSplit, // split policy
+      1.f,
+      // results
+      45.520836f, // line length. (only fits 8 characters 8x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by word and by character. There are characters with different sizes. There is a shrink factor.",
+      "Helloooooooo<font size='14'> world</font>", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices.
+      8,
+      TextViewRelayout::WrapByWordAndSplit, // split policy
+      0.7f,
+      // results
+      95.593755f, // line length. (only fits 12 characters 8x11.38)
+      7.9661463f, // max character height
+      7.169531f  // max ascender
+    },
+
+    //WrapByLineAndSplit
+    {
+      "The line is wraped by end of line and by character. All characters have the same size.",
+      "Hello world", // input line
+      100.f,         // parent width
+      0,
+      0,              // indices
+      0,
+      TextViewRelayout::WrapByLineAndSplit, // split policy
+      1.f,
+      // results
+      91.041672f, // line length. (only fits 8 characters 8x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line fits in the width.",
+      "Hello", // input line
+      100.f,         // parent width
+      0,
+      0,             // indices
+      0,
+      TextViewRelayout::WrapByLineAndSplit, // split policy
+      1.f,
+      // results
+      56.901047f, // line length. (only fits 5 characters 5x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+    {
+      "The line is wraped by end of line and by character. All characters have the same size. It calculates the layout for the second line.",
+      "Hello world, hello world", // input line
+      100.f,         // parent width
+      0,
+      2,             // indices
+      2,
+      TextViewRelayout::WrapByLineAndSplit, // split policy
+      1.f,
+      // results
+      91.041672f, // line length. (only fits 8 characters 8x11.38)
+      11.380209f, // max character height
+      10.242188f  // max ascender
+    },
+  };
+  const std::size_t numberOfTests( 15 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const CalculateSubLineLayoutTest& test = calculateSubLineLayoutTest[index];
+
+    if( !TestCalculateSubLineLayout( test, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewCalculateAlignmentOffsets()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewCalculateAlignmentOffsets : ");
+
+  struct AlignmentOffsetTest alignmentOffsetTest[] =
+  {
+    {
+      Toolkit::Alignment::HorizontalLeft,
+      100.f,
+      75.f,
+      0.f
+    },
+    {
+      Toolkit::Alignment::HorizontalCenter,
+      100.f,
+      75.f,
+      12.5f
+    },
+    {
+      Toolkit::Alignment::HorizontalRight,
+      100.f,
+      75.f,
+      25.f
+    },
+    {
+      Toolkit::Alignment::VerticalTop,
+      100.f,
+      75.f,
+      0.f
+    },
+    {
+      Toolkit::Alignment::VerticalCenter,
+      100.f,
+      75.f,
+      12.5f
+    },
+    {
+      Toolkit::Alignment::VerticalBottom,
+      100.f,
+      75.f,
+      25.f
+    }
+  };
+  const std::size_t numberOfTests( 6 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const AlignmentOffsetTest& test = alignmentOffsetTest[index];
+
+    if( !TestAlignmentOffset( test, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewCalculateJustificationOffsets()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewCalculateJustificationOffsets : ");
+
+  struct JustificationOffsetTest justificationOffsetTest[] =
+  {
+    {
+      Toolkit::TextView::Left,
+      100.f,
+      75.f,
+      0.f
+    },
+    {
+      Toolkit::TextView::Justified,
+      100.f,
+      75.f,
+      0.f
+    },
+    {
+      Toolkit::TextView::Center,
+      100.f,
+      150.f,
+      -25.f
+    },
+    {
+      Toolkit::TextView::Right,
+      100.f,
+      75.f,
+      25.f
+    },
+  };
+  const std::size_t numberOfTests( 4 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const JustificationOffsetTest& test = justificationOffsetTest[index];
+
+    if( !TestJustificationOffset( test, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+
+static void UtcDaliTextViewCalculateVisibility()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewCalculateVisibility : ");
+
+  struct CalculateVisibilityTest calculateVisibilityTest[] =
+  {
+    {
+      Vector3( 0.f, 10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE,
+      true
+    },
+    {
+      Vector3( 10.f, 10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE,
+      true
+    },
+    {
+      Vector3( 0.f, 10.f, 0.f ),
+      Size( 150.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE,
+      false
+    },
+    {
+      Vector3( 0.f, 10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE_WIDTH,
+      true
+    },
+    {
+      Vector3( 95.f, 10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE_WIDTH,
+      false
+    },
+    {
+      Vector3( 0.f, 10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE_HEIGHT,
+      true
+    },
+    {
+      Vector3( 0.f, 0.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::FULLY_VISIBLE_HEIGHT,
+      false
+    },
+    {
+      Vector3( -10.f, 10.f, 0.f ),
+      Size( 150.f, 150.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::PARTIALLY_VISIBLE,
+      true
+    },
+    {
+      Vector3( -100.f, -100.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::PARTIALLY_VISIBLE,
+      false
+    },
+    {
+      Vector3( -10.f, 10.f, 0.f ),
+      Size( 50.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::PARTIALLY_VISIBLE_WIDTH,
+      true
+    },
+    {
+      Vector3( 110.f, 10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::PARTIALLY_VISIBLE_WIDTH,
+      false
+    },
+    {
+      Vector3( 0.f, 20.f, 0.f ),
+      Size( 10.f, 50.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::PARTIALLY_VISIBLE_HEIGHT,
+      true
+    },
+    {
+      Vector3( 0.f, -10.f, 0.f ),
+      Size( 10.f, 10.f ),
+      Size( 100.f, 100.f ),
+      TextViewRelayout::PARTIALLY_VISIBLE_HEIGHT,
+      false
+    },
+  };
+  const std::size_t numberOfTests( 13 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const CalculateVisibilityTest& test = calculateVisibilityTest[index];
+
+    if( !TestCalculateVisibility( test, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewMiscelaneousAsserts()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewMiscelaneousAsserts : ");
+
+  float offset = 0.f;
+
+  bool assert1 = false;
+  bool assert2 = false;
+  try
+  {
+    offset = Toolkit::Internal::TextViewRelayout::CalculateXoffset( Toolkit::Alignment::VerticalTop, 100.f, 50.f );
+  }
+  catch( Dali::DaliException& e )
+  {
+    tet_printf( "Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str() );
+    DALI_TEST_EQUALS( e.mCondition, "!\"TextViewRelayout::CalculateXoffset: Wrong horizontal text alignment. Did you set a vertical one?\"", TEST_LOCATION );
+    assert1 = true;
+  }
+  catch( ... )
+  {
+    tet_result( TET_FAIL );
+  }
+  DALI_TEST_EQUALS( offset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+  try
+  {
+    offset = Toolkit::Internal::TextViewRelayout::CalculateYoffset( Toolkit::Alignment::HorizontalRight, 100.f, 50.f );
+  }
+  catch( Dali::DaliException& e )
+  {
+    tet_printf( "Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str() );
+    DALI_TEST_EQUALS( e.mCondition, "!\"TextViewRelayout::CalculateXoffset: Wrong vertical text alignment. Did you set an horizontal one?\"", TEST_LOCATION );
+    assert2 = true;
+  }
+  catch( ... )
+  {
+    tet_result( TET_FAIL );
+  }
+  DALI_TEST_EQUALS( offset, 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+  DALI_TEST_CHECK( assert1 && assert2 );
+
+}
diff --git a/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView.cpp b/automated-tests/dali-internal-test-suite/text-view/utc-Dali-TextView.cpp
new file mode 100644 (file)
index 0000000..6312da8
--- /dev/null
@@ -0,0 +1,2917 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Flora License, Version 1.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://floralicense.org/license/
+//
+// 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.
+//
+
+#include <iostream>
+
+#include <stdlib.h>
+#include <tet_api.h>
+
+#include <dali/public-api/dali-core.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <dali-toolkit-test-suite-utils.h>
+
+// Internal headers are allowed here
+#include <dali-toolkit/internal/controls/text-view/text-view-processor.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-line-processor.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-word-group-processor.h>
+#include <dali-toolkit/internal/controls/text-view/text-view-word-processor.h>
+#include <dali-toolkit/internal/controls/text-view/relayout-utilities.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+using namespace Dali::Toolkit::Internal;
+
+namespace
+{
+
+const Toolkit::Internal::TextView::LayoutParameters DEFAULT_LAYOUT_PARAMETERS;
+const Toolkit::Internal::TextView::VisualParameters DEFAULT_VISUAL_PARAMETERS;
+
+// Data structures used to create an 'experiment' in TET cases
+
+struct SplitWordTest
+{
+  std::string description;
+  std::string input;
+  std::size_t position;
+  std::string firstResult;
+  std::string lastResult;
+};
+
+struct SplitWordGroupTest
+{
+  std::string description;
+  std::string input;
+  std::size_t wordPosition;
+  std::size_t position;
+  std::string firstResult;
+  std::string lastResult;
+};
+
+struct SplitLineTest
+{
+  std::string description;
+  std::string input;
+  std::size_t groupPosition;
+  std::size_t wordPosition;
+  std::size_t position;
+  float       lineHeightOffset;
+  std::string firstResult;
+  std::string lastResult;
+};
+
+struct MergeWordsTest
+{
+  std::string description;
+  std::string inputFirst;
+  std::string inputLast;
+  std::string result;
+};
+
+struct MergeWordGroupsTest
+{
+  std::string description;
+  std::string inputFirst;
+  std::string inputLast;
+  std::string result;
+};
+
+struct MergeLinesTest
+{
+  std::string description;
+  std::string inputFirst;
+  std::string inputLast;
+  float       lineHeightOffset;
+  std::string result;
+};
+
+struct RemoveCharactersFromWordTest
+{
+  std::string description;
+  std::string input;
+  std::size_t position;
+  std::size_t numberOfCharacters;
+  std::string result;
+};
+
+struct RemoveWordsFromGroupTest
+{
+  std::string description;
+  std::string input;
+  std::size_t wordIndex;
+  std::size_t numberOfWords;
+  std::string result;
+};
+
+struct RemoveGroupsFromLineTest
+{
+  std::string description;
+  std::string input;
+  std::size_t groupIndex;
+  std::size_t numberOfGroups;
+  float       lineHeightOffset;
+  std::string result;
+};
+
+enum UpdateTextInfoOperation
+{
+  Insert,
+  Remove,
+  Replace
+};
+
+struct UpdateTextInfoTest
+{
+  std::string             description;
+  UpdateTextInfoOperation operation;
+  std::string             input;
+  std::size_t             position;
+  std::size_t             numberOfCharacters;
+  std::string             inputText;
+  float                   lineHeightOffset;
+  std::string             result;
+};
+
+// Useful Print functions when something goes wrong.
+
+void Print( const TextViewProcessor::CharacterLayoutInfo& character )
+{
+  std::cout << "             height : " << character.mHeight << std::endl;
+  std::cout << "            advance : " << character.mAdvance << std::endl;
+  std::cout << "            bearing : " << character.mBearing << std::endl;
+  std::cout << "          mPosition : " << character.mPosition << std::endl;
+  std::cout << "              mSize : " << character.mSize << std::endl;
+  std::cout << "          mAscender : " << character.mAscender << std::endl;
+
+  if( character.mTextActor )
+  {
+    std::cout << "[" << character.mTextActor.GetText() << "]";
+  }
+  else
+  {
+    std::cout << "{" << character.mStyledText.mText.GetText() << "}";
+  }
+}
+
+void Print( const TextViewProcessor::WordLayoutInfo& word )
+{
+  std::cout << "[";
+  std::cout << "              mSize : " << word.mSize << std::endl;
+  std::cout << "          mAscender : " << word.mAscender << std::endl;
+  std::cout << "              mType : " << word.mType << std::endl;
+  std::cout << "mNumberOfCharacters : " << word.mCharactersLayoutInfo.size() << std::endl;
+  std::cout << "[";
+  for( TextViewProcessor::CharacterLayoutInfoContainer::const_iterator it = word.mCharactersLayoutInfo.begin(), endIt = word.mCharactersLayoutInfo.end(); it != endIt; ++it )
+  {
+    Print( *it );
+  }
+  std::cout << "]"; std::cout << std::endl;
+  std::cout << "]"; std::cout << std::endl;
+}
+
+void Print( const TextViewProcessor::WordGroupLayoutInfo& wordGroup )
+{
+  std::cout << "(";
+  std::cout << "              mSize : " << wordGroup.mSize << std::endl;
+  std::cout << "          mAscender : " << wordGroup.mAscender << std::endl;
+  std::cout << "         mDirection : " << wordGroup.mDirection << std::endl;
+  std::cout << "mNumberOfCharacters : " << wordGroup.mNumberOfCharacters << std::endl;
+  for( TextViewProcessor::WordLayoutInfoContainer::const_iterator it = wordGroup.mWordsLayoutInfo.begin(), endIt = wordGroup.mWordsLayoutInfo.end(); it != endIt; ++it )
+  {
+    Print( *it );
+  }
+  std::cout << ")"; std::cout << std::endl;
+}
+
+void Print( const TextViewProcessor::LineLayoutInfo& line )
+{
+  std::cout << "<";
+  std::cout << "              mSize : " << line.mSize << std::endl;
+  std::cout << "          mAscender : " << line.mAscender << std::endl;
+  std::cout << "mNumberOfCharacters : " << line.mNumberOfCharacters << std::endl;
+  for( TextViewProcessor::WordGroupLayoutInfoContainer::const_iterator it = line.mWordGroupsLayoutInfo.begin(), endIt = line.mWordGroupsLayoutInfo.end(); it != endIt; ++it )
+  {
+    Print( *it );
+  }
+  std::cout << ">" << std::endl;
+}
+
+void Print( const TextViewProcessor::TextLayoutInfo& text )
+{
+  std::cout << "||";
+  for( TextViewProcessor::LineLayoutInfoContainer::const_iterator it = text.mLinesLayoutInfo.begin(), endIt = text.mLinesLayoutInfo.end(); it != endIt; ++it )
+  {
+    Print( *it );
+  }
+  std::cout << "||" << std::endl;
+}
+
+void Print( const TextStyle& style )
+{
+  std::cout << " font name : " << style.GetFontName() << std::endl;
+  std::cout << " : " << style.GetFontStyle() << std::endl;
+  std::cout << " : " << style.GetFontPointSize() << std::endl;
+  std::cout << " : " << style.GetWeight() << std::endl;
+  std::cout << " : " << style.GetTextColor() << std::endl;
+  std::cout << " : " << style.GetItalics() << std::endl;
+  std::cout << " : " << style.GetUnderline() << std::endl;
+  std::cout << " : " << style.GetShadow() << std::endl;
+  std::cout << " : " << style.GetShadowColor() << std::endl;
+  std::cout << " : " << style.GetShadowOffset() << std::endl;
+  std::cout << " : " << style.GetGlow() << std::endl;
+  std::cout << " : " << style.GetGlowColor() << std::endl;
+  std::cout << " : " << style.GetGlowIntensity() << std::endl;
+  std::cout << " : " << style.GetSmoothEdge() << std::endl;
+  std::cout << " : " << style.GetOutline() << std::endl;
+  std::cout << " : " << style.GetOutlineThickness() << std::endl;
+}
+
+// Test functions used to check if two data structures are equal.
+
+bool TestEqual( float x, float y )
+{
+  return ( fabsf( x - y ) < Math::MACHINE_EPSILON_1000 );
+}
+
+bool TestEqual( const TextViewProcessor::CharacterLayoutInfo& character1,
+                const TextViewProcessor::CharacterLayoutInfo& character2 )
+{
+  if( !TestEqual( character1.mHeight, character2.mHeight ) )
+  {
+    return false;
+  }
+  if( !TestEqual( character1.mAdvance, character2.mAdvance ) )
+  {
+    return false;
+  }
+  if( !TestEqual( character1.mBearing, character2.mBearing ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( character1.mPosition.x, character2.mPosition.x ) )
+  {
+    return false;
+  }
+  if( !TestEqual( character1.mPosition.y, character2.mPosition.y ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( character1.mSize.x, character2.mSize.x ) )
+  {
+    return false;
+  }
+  if( !TestEqual( character1.mSize.y, character2.mSize.y ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( character1.mAscender, character2.mAscender ) )
+  {
+    return false;
+  }
+
+  if( character1.mTextActor && !character2.mTextActor )
+  {
+    return false;
+  }
+
+  if( !character1.mTextActor && character2.mTextActor )
+  {
+    return false;
+  }
+
+  std::string text1;
+  std::string text2;
+  TextStyle style1;
+  TextStyle style2;
+
+  if( character1.mTextActor )
+  {
+    text1 = character1.mTextActor.GetText();
+    style1 = character1.mTextActor.GetTextStyle();
+
+    text2 = character2.mTextActor.GetText();
+    style2 = character2.mTextActor.GetTextStyle();
+  }
+
+  if( text1 != text2 )
+  {
+    return false;
+  }
+
+  if( style1 != style2 )
+  {
+    return false;
+  }
+
+  text1 = character1.mStyledText.mText.GetText();
+  style1 = character1.mStyledText.mStyle;
+
+  text2 = character2.mStyledText.mText.GetText();
+  style2 = character2.mStyledText.mStyle;
+
+  if( text1 != text2 )
+  {
+    return false;
+  }
+
+  if( style1 != style2 )
+  {
+    return false;
+  }
+
+  return true;
+}
+
+bool TestEqual( const TextViewProcessor::WordLayoutInfo& word1,
+                const TextViewProcessor::WordLayoutInfo& word2 )
+{
+  if( !TestEqual( word1.mSize.x, word2.mSize.x ) )
+  {
+    return false;
+  }
+  if( !TestEqual( word1.mSize.y, word2.mSize.y ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( word1.mAscender, word2.mAscender ) )
+  {
+    return false;
+  }
+
+  if( word1.mType != word2.mType )
+  {
+    return false;
+  }
+
+  if( word1.mCharactersLayoutInfo.size() != word2.mCharactersLayoutInfo.size() )
+  {
+    return false;
+  }
+
+  for( TextViewProcessor::CharacterLayoutInfoContainer::const_iterator it1 = word1.mCharactersLayoutInfo.begin(), endIt1 = word1.mCharactersLayoutInfo.end(),
+         it2 = word2.mCharactersLayoutInfo.begin(), endIt2 = word2.mCharactersLayoutInfo.end();
+       ( it1 != endIt1 ) && ( it2 != endIt2 );
+       ++it1, ++it2 )
+  {
+    if( !TestEqual( *it1, *it2 ) )
+    {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool TestEqual( const TextViewProcessor::WordGroupLayoutInfo& group1,
+                const TextViewProcessor::WordGroupLayoutInfo& group2 )
+{
+
+  if( group1.mNumberOfCharacters != group2.mNumberOfCharacters )
+  {
+    return false;
+  }
+
+  if( group1.mWordsLayoutInfo.size() != group2.mWordsLayoutInfo.size() )
+  {
+    return false;
+  }
+
+  if( !TestEqual( group1.mSize.x, group2.mSize.x ) )
+  {
+    return false;
+  }
+  if( !TestEqual( group1.mSize.y, group2.mSize.y ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( group1.mAscender, group2.mAscender ) )
+  {
+    return false;
+  }
+
+  if( group1.mDirection != group2.mDirection )
+  {
+    return false;
+  }
+
+  for( TextViewProcessor::WordLayoutInfoContainer::const_iterator it1 = group1.mWordsLayoutInfo.begin(), endIt1 = group1.mWordsLayoutInfo.end(),
+         it2 = group2.mWordsLayoutInfo.begin(), endIt2 = group2.mWordsLayoutInfo.end();
+       ( it1 != endIt1 ) && ( it2 != endIt2 );
+       ++it1, ++it2 )
+  {
+    if( !TestEqual( *it1, *it2 ) )
+    {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool TestEqual( const TextViewProcessor::LineLayoutInfo& line1,
+                const TextViewProcessor::LineLayoutInfo& line2 )
+{
+  if( !TestEqual( line1.mSize.x, line2.mSize.x ) )
+  {
+    return false;
+  }
+  if( !TestEqual( line1.mSize.y, line2.mSize.y ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( line1.mAscender, line2.mAscender ) )
+  {
+    return false;
+  }
+
+  if( line1.mNumberOfCharacters != line2.mNumberOfCharacters )
+  {
+    return false;
+  }
+
+  if( line1.mWordGroupsLayoutInfo.size() != line2.mWordGroupsLayoutInfo.size() )
+  {
+    return false;
+  }
+
+  for( TextViewProcessor::WordGroupLayoutInfoContainer::const_iterator it1 = line1.mWordGroupsLayoutInfo.begin(), endIt1 = line1.mWordGroupsLayoutInfo.end(),
+         it2 = line2.mWordGroupsLayoutInfo.begin(), endIt2 = line2.mWordGroupsLayoutInfo.end();
+       ( it1 != endIt1 ) && ( it2 != endIt2 );
+       ++it1, ++it2 )
+  {
+    if( !TestEqual( *it1, *it2 ) )
+    {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool TestEqual( const TextViewProcessor::TextLayoutInfo& text1,
+                const TextViewProcessor::TextLayoutInfo& text2 )
+{
+  if( !TestEqual( text1.mWholeTextSize.x, text2.mWholeTextSize.x ) )
+  {
+    return false;
+  }
+  if( !TestEqual( text1.mWholeTextSize.y, text2.mWholeTextSize.y ) )
+  {
+    return false;
+  }
+
+  if( !TestEqual( text1.mMaxWordWidth, text2.mMaxWordWidth ) )
+  {
+    return false;
+  }
+
+  if( text1.mNumberOfCharacters != text2.mNumberOfCharacters )
+  {
+    return false;
+  }
+
+  if( text1.mLinesLayoutInfo.size() != text2.mLinesLayoutInfo.size() )
+  {
+    return false;
+  }
+
+  for( TextViewProcessor::LineLayoutInfoContainer::const_iterator it1 = text1.mLinesLayoutInfo.begin(), endIt1 = text1.mLinesLayoutInfo.end(),
+         it2 = text2.mLinesLayoutInfo.begin(), endIt2 = text2.mLinesLayoutInfo.end();
+       ( it1 != endIt1 ) && ( it2 != endIt2 );
+       ++it1, ++it2 )
+  {
+    if( !TestEqual( *it1, *it2 ) )
+    {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+/**
+ * Splits the \e input word in two by the given \e position and checks the results with \e firstResult and \e lastResult.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment. i.e. "Split the word from the beginning. (position 0)".
+ * @param input The input word.
+ * @param position Where to split the word.
+ * @param firstResult First part of the split word.
+ * @param lastResult Last part of the split word.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestSplitWord( const std::string& description, const std::string& input, const size_t position, const std::string& firstResult, const std::string& lastResult, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input word.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  // Get the input word
+  TextViewProcessor::WordLayoutInfo inputWordLayout;
+
+  if( !inputLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        inputWordLayout = *( *( *inputLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  // Create layout info for the first part of the result (after split the word)
+
+  Toolkit::Internal::TextView::RelayoutData firstRelayoutData;
+  TextViewProcessor::TextLayoutInfo& firstResultLayout( firstRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray firstResultStyledText;
+  MarkupProcessor::GetStyledTextArray( firstResult, firstResultStyledText );
+
+  TextViewProcessor::CreateTextInfo( firstResultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     firstRelayoutData );
+
+  // Get the first result word
+  TextViewProcessor::WordLayoutInfo firstResultWordLayout;
+
+  if( !firstResultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *firstResultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        firstResultWordLayout = *( *( *firstResultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  // Create layout info for the last part of the result (after split the word)
+
+  Toolkit::Internal::TextView::RelayoutData lastRelayoutData;
+  TextViewProcessor::TextLayoutInfo& lastResultLayout( lastRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray lastResultStyledText;
+  MarkupProcessor::GetStyledTextArray( lastResult, lastResultStyledText );
+
+  TextViewProcessor::CreateTextInfo( lastResultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     lastRelayoutData );
+
+  // Get the last result word
+  TextViewProcessor::WordLayoutInfo lastResultWordLayout;
+
+  if( !lastResultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *lastResultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        lastResultWordLayout = *( *( *lastResultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  // Split the word.
+
+  TextViewProcessor::WordLayoutInfo lastWordLayoutInfo;
+
+  SplitWord( position,
+             inputWordLayout,
+             lastWordLayoutInfo );
+
+  // Test results
+  if( !TestEqual( inputWordLayout, firstResultWordLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  if( !TestEqual( lastWordLayoutInfo, lastResultWordLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Splits the \e input group of words in two by the given \e wordPosition and \e position and checks the results with \e firstResult and \e lastResult.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment. i.e. "Split the group of words from the beginning. (wordPosition 0 and position 0)".
+ * @param input The input word.
+ * @param wordPosition Index to the word within the group where to split the group.
+ * @param position Where to split the word.
+ * @param firstResult First part of the split group of words.
+ * @param lastResult Last part of the split group of words.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestSplitWordGroup( const std::string& description,
+                         const std::string& input,
+                         const size_t wordPosition,
+                         const size_t position,
+                         const std::string& firstResult,
+                         const std::string& lastResult,
+                         const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input group of words.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  // Get the input group of words
+  TextViewProcessor::WordGroupLayoutInfo inputWordGroupLayout;
+
+  if( !inputLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      inputWordGroupLayout = *( *inputLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  // Create layout info for the first part of the result (after split the group of words)
+
+  Toolkit::Internal::TextView::RelayoutData firstRelayoutData;
+  TextViewProcessor::TextLayoutInfo& firstResultLayout( firstRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray firstResultStyledText;
+  MarkupProcessor::GetStyledTextArray( firstResult, firstResultStyledText );
+
+  TextViewProcessor::CreateTextInfo( firstResultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     firstRelayoutData );
+
+  // Get the first result group of words
+  TextViewProcessor::WordGroupLayoutInfo firstResultWordGroupLayout;
+
+  if( !firstResultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *firstResultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      firstResultWordGroupLayout = *( *firstResultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  // Create layout info for the last part of the result (after split the group of words)
+
+  Toolkit::Internal::TextView::RelayoutData lastRelayoutData;
+  TextViewProcessor::TextLayoutInfo& lastResultLayout( lastRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray lastResultStyledText;
+  MarkupProcessor::GetStyledTextArray( lastResult, lastResultStyledText );
+
+  TextViewProcessor::CreateTextInfo( lastResultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     lastRelayoutData );
+
+  // Get the last result group of words
+  TextViewProcessor::WordGroupLayoutInfo lastResultWordGroupLayout;
+
+  if( !lastResultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *lastResultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      lastResultWordGroupLayout = *( *lastResultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  // Split the group of words.
+
+  TextViewProcessor::WordGroupLayoutInfo lastWordGroupLayoutInfo;
+
+  TextViewProcessor::TextInfoIndices indices( 0, 0, wordPosition, position );
+  SplitWordGroup( indices,
+                  inputWordGroupLayout,
+                  lastWordGroupLayoutInfo );
+
+  // Test results
+  if( !TestEqual( inputWordGroupLayout, firstResultWordGroupLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  if( !TestEqual( lastWordGroupLayoutInfo, lastResultWordGroupLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Splits the \e input line in two by the given \e groupPosition, \e wordPosition and \e position and checks the results with \e firstResult and \e lastResult.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment. i.e. "Split the line from the beginning. (groupPosition 0, wordPosition 0 and position 0)".
+ * @param input The input word.
+ * @param groupPosition Index to the group of words within the line where to split the line.
+ * @param wordPosition Index to the word within the group where to split the group.
+ * @param position Where to split the word.
+ * @param lineHeightOffset Offset between lines.
+ * @param firstResult First part of the split line.
+ * @param lastResult Last part of the split line.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestSplitLine( const std::string& description,
+                    const std::string& input,
+                    const size_t groupPosition,
+                    const size_t wordPosition,
+                    const size_t position,
+                    const float lineHeightOffset,
+                    const std::string& firstResult,
+                    const std::string& lastResult,
+                    const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input line.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     relayoutData );
+
+  // Get the input line
+  TextViewProcessor::LineLayoutInfo inputLineLayout;
+
+  if( !inputLayout.mLinesLayoutInfo.empty() )
+  {
+    inputLineLayout = *inputLayout.mLinesLayoutInfo.begin();
+  }
+
+  // Create layout info for the first part of the result (after split the line)
+
+  Toolkit::Internal::TextView::RelayoutData firstRelayoutData;
+  TextViewProcessor::TextLayoutInfo& firstResultLayout( firstRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray firstResultStyledText;
+  MarkupProcessor::GetStyledTextArray( firstResult, firstResultStyledText );
+
+  TextViewProcessor::CreateTextInfo( firstResultStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     firstRelayoutData );
+
+  // Get the first result line
+  TextViewProcessor::LineLayoutInfo firstResultLineLayout;
+
+  if( !firstResultLayout.mLinesLayoutInfo.empty() )
+  {
+    firstResultLineLayout = *firstResultLayout.mLinesLayoutInfo.begin();
+  }
+
+  // Create layout info for the last part of the result (after split the line)
+
+  Toolkit::Internal::TextView::RelayoutData lastRelayoutData;
+  TextViewProcessor::TextLayoutInfo& lastResultLayout( lastRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray lastResultStyledText;
+  MarkupProcessor::GetStyledTextArray( lastResult, lastResultStyledText );
+
+  TextViewProcessor::CreateTextInfo( lastResultStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     lastRelayoutData );
+
+  // Get the last result line
+  TextViewProcessor::LineLayoutInfo lastResultLineLayout;
+
+  if( !lastResultLayout.mLinesLayoutInfo.empty() )
+  {
+    lastResultLineLayout = *lastResultLayout.mLinesLayoutInfo.begin();
+  }
+
+  // Split the line.
+
+  TextViewProcessor::LineLayoutInfo lastLineLayoutInfo;
+
+  TextViewProcessor::TextInfoIndices indices( 0, groupPosition, wordPosition, position );
+  SplitLine( indices,
+             PointSize( lineHeightOffset ),
+             inputLineLayout,
+             lastLineLayoutInfo );
+
+  // Test results
+  if( !TestEqual( inputLineLayout, firstResultLineLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  if( !TestEqual( lastLineLayoutInfo, lastResultLineLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Merges the \e inputFirst word and the \e inputLast word, and checks the results with \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment. i.e. "Merge two words with same style".
+ * @param inputFirst The first part of the word.
+ * @param inputLast The last part of the word.
+ * @param result The merged word.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestMergeWords( const std::string& description, const std::string& inputFirst, const std::string& inputLast, const std::string& result, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the inputFirst word.
+  Toolkit::Internal::TextView::RelayoutData firstRelayoutData;
+  TextViewProcessor::TextLayoutInfo& inputFirstLayout( firstRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputFirstStyledText;
+  MarkupProcessor::GetStyledTextArray( inputFirst, inputFirstStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputFirstStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     firstRelayoutData );
+
+  // Get the input word
+  TextViewProcessor::WordLayoutInfo inputFirstWordLayout;
+
+  if( !inputFirstLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputFirstLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        inputFirstWordLayout = *( *( *inputFirstLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  // Create layout info for the inputLast word.
+  Toolkit::Internal::TextView::RelayoutData lastRelayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLastLayout( lastRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputLastStyledText;
+  MarkupProcessor::GetStyledTextArray( inputLast, inputLastStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputLastStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     lastRelayoutData );
+
+  // Get the input word
+  TextViewProcessor::WordLayoutInfo inputLastWordLayout;
+
+  if( !inputLastLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputLastLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        inputLastWordLayout = *( *( *inputLastLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  // Create layout info for the result word.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     resultRelayoutData );
+
+  // Get the result word
+  TextViewProcessor::WordLayoutInfo resultWordLayout;
+
+  if( !resultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *resultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        resultWordLayout = *( *( *resultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  MergeWord( inputFirstWordLayout,
+             inputLastWordLayout );
+
+  if( !TestEqual( inputFirstWordLayout, resultWordLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Merges the \e inputFirst group of words and the \e inputLast group of words, and checks the results with \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment.
+ * @param inputFirst The first part of the group of words.
+ * @param inputLast The last part of the group of words.
+ * @param result The merged group of word.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestMergeGroupsOfWords( const std::string& description, const std::string& inputFirst, const std::string& inputLast, const std::string& result, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the inputFirst group of word.
+  Toolkit::Internal::TextView::RelayoutData firstRelayoutData;
+  TextViewProcessor::TextLayoutInfo& inputFirstLayout( firstRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputFirstStyledText;
+  MarkupProcessor::GetStyledTextArray( inputFirst, inputFirstStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputFirstStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     firstRelayoutData );
+
+  // Get the input group of words.
+  TextViewProcessor::WordGroupLayoutInfo inputFirstWordGroupLayout;
+
+  if( !inputFirstLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputFirstLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      inputFirstWordGroupLayout = *( *inputFirstLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  // Create layout info for the inputLast group of words.
+  Toolkit::Internal::TextView::RelayoutData lastRelayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLastLayout( lastRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputLastStyledText;
+  MarkupProcessor::GetStyledTextArray( inputLast, inputLastStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputLastStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     lastRelayoutData );
+
+  // Get the input group of words
+  TextViewProcessor::WordGroupLayoutInfo inputLastWordGroupLayout;
+
+  if( !inputLastLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputLastLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      inputLastWordGroupLayout = *( *inputLastLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  // Create layout info for the result group of words.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     resultRelayoutData );
+
+  // Get the result word
+  TextViewProcessor::WordGroupLayoutInfo resultWordGroupLayout;
+
+  if( !resultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *resultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      resultWordGroupLayout = *( *resultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  MergeWordGroup( inputFirstWordGroupLayout,
+                  inputLastWordGroupLayout );
+
+  if( !TestEqual( inputFirstWordGroupLayout, resultWordGroupLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Merges the \e inputFirst line and the \e inputLast line, and checks the results with \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment.
+ * @param inputFirst The first part of the line.
+ * @param inputLast The last part of the line.
+ * @param lineHeightOffset Offset between lines.
+ * @param result The merged line.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestMergeLines( const std::string& description, const std::string& inputFirst, const std::string& inputLast, const float lineHeightOffset, const std::string& result, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the inputFirst line.
+  Toolkit::Internal::TextView::RelayoutData firstRelayoutData;
+  TextViewProcessor::TextLayoutInfo& inputFirstLayout( firstRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputFirstStyledText;
+  MarkupProcessor::GetStyledTextArray( inputFirst, inputFirstStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputFirstStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     firstRelayoutData );
+
+  // Get the input word
+  TextViewProcessor::LineLayoutInfo inputFirstLineLayout;
+
+  if( !inputFirstLayout.mLinesLayoutInfo.empty() )
+  {
+    inputFirstLineLayout = *inputFirstLayout.mLinesLayoutInfo.begin();
+  }
+
+  // Create layout info for the inputLast line.
+  Toolkit::Internal::TextView::RelayoutData lastRelayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLastLayout( lastRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputLastStyledText;
+  MarkupProcessor::GetStyledTextArray( inputLast, inputLastStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputLastStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     lastRelayoutData );
+
+  // Get the input word
+  TextViewProcessor::LineLayoutInfo inputLastLineLayout;
+
+  if( !inputLastLayout.mLinesLayoutInfo.empty() )
+  {
+    inputLastLineLayout = *inputLastLayout.mLinesLayoutInfo.begin();
+  }
+
+  // Create layout info for the result word.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     resultRelayoutData );
+
+  // Get the result word
+  TextViewProcessor::LineLayoutInfo resultLineLayout;
+
+  if( !resultLayout.mLinesLayoutInfo.empty() )
+  {
+    resultLineLayout = *resultLayout.mLinesLayoutInfo.begin();
+  }
+
+  MergeLine( inputFirstLineLayout,
+             inputLastLineLayout );
+
+  if( !TestEqual( inputFirstLineLayout, resultLineLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Removes from the \e input word the \e numberOfCharacters characters starting from the given \e position and checks the results with \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment. i.e. "Remove a whole group of characters. Merge".
+ * @param input The input word.
+ * @param position Where to start to remove characters
+ * @param numberOfCharacters The number of characters to remove.
+ * @param result The word without the removed characters.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestRemoveCharactersFromWord( const std::string& description, const std::string& input, const std::size_t position, const std::size_t numberOfCharacters, const std::string& result, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input word.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  // Get the input word
+  TextViewProcessor::WordLayoutInfo inputWordLayout;
+
+  if( !inputLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        inputWordLayout = *( *( *inputLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  // Create layout info for the result word.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     resultRelayoutData );
+
+  // Get the result word
+  TextViewProcessor::WordLayoutInfo resultWordLayout;
+
+  if( !resultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *resultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      const TextViewProcessor::WordGroupLayoutInfo& group( *line.mWordGroupsLayoutInfo.begin() );
+      if( !group.mWordsLayoutInfo.empty() )
+      {
+        resultWordLayout = *( *( *resultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin() ).mWordsLayoutInfo.begin();
+      }
+    }
+  }
+
+  RemoveCharactersFromWord( position,
+                            numberOfCharacters,
+                            inputWordLayout );
+
+  if( !TestEqual( inputWordLayout, resultWordLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Removes from the \e input group of words the \e numberOfWords words starting from the given \e wordIndex and checks the results with \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment.
+ * @param input The input group of words.
+ * @param wordIndex Where to start to remove words.
+ * @param numberOfWords The number of words to remove.
+ * @param result The group of words without the removed words.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestRemoveWordsFromGroup( const std::string& description, const std::string& input, const std::size_t wordIndex, const std::size_t numberOfWords, const std::string& result, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input group of words.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+  // Get the input group of words
+  TextViewProcessor::WordGroupLayoutInfo inputWordGroupLayout;
+
+  if( !inputLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *inputLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      inputWordGroupLayout = *( *inputLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  // Create layout info for the result group of words.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     resultRelayoutData );
+
+  // Get the result group of words.
+  TextViewProcessor::WordGroupLayoutInfo resultWordGroupLayout;
+
+  if( !resultLayout.mLinesLayoutInfo.empty() )
+  {
+    const TextViewProcessor::LineLayoutInfo& line( *resultLayout.mLinesLayoutInfo.begin() );
+    if( !line.mWordGroupsLayoutInfo.empty() )
+    {
+      resultWordGroupLayout = *( *resultLayout.mLinesLayoutInfo.begin() ).mWordGroupsLayoutInfo.begin();
+    }
+  }
+
+  RemoveWordsFromWordGroup( wordIndex,
+                            numberOfWords,
+                            inputWordGroupLayout );
+
+  if( !TestEqual( inputWordGroupLayout, resultWordGroupLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+
+/**
+ * Removes from the \e input line the \e numberOfGroups groups of words starting from the given \e groupIndex and checks the results with \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment.
+ * @param input The input line.
+ * @param groupIndex Where to start to remove groups of words
+ * @param numberOfGroups The number of groups of words to remove.
+ * @param lineHeightOffset Offset between lines.
+ * @param result The line without the removed groups of words.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestRemoveGroupsFromLine( const std::string& description, const std::string& input, const std::size_t groupIndex, const std::size_t numberOfGroups, const float lineHeightOffset, const std::string& result, const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input line.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     relayoutData );
+
+  // Get the input line
+  TextViewProcessor::LineLayoutInfo inputLineLayout;
+
+  if( !inputLayout.mLinesLayoutInfo.empty() )
+  {
+    inputLineLayout = *inputLayout.mLinesLayoutInfo.begin();
+  }
+
+  // Create layout info for the result line.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     resultRelayoutData );
+
+  // Get the result line
+  TextViewProcessor::LineLayoutInfo resultLineLayout;
+
+  if( !resultLayout.mLinesLayoutInfo.empty() )
+  {
+    resultLineLayout = *resultLayout.mLinesLayoutInfo.begin();
+  }
+
+  RemoveWordGroupsFromLine( groupIndex,
+                            numberOfGroups,
+                            PointSize( lineHeightOffset ),
+                            inputLineLayout );
+
+  if( !TestEqual( inputLineLayout, resultLineLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+    return false;
+  }
+
+  return true;
+}
+
+/**
+ * Tests inserts, removes and updates operation in the given \e input text and checks with the given \e result.
+ *
+ * If the test fails it prints a short description and the line where this function was called.
+ *
+ * @param description Short description of the experiment.
+ * @param operation Type of update operation (insert, remove, replace)
+ * @param input The input text.
+ * @param position Where to insert, remove or replace text.
+ * @param numberOfCharacters Number of characters to remove or replace.
+ * @param inputText Inserted or updated text.
+ * @param lineHeightOffset Offset between lines.
+ * @param result Expected result.
+ * @param location Where this function has been called.
+ *
+ * @return \e true if the experiment is successful. Otherwise returns \e false.
+ */
+bool TestUpdateTextInfo( const std::string& description,
+                         const UpdateTextInfoOperation operation,
+                         const std::string& input,
+                         const std::size_t position,
+                         const std::size_t numberOfCharacters,
+                         const std::string& inputText,
+                         const float lineHeightOffset,
+                         const std::string& result,
+                         const char* location )
+{
+  tet_printf( "%s", description.c_str() );
+
+  // Create layout info for the input.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& inputLayout( relayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray inputStyledText;
+  MarkupProcessor::GetStyledTextArray( input, inputStyledText );
+
+  TextViewProcessor::CreateTextInfo( inputStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     relayoutData );
+
+  // Create layout info for the result.
+  Toolkit::Internal::TextView::RelayoutData resultRelayoutData;
+  TextViewProcessor::TextLayoutInfo& resultLayout( resultRelayoutData.mTextLayoutInfo );
+
+  MarkupProcessor::StyledTextArray resultStyledText;
+  MarkupProcessor::GetStyledTextArray( result, resultStyledText );
+
+  TextViewProcessor::CreateTextInfo( resultStyledText,
+                                     Toolkit::Internal::TextView::LayoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    Toolkit::TextView::Original,
+                                                                                    static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                                    Toolkit::TextView::Center,
+                                                                                    PointSize( lineHeightOffset ),
+                                                                                    std::string( "..." ) ),
+                                     resultRelayoutData );
+
+  // Choose operation and call appropiate UpdateTextInfo() method.
+  const Toolkit::Internal::TextView::LayoutParameters layoutParameters( Toolkit::TextView::SplitByNewLineChar,
+                                                                        Toolkit::TextView::Original,
+                                                                        Toolkit::TextView::Original,
+                                                                        static_cast<Toolkit::Alignment::Type>( Toolkit::Alignment::HorizontalCenter | Toolkit::Alignment::VerticalCenter ),
+                                                                        Toolkit::TextView::Center,
+                                                                        PointSize( lineHeightOffset ),
+                                                                        std::string( "..." ) );
+
+  switch( operation )
+  {
+    case Insert:
+    {
+      MarkupProcessor::StyledTextArray inputStyledText;
+      MarkupProcessor::GetStyledTextArray( inputText, inputStyledText );
+
+      TextViewProcessor::UpdateTextInfo( position,
+                                         inputStyledText,
+                                         layoutParameters,
+                                         relayoutData );
+      break;
+    }
+    case Remove:
+    {
+      TextViewProcessor::UpdateTextInfo( position,
+                                         numberOfCharacters,
+                                         layoutParameters,
+                                         relayoutData,
+                                         TextViewProcessor::CLEAR_TEXT );
+      break;
+    }
+    case Replace:
+    {
+      MarkupProcessor::StyledTextArray inputStyledText;
+      MarkupProcessor::GetStyledTextArray( inputText, inputStyledText );
+
+      TextViewProcessor::UpdateTextInfo( position,
+                                         numberOfCharacters,
+                                         inputStyledText,
+                                         layoutParameters,
+                                         relayoutData );
+      break;
+    }
+    default:
+    {
+      tet_printf( "TestUpdateTextInfo: unknown update operation. %s", location );
+      return false;
+    }
+  }
+
+  if( !TestEqual( inputLayout, resultLayout ) )
+  {
+    tet_printf( "Fail. different layout info. %s", location );
+
+    std::cout << "          result : "; Print( inputLayout );
+    std::cout << " expected result : "; Print( resultLayout );
+    return false;
+  }
+
+  return true;
+}
+
+} // namespace
+
+static void Startup();
+static void Cleanup();
+
+extern "C" {
+  void (*tet_startup)() = Startup;
+  void (*tet_cleanup)() = Cleanup;
+}
+
+enum {
+  POSITIVE_TC_IDX = 0x01,
+  NEGATIVE_TC_IDX,
+};
+
+#define MAX_NUMBER_OF_TESTS 10000
+extern "C" {
+  struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
+}
+
+// Add test functionality for all APIs in the class (Positive and Negative)
+TEST_FUNCTION( UtcDaliTextViewCreateTextInfo, POSITIVE_TC_IDX );                     // Tests data structures are built well.
+TEST_FUNCTION( UtcDaliTextViewUpdateTextInfo, POSITIVE_TC_IDX );                     // Tests update operations within a whole text (insert, remove, replace).
+TEST_FUNCTION( UtcDaliTextViewSplitWord, POSITIVE_TC_IDX );                          // Tests the split word operation.
+TEST_FUNCTION( UtcDaliTextViewSplitWordGroup, POSITIVE_TC_IDX );                     // Tests the split group of words operation.
+TEST_FUNCTION( UtcDaliTextViewSplitLine, POSITIVE_TC_IDX );                          // Tests the split line operation.
+TEST_FUNCTION( UtcDaliTextViewMergeWord01, POSITIVE_TC_IDX );                        // Tests the merge word operation.
+TEST_FUNCTION( UtcDaliTextViewMergeWord02, NEGATIVE_TC_IDX );                        // Tests invalid inputs in the merge word operation.
+TEST_FUNCTION( UtcDaliTextViewMergeGroup01, POSITIVE_TC_IDX );                       // Tests the merge group of words operation.
+TEST_FUNCTION( UtcDaliTextViewMergeGroup02, NEGATIVE_TC_IDX );                       // Tests invalid inputs in the merge group of words operation.
+TEST_FUNCTION( UtcDaliTextViewMergeLine01, POSITIVE_TC_IDX );                        // Tests the merge line operation.
+TEST_FUNCTION( UtcDaliTextViewMergeLine02, NEGATIVE_TC_IDX );                        // Tests invalid inputs in the merge line operation.
+TEST_FUNCTION( UtcDaliTextViewRemoveCharactersFromWord, POSITIVE_TC_IDX );           // Tests the remove characters from a word operation.
+TEST_FUNCTION( UtcDaliTextViewRemoveWordsFromGroup, POSITIVE_TC_IDX );               // Tests the remove words from a group of words operation.
+TEST_FUNCTION( UtcDaliTextViewRemoveGroupsFromLine, POSITIVE_TC_IDX );               // Tests the remove groups of words from a line operation.
+
+// Called only once before first test is run.
+static void Startup()
+{
+}
+
+// Called only once after last test is run
+static void Cleanup()
+{
+}
+
+static void UtcDaliTextViewCreateTextInfo()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewCreateTextInfo : ");
+
+  // Metrics for characters
+
+  // Font size = 10
+  //     size : [9.48351, 9.48351]
+  //  advance : 9.48351
+  //  bearing : 8.53516
+  // ascender : 8.53516
+
+  // Font size = 12
+  //     size : [11.3802, 11.3802]
+  //  advance : 11.3802
+  //  bearing : 10.2422
+  // ascender : 10.2422
+
+  // Font size = 14
+  //     size : [13.2769, 13.2769]
+  //  advance : 13.2769
+  //  bearing : 11.9492
+  // ascender : 11.9492
+
+  const float WIDTH_10( 9.48351f );
+  const float HEIGHT_10( 9.48351f );
+  const float ADVANCE_10( 9.48351f );
+  const float BEARING_10( 8.53516f );
+  const float ASCENDER_10( 8.53516f );
+
+  const float WIDTH_12( 11.3802f );
+  const float HEIGHT_12( 11.3802f );
+  const float ADVANCE_12( 11.3802f );
+  const float BEARING_12( 10.2422f );
+  const float ASCENDER_12( 10.2422f );
+
+
+  // Generate a text.
+  Toolkit::Internal::TextView::RelayoutData relayoutData;
+  TextViewProcessor::TextLayoutInfo& textLayoutInfo( relayoutData.mTextLayoutInfo );
+
+  std::string text( "Hel<font size='10'>lo wo</font>rld!\n"
+                    "\n" );
+
+  MarkupProcessor::StyledTextArray styledText;
+  MarkupProcessor::GetStyledTextArray( text, styledText );
+
+  TextViewProcessor::CreateTextInfo( styledText,
+                                     DEFAULT_LAYOUT_PARAMETERS,
+                                     relayoutData );
+
+
+  // Build the text info with metric values.
+
+  // Characters
+
+  TextViewProcessor::CharacterLayoutInfo layoutInfo10; // ( [lo wo])
+  layoutInfo10.mHeight = HEIGHT_10;
+  layoutInfo10.mAdvance = ADVANCE_10;
+  layoutInfo10.mBearing = BEARING_10;
+  layoutInfo10.mSize = Size( WIDTH_10, HEIGHT_10 );
+  layoutInfo10.mAscender = ASCENDER_10;
+  TextViewProcessor::CharacterLayoutInfo layoutInfo12; // ( [Hel], [rld!] and [CR])
+  layoutInfo12.mHeight = HEIGHT_12;
+  layoutInfo12.mAdvance = ADVANCE_12;
+  layoutInfo12.mBearing = BEARING_12;
+  layoutInfo12.mSize = Size( WIDTH_12, HEIGHT_12 );
+  layoutInfo12.mAscender = ASCENDER_12;
+
+  TextStyle style10;
+  style10.SetFontPointSize( PointSize( 10.f ) );
+  TextStyle style12;
+  style12.SetFontPointSize( PointSize( 0.f ) ); // point size is set to zero because is a default point size.
+
+  layoutInfo12.mStyledText.mStyle = style12;
+  layoutInfo10.mStyledText.mStyle = style10;
+
+  // Words
+
+  TextViewProcessor::WordLayoutInfo wordLayout1, wordLayout2, wordLayout3, wordLayout4;
+
+  // Hello
+  wordLayout1.mSize = Size( 3.f * WIDTH_12 + 2.f * WIDTH_10, HEIGHT_12 );
+  wordLayout1.mAscender = ASCENDER_12;
+  wordLayout1.mType = TextViewProcessor::NoSeparator;
+
+  layoutInfo12.mStyledText.mText = Text( "H" );
+  wordLayout1.mCharactersLayoutInfo.push_back( layoutInfo12 ); // H
+  layoutInfo12.mStyledText.mText = Text( "e" );
+  wordLayout1.mCharactersLayoutInfo.push_back( layoutInfo12 ); // e
+  layoutInfo12.mStyledText.mText = Text( "l" );
+  wordLayout1.mCharactersLayoutInfo.push_back( layoutInfo12 ); // l
+  layoutInfo10.mStyledText.mText = Text( "l" );
+  wordLayout1.mCharactersLayoutInfo.push_back( layoutInfo10 ); // l
+  layoutInfo10.mStyledText.mText = Text( "o" );
+  wordLayout1.mCharactersLayoutInfo.push_back( layoutInfo10 ); // o
+
+  // (white space)
+  wordLayout2.mSize = Size( WIDTH_10, HEIGHT_10 );
+  wordLayout2.mAscender = ASCENDER_10;
+  wordLayout2.mType = TextViewProcessor::WordSeparator;
+  layoutInfo10.mStyledText.mText = Text( " " );
+  wordLayout2.mCharactersLayoutInfo.push_back( layoutInfo10 ); // (white space)
+
+  // world!
+  wordLayout3.mSize = Size( 2.f * WIDTH_10 + 4.f * WIDTH_12, HEIGHT_12 );
+  wordLayout3.mAscender = ASCENDER_12;
+  wordLayout3.mType = TextViewProcessor::NoSeparator;
+  layoutInfo10.mStyledText.mText = Text( "w" );
+  wordLayout3.mCharactersLayoutInfo.push_back( layoutInfo10 ); // w
+  layoutInfo10.mStyledText.mText = Text( "o" );
+  wordLayout3.mCharactersLayoutInfo.push_back( layoutInfo10 ); // o
+  layoutInfo12.mStyledText.mText = Text( "r" );
+  wordLayout3.mCharactersLayoutInfo.push_back( layoutInfo12 ); // r
+  layoutInfo12.mStyledText.mText = Text( "l" );
+  wordLayout3.mCharactersLayoutInfo.push_back( layoutInfo12 ); // l
+  layoutInfo12.mStyledText.mText = Text( "d" );
+  wordLayout3.mCharactersLayoutInfo.push_back( layoutInfo12 ); // d
+  layoutInfo12.mStyledText.mText = Text( "!" );
+  wordLayout3.mCharactersLayoutInfo.push_back( layoutInfo12 ); // !
+
+  // (new line character)
+  wordLayout4.mSize = Size( 0.f, HEIGHT_12 );
+  wordLayout4.mAscender = ASCENDER_12;
+  wordLayout4.mType = TextViewProcessor::LineSeparator;
+  layoutInfo12.mStyledText.mText = Text( "\n" );
+  layoutInfo12.mSize.width = 0.f;
+  wordLayout4.mCharactersLayoutInfo.push_back( layoutInfo12 ); // (new line char)
+
+  // Groups
+
+  TextViewProcessor::WordGroupLayoutInfo groupLayout1, groupLayout2;
+
+  groupLayout1.mSize = Size( 5.f * WIDTH_10 + 7.f * WIDTH_12, HEIGHT_12 );
+  groupLayout1.mAscender = ASCENDER_12;
+  groupLayout1.mDirection = TextViewProcessor::LTR;
+  groupLayout1.mNumberOfCharacters = 13;
+  groupLayout1.mWordsLayoutInfo.push_back( wordLayout1 );
+  groupLayout1.mWordsLayoutInfo.push_back( wordLayout2 );
+  groupLayout1.mWordsLayoutInfo.push_back( wordLayout3 );
+  groupLayout1.mWordsLayoutInfo.push_back( wordLayout4 );
+
+  groupLayout2.mSize = Size( 0.f, HEIGHT_12 );
+  groupLayout2.mAscender = ASCENDER_12;
+  groupLayout2.mDirection = TextViewProcessor::LTR;
+  groupLayout2.mNumberOfCharacters = 1;
+  groupLayout2.mWordsLayoutInfo.push_back( wordLayout4 );
+
+  // Lines
+
+  TextViewProcessor::LineLayoutInfo lineLayout1, lineLayout2, lineLayout3;
+
+  lineLayout1.mSize = Size( 5.f * WIDTH_10 + 7.f * WIDTH_12, HEIGHT_12 );
+  lineLayout1.mAscender = ASCENDER_12;
+  lineLayout1.mNumberOfCharacters = 13;
+  lineLayout1.mWordGroupsLayoutInfo.push_back( groupLayout1 );
+
+  lineLayout2.mSize = Size( 0.f, HEIGHT_12 );
+  lineLayout2.mAscender = ASCENDER_12;
+  lineLayout2.mNumberOfCharacters = 1;
+  lineLayout2.mWordGroupsLayoutInfo.push_back( groupLayout2 );
+
+  lineLayout3.mSize = Size( 0.f, HEIGHT_12 );
+
+  // Text (layout)
+  TextViewProcessor::TextLayoutInfo textLayout;
+
+  textLayout.mWholeTextSize = Size( 5.f * WIDTH_10 + 7.f * WIDTH_12, 3.f * HEIGHT_12 );
+  textLayout.mMaxWordWidth = 2.f * WIDTH_10 + 4.f * WIDTH_12;
+  textLayout.mNumberOfCharacters = 14;
+  textLayout.mLinesLayoutInfo.push_back( lineLayout1 );
+  textLayout.mLinesLayoutInfo.push_back( lineLayout2 );
+  textLayout.mLinesLayoutInfo.push_back( lineLayout3 );
+
+  if(!TestEqual( textLayout, textLayoutInfo ))
+  {
+    std::cout << "Layout fails" << std::endl;
+    Print(textLayout); std::cout << std::endl;
+    Print(textLayoutInfo); std::cout << std::endl;
+  }
+
+  DALI_TEST_CHECK( TestEqual( textLayout, textLayoutInfo ) );
+}
+
+static void UtcDaliTextViewSplitWord()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewSplitWord : ");
+
+  struct SplitWordTest splitWordTests[] =
+  {
+    {
+      std::string( "Split word, position 0." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      0,
+      std::string( "" ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+    },
+    {
+      std::string( "Split word, position 8." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      8,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      std::string( "" ),
+    },
+    {
+      std::string( "Split word, position 2." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      2,
+      std::string( "<font size='10'>He</font>" ),
+      std::string( "<font size='12'>ll</font><font size='10'>oooo</font>" ),
+    },
+    {
+      std::string( "Split word, position 3." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      3,
+      std::string( "<font size='10'>He</font><font size='12'>l</font>" ),
+      std::string( "<font size='12'>l</font><font size='10'>oooo</font>" ),
+    },
+    {
+      std::string( "Split word, position 4." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      4,
+      std::string( "<font size='10'>He</font><font size='12'>ll</font>" ),
+      std::string( "<font size='10'>oooo</font>" ),
+    },
+  };
+  const std::size_t numberOfTests( 5 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const SplitWordTest& test = splitWordTests[index];
+
+    if( !TestSplitWord( test.description, test.input, test.position, test.firstResult, test.lastResult, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewUpdateTextInfo()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewUpdateTextInfo : ");
+
+  struct UpdateTextInfoTest updateTextInfoTest[] =
+  {
+    // Remove operations
+
+    {
+      std::string( "Remove from new line character to first character next line." ),
+      Remove,
+      std::string("Hello world\nhello world."),
+      11,
+      2,
+      std::string(""),
+      0.f,
+      std::string("Hello worldello world."),
+    },
+    {
+      std::string( "Replace style from new line character to first character next line." ),
+      Replace,
+      std::string("Hello world\nhello world."),
+      11,
+      2,
+      std::string("<b>\nh</b>"),
+      0.f,
+      std::string("Hello world<b>\nh</b>ello world."),
+    },
+    {
+      std::string( "Remove from the beginning to the middle of last word." ),
+      Remove,
+      std::string("Hello world, hello world."),
+      0,
+      22,
+      std::string(), // Not used.
+      0.f,
+      std::string("ld."),
+    },
+    {
+      std::string( "Remove from the beginning to the middle of the text." ),
+      Remove,
+      std::string("Hello world hello world."),
+      0,
+      12,
+      std::string(), // Not used.
+      0.f,
+      std::string("hello world."),
+    },
+    // Remove within the same word:
+    // * within the same group of characters.
+    {
+      std::string( "Remove within the same word, within the same group of characters" ),
+      Remove,
+      std::string("Hello <font size='30'>world\nhello</font> world"),
+      7,
+      3,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello <font size='30'>wd\nhello</font> world" )
+    },
+    // * whole group of characters (merge adjacent group of characters)
+    {
+      std::string( "Remove within the same word, whole group of characters (merge adjacent group of characters)" ),
+      Remove,
+      std::string("Hello <font size='30'>w<font size='20'>orl</font>d\nhello</font> world"),
+      7,
+      3,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello <font size='30'>wd\nhello</font> world" )
+    },
+    // * whole group of characters (don't merge adjacent gtoup of characters)
+    {
+      std::string( "Remove within the same word, whole group of characters (don't merge adjacent gtoup of characters)" ),
+      Remove,
+      std::string("Hello <font size='30'>w</font>orl<font size='10'>d\nhello</font> world"),
+      7,
+      3,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello <font size='30'>w</font><font size='10'>d\nhello</font> world" )
+    },
+    // * Remove whole word (merge words)
+    {
+      std::string( "Remove within the same word, whole word (merge words)" ),
+      Remove,
+      std::string("Hello <font size='30'>w</font>orl<font size='10'>d\nhello</font> world"),
+      5,
+      1,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello<font size='30'>w</font>orl<font size='10'>d\nhello</font> world" )
+    },
+    // * Remove whole word (don't merge words)
+    {
+      std::string( "Remove within the same word, whole word (don't merge words)" ),
+      Remove,
+      std::string("Hello <font size='30'>w</font>orl<font size='10'>d\nhello</font> world"),
+      6,
+      5,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello <font size='10'>\nhello</font> world" )
+    },
+    // * Remove whole word (merge lines)
+    {
+      std::string( "Remove within the same word, whole word (merge lines)" ),
+      Remove,
+      std::string("Hello <font size='30'>w</font>orl<font size='10'>d\nhello</font> world"),
+      11,
+      1,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello <font size='30'>w</font>orl<font size='10'>dhello</font> world" )
+    },
+    // * Remove whole group of words
+    /* TODO check this when RTL text is working
+    {
+      std::string( "Remove within the same line, whole group of words (merge groups)" ),
+      Remove,
+      std::string("Hello world, שלום עולם, hello world"),
+      10,
+      15,
+      std::string(), // Not used.
+      0.f,
+      std::string( "Hello worlello world" )
+    },
+    */
+    // * Remove whole line
+    {
+      std::string( "Remove whole line" ),
+      Remove,
+      std::string("Hello world, hello world\n"
+                  "Hello world, hello world\n"
+                  "Hello world, hello world\n"
+                  "Hello world, hello world\n"),
+      25,
+      25,
+      std::string(), // Not used.
+      0.f,
+      std::string("Hello world, hello world\n"
+                  "Hello world, hello world\n"
+                  "Hello world, hello world\n"),
+    },
+    {
+      std::string( "Remove whole line" ),
+      Remove,
+      std::string("Hello world, hello world\n"
+                  "H"),
+      25,
+      1,
+      std::string(), // Not used.
+      0.f,
+      std::string("Hello world, hello world\n"),
+    },
+
+
+    // Insert operations
+    {
+      std::string( "insert some text" ),
+      Insert,
+      std::string("inpuext"),
+      4,
+      0,             // Not used
+      std::string( "t t" ),
+      0.f,
+      std::string( "input text" )
+    },
+    {
+      std::string( "Insert text at the end" ),
+      Insert,
+      std::string("touch "),
+      6,
+      0,
+      std::string("me\nhello"),
+      0.f,
+      std::string("touch me\nhello")
+    },
+
+    // Replace operations.
+    {
+      std::string( "Replace style from the beginning to some point in the middle of the text." ),
+      Replace,
+      std::string( "Hello <font color='green'>world</font>" ),
+      0,
+      7,
+      std::string( "<font color='red'>Hello w</font>" ),
+      0.f,
+      std::string( "<font color='red'>Hello w</font><font color='green'>orld</font>" )
+    },
+    {
+      std::string( "Replace style from the middle of the text to the end." ),
+      Replace,
+      std::string( "Touch me\nhello" ),
+      6,
+      8,
+      std::string( "<b>me\nhello</b>" ),
+      0.f,
+      std::string( "Touch <b>me\nhello</b>" )
+    },
+    {
+      std::string( "Remove characters from text. Previous next test:Replace style from the middle of the text 1." ),
+      Remove,
+      std::string( "Touch me\nhello\nworld" ),
+      6,
+      8,
+      std::string( "" ),
+      0.f,
+      std::string( "Touch \nworld" )
+    },
+    {
+      std::string( "Insert styled text in the middle of a text. Previous: Replace style from the middle of the text 1." ),
+      Insert,
+      std::string( "Touch \nworld" ),
+      6,
+      0,
+      std::string( "<b>me\nhello</b>" ),
+      0.f,
+      std::string( "Touch <b>me\nhello</b>\nworld" )
+    },
+    {
+      std::string( "Replace style from the middle of the text 1." ),
+      Replace,
+      std::string( "Touch me\nhello\nworld" ),
+      6,
+      8,
+      std::string( "<b>me\nhello</b>" ),
+      0.f,
+      std::string( "Touch <b>me\nhello</b>\nworld" )
+    },
+    {
+      std::string( "Remove characters from text. Previous next test:Replace style from the middle of the text 2." ),
+      Remove,
+      std::string( "Touch me\nhello\nworld" ),
+      6,
+      9,
+      std::string( "" ),
+      0.f,
+      std::string( "Touch world" )
+    },
+    {
+      std::string( "Replace style from the middle of the text 2." ),
+      Replace,
+      std::string( "Touch me\nhello\nworld" ),
+      6,
+      9,
+      std::string( "<b>me\nhello\n</b>" ),
+      0.f,
+      std::string( "Touch <b>me\nhello\n</b>world" )
+    },
+  };
+  const std::size_t numberOfTests( 21 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const UpdateTextInfoTest& test = updateTextInfoTest[index];
+
+    if( !TestUpdateTextInfo( test.description, test.operation, test.input, test.position, test.numberOfCharacters, test.inputText, test.lineHeightOffset, test.result, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewSplitWordGroup()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewSplitWordGroup : ");
+
+  struct SplitWordGroupTest splitWordGroupTests[] =
+  {
+    {
+      std::string( "Split word group, wordPosition 0, position 0." ),
+      std::string( "<u><font size='10'>He<font size='12'>ll</font>oooo wooorld</font></u>" ),
+      0,
+      0,
+      std::string( "" ),
+      std::string( "<u><font size='10'>He<font size='12'>ll</font>oooo wooorld</font></u>" ),
+    },
+    {
+      std::string( "Split word group, wordPosition 2, position 8." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font>" ),
+      2,
+      7,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font>" ),
+      std::string( "" ),
+    },
+    {
+      std::string( "Split word group, wordPosition 0, position 2." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font>" ),
+      0,
+      2,
+      std::string( "<font size='10'>He</font>" ),
+      std::string( "<font size='12'>ll</font><font size='10'>oooo wooorld</font>" ),
+    },
+    {
+      std::string( "Split word group, wordPosition 0, position 3." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font>" ),
+      0,
+      3,
+      std::string( "<font size='10'>He</font><font size='12'>l</font>" ),
+      std::string( "<font size='12'>l</font><font size='10'>oooo wooorld</font>" ),
+    },
+    {
+      std::string( "Split word group, wordPosition 0, position 4." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font>" ),
+      0,
+      4,
+      std::string( "<font size='10'>He</font><font size='12'>ll</font>" ),
+      std::string( "<font size='10'>oooo wooorld</font>" ),
+    },
+    {
+      std::string( "Split word group, wordPosition 1, position 0." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font>" ),
+      1,
+      0,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo</font>" ),
+      std::string( "<font size='10'> wooorld</font>" ),
+    },
+  };
+  const std::size_t numberOfTests( 6 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const SplitWordGroupTest& test = splitWordGroupTests[index];
+
+    if( !TestSplitWordGroup( test.description, test.input, test.wordPosition, test.position, test.firstResult, test.lastResult, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewSplitLine()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewSplitLine : ");
+
+  struct SplitLineTest splitLineTests[] =
+  {
+    {
+      std::string( "Split line, groupPosition 0, wordPosition 0, position 0." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+      0,
+      0,
+      0,
+      3.f,
+      std::string( "" ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+    },
+    {
+      std::string( "Split line, groupPosition 2, wordPosition 2, position 4." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+      2,
+      2,
+      4,
+      0.f,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+      std::string( "" ),
+    },
+    /* TODO check when RTL is working.
+    {
+      std::string( "Split line, groupPosition 1, wordPosition 2, position 0." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+      1,
+      2,
+      0,
+      0.f,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום" ),
+      std::string( " עולם text text" ),
+    },
+    {
+      std::string( "Split line, groupPosition 1, wordPosition 0, position 0." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+      1,
+      0,
+      0,
+      0.f,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> " ),
+      std::string( "שלום עולם text text" ),
+    },
+    */
+    {
+      std::string( "Split line, groupPosition 2, wordPosition 0, position 0." ),
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם text text" ),
+      2,
+      0,
+      0,
+      6.f,
+      std::string( "<font size='10'>He<font size='12'>ll</font>oooo wooorld</font> שלום עולם " ),
+      std::string( "text text" ),
+    },
+  };
+  const std::size_t numberOfTests( 3 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const SplitLineTest& test = splitLineTests[index];
+
+    if( !TestSplitLine( test.description, test.input, test.groupPosition, test.wordPosition, test.position, test.lineHeightOffset, test.firstResult, test.lastResult, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewMergeWord01()
+{
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewMergeWord01 : ");
+
+  struct MergeWordsTest mergeWordsTests[] =
+  {
+    {
+      std::string( "Merge words with same style." ),
+      std::string( "Hel" ),
+      std::string( "lo" ),
+      std::string( "Hello" ),
+    },
+    {
+      std::string( "Merge words with different styles." ),
+      std::string( "<font size='10>Hel</font>" ),
+      std::string( "<font size='20'>lo</font>" ),
+      std::string( "<font size='10'>Hel</font><font size='20'>lo</font>" )
+    },
+  };
+  const std::size_t numberOfTests( 2 );
+
+  for( std::size_t index = 0; index < numberOfTests; ++index )
+  {
+    const MergeWordsTest& test = mergeWordsTests[index];
+
+    if( !TestMergeWords( test.description, test.inputFirst, test.inputLast, test.result, TEST_LOCATION ) )
+    {
+      tet_result( TET_FAIL );
+    }
+  }
+
+  tet_result( TET_PASS );
+}
+
+static void UtcDaliTextViewMergeWord02()
+{
+  // Negative test.
+  // It test white spaces and new line characters can't be merged to other words.
+
+  ToolkitTestApplication application;
+
+  tet_infoline("UtcDaliTextViewMergeWord02 : ");
+
+  // Generate three words
+
+  Toolkit::Internal::TextView::RelayoutData relayoutData01;
+  Toolkit::Internal::TextView::RelayoutData relayoutData02;
+  Toolkit::Internal::TextView::RelayoutData relayoutData03;
+  TextViewProcessor::TextLayoutInfo& textLayoutInfo01( relayoutData01.mTextLayoutInfo );
+  TextViewProcessor::TextLayoutInfo& textLayoutInfo02( relayoutData02.mTextLayoutInfo );
+  TextViewProcessor::TextLayoutInfo& textLayoutInfo03( relayoutData03.mTextLayoutInfo );
+
+  std::string text01( " " );
+  std::string text02( "\n" );
+  std::string text03( "a" );
+  MarkupProcessor::StyledTextArray styledText01;
+  MarkupProcessor::StyledTextArray styledText02;
+  MarkupProcessor::StyledTextArray styledText03;
+  MarkupProcessor::GetStyledTextArray( text01, styledText01 );
+  MarkupProcessor::GetStyledTextArray( text02, styledText02 );
+  MarkupProcessor::GetStyledTextArray( text03, styledText03 );
+
+  TextViewProcessor::CreateTextInfo( styledText01,
+