# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

from uitest.framework import UITestCase
from libreoffice.uno.propertyvalue import mkPropertyValues
from uitest.uihelper.common import get_state_as_dict, type_text

import time
from uitest.debug import sleep
from libreoffice.uno.propertyvalue import mkPropertyValues
from uitest.uihelper.common import select_pos

class formatCharacter(UITestCase):

   def test_format_character_tab_font(self):
        self.ui_test.create_doc_in_start_center("writer")
        document = self.ui_test.get_component()
        xWriterDoc = self.xUITest.getTopFocusWindow()

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "0")

        xSizeFont = xDialog.getChild("westsizelb-cjk")
        xSizeFontEast = xDialog.getChild("eastsizelb")
        xSizeFontCTL = xDialog.getChild("ctlsizelb")
        xLangFont = xDialog.getChild("westlanglb-cjk")
        xLangFontEast = xDialog.getChild("eastlanglb")
        xLangFontCTL = xDialog.getChild("ctllanglb")

        xSizeFont.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
        xSizeFont.executeAction("TYPE", mkPropertyValues({"TEXT":"18"}))    #set font size 18
        xSizeFontEast.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
        xSizeFontEast.executeAction("TYPE", mkPropertyValues({"TEXT":"18"}))    #set font size 18
        xSizeFontCTL.executeAction("TYPE", mkPropertyValues({"KEYCODE":"CTRL+A"}))
        xSizeFontCTL.executeAction("TYPE", mkPropertyValues({"TEXT":"18"}))    #set font size 18
        select_pos(xLangFont, "0")
        select_pos(xLangFontEast, "0")
        select_pos(xLangFontCTL, "0")
        xOK = xDialog.getChild("ok")
        xOK.executeAction("CLICK", tuple())

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xSizeFont = xDialog.getChild("westsizelb-cjk")
        xSizeFontEast = xDialog.getChild("eastsizelb")
        xSizeFontCTL = xDialog.getChild("ctlsizelb")
        xLangFont = xDialog.getChild("westlanglb-cjk")
        xLangFontEast = xDialog.getChild("eastlanglb")
        xLangFontCTL = xDialog.getChild("ctllanglb")

        self.assertEqual(get_state_as_dict(xSizeFont)["Text"], "18 pt")
        self.assertEqual(get_state_as_dict(xSizeFontEast)["Text"], "18 pt")
        self.assertEqual(get_state_as_dict(xSizeFontCTL)["Text"], "18 pt") #check font size
        self.assertEqual(get_state_as_dict(xLangFont)["Text"], "[None]")
        self.assertEqual(get_state_as_dict(xLangFontEast)["SelectEntryText"], "[None]")
        self.assertEqual(get_state_as_dict(xLangFontCTL)["SelectEntryText"], "[None]")

        xCanc = xDialog.getChild("cancel")
        self.ui_test.close_dialog_through_button(xCanc)

        self.ui_test.close_doc()

   def test_format_character_tab_font_effects(self):
        self.ui_test.create_doc_in_start_center("writer")
        document = self.ui_test.get_component()
        xWriterDoc = self.xUITest.getTopFocusWindow()

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "1")

        xEffects = xDialog.getChild("effectslb")
        xRelief = xDialog.getChild("relieflb")
        xHidden = xDialog.getChild("hiddencb")
        xOverline = xDialog.getChild("overlinelb")
        xStrikeout = xDialog.getChild("strikeoutlb")
        xUnderline = xDialog.getChild("underlinelb")
        xEmphasis = xDialog.getChild("emphasislb")
        xPosition = xDialog.getChild("positionlb")

        select_pos(xEffects, "1")
        select_pos(xRelief, "1")
        xHidden.executeAction("CLICK", tuple())
        select_pos(xOverline, "1")
        select_pos(xStrikeout, "1")
        select_pos(xUnderline, "1")
        select_pos(xEmphasis, "1")
        select_pos(xPosition, "1")

        xOK = xDialog.getChild("ok")
        xOK.executeAction("CLICK", tuple())

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "1")

        xEffects = xDialog.getChild("effectslb")
        xRelief = xDialog.getChild("relieflb")
        xHidden = xDialog.getChild("hiddencb")
        xOverline = xDialog.getChild("overlinelb")
        xStrikeout = xDialog.getChild("strikeoutlb")
        xUnderline = xDialog.getChild("underlinelb")
        xEmphasis = xDialog.getChild("emphasislb")
        xPosition = xDialog.getChild("positionlb")

        self.assertEqual(get_state_as_dict(xEffects)["SelectEntryText"], "UPPERCASE")
        self.assertEqual(get_state_as_dict(xRelief)["SelectEntryText"], "Embossed")
        self.assertEqual(get_state_as_dict(xHidden)["Selected"], "true")
        self.assertEqual(get_state_as_dict(xOverline)["SelectEntryText"], "Single")
        self.assertEqual(get_state_as_dict(xStrikeout)["SelectEntryText"], "Single")
        self.assertEqual(get_state_as_dict(xUnderline)["SelectEntryText"], "Single")
        self.assertEqual(get_state_as_dict(xEmphasis)["SelectEntryText"], "Dot")
        self.assertEqual(get_state_as_dict(xPosition)["SelectEntryText"], "Below text")

        xCanc = xDialog.getChild("cancel")
        self.ui_test.close_dialog_through_button(xCanc)

        self.ui_test.close_doc()

   def test_format_character_tab_hyperlink(self):
        self.ui_test.create_doc_in_start_center("writer")
        document = self.ui_test.get_component()
        xWriterDoc = self.xUITest.getTopFocusWindow()

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "4")

        xURL = xDialog.getChild("urled")
        xURL.executeAction("TYPE", mkPropertyValues({"TEXT":"libreoffice.org"}))
        xTexted = xDialog.getChild("texted")
        xTexted.executeAction("TYPE", mkPropertyValues({"TEXT":"LibreOffice"}))
        xName = xDialog.getChild("nameed")
        xName.executeAction("TYPE", mkPropertyValues({"TEXT":"hyperlink"}))

        xVisited = xDialog.getChild("visitedlb")
        props = {"TEXT": "Bullets"}
        actionProps = mkPropertyValues(props)
        xVisited.executeAction("SELECT", actionProps)
        xUnVisited = xDialog.getChild("unvisitedlb")
        props = {"TEXT": "Bullets"}
        actionProps = mkPropertyValues(props)
        xUnVisited.executeAction("SELECT", actionProps)

        xOK = xDialog.getChild("ok")
        self.ui_test.close_dialog_through_button(xOK)

        self.xUITest.executeCommand(".uno:GoLeft")
        self.assertEqual(document.Text.String[0:11], "LibreOffice")

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "4")
        xURL = xDialog.getChild("urled")
        xTexted = xDialog.getChild("texted")
        xName = xDialog.getChild("nameed")
        xVisited = xDialog.getChild("visitedlb")
        xUnVisited = xDialog.getChild("unvisitedlb")

        self.assertEqual(get_state_as_dict(xURL)["Text"], "http://libreoffice.org/")
        self.assertEqual(get_state_as_dict(xTexted)["Text"], "LibreOffice")
        self.assertEqual(get_state_as_dict(xName)["Text"], "hyperlink")
        self.assertEqual(get_state_as_dict(xVisited)["SelectEntryText"], "Bullets")
        self.assertEqual(get_state_as_dict(xUnVisited)["SelectEntryText"], "Bullets")

        xCanc = xDialog.getChild("cancel")
        self.ui_test.close_dialog_through_button(xCanc)
        self.ui_test.close_doc()

   def test_format_character_tab_asian_layout(self):
        self.ui_test.create_doc_in_start_center("writer")
        document = self.ui_test.get_component()
        xWriterDoc = self.xUITest.getTopFocusWindow()

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "3")

        xTwolines = xDialog.getChild("twolines")
        xTwolines.executeAction("CLICK", tuple())

        xOK = xDialog.getChild("ok")
        self.ui_test.close_dialog_through_button(xOK)

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "3")
        xTwolines = xDialog.getChild("twolines")

        self.assertEqual(get_state_as_dict(xTwolines)["Selected"], "true")
        xCanc = xDialog.getChild("cancel")
        self.ui_test.close_dialog_through_button(xCanc)
        self.ui_test.close_doc()

   def test_format_character_tab_position(self):
        self.ui_test.create_doc_in_start_center("writer")
        document = self.ui_test.get_component()
        xWriterDoc = self.xUITest.getTopFocusWindow()

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "2")

        xSuperscript = xDialog.getChild("superscript")
        xRelFontSize = xDialog.getChild("fontsizesb")
        x90deg = xDialog.getChild("90deg")
        xScalewidth = xDialog.getChild("scalewidthsb")
        xKerning = xDialog.getChild("kerningsb")
        xPairKerning = xDialog.getChild("pairkerning")
        xFitToLine = xDialog.getChild("fittoline")

        xSuperscript.executeAction("CLICK", tuple())
        xRelFontSize.executeAction("UP", tuple())
        x90deg.executeAction("CLICK", tuple())
        xScalewidth.executeAction("UP", tuple())
        xKerning.executeAction("UP", tuple())
        xPairKerning.executeAction("CLICK", tuple())
        xFitToLine.executeAction("CLICK", tuple())

        xOK = xDialog.getChild("ok")
        self.ui_test.close_dialog_through_button(xOK)

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "2")
        xSuperscript = xDialog.getChild("superscript")
        xRelFontSize = xDialog.getChild("fontsizesb")
        x90deg = xDialog.getChild("90deg")
        xScalewidth = xDialog.getChild("scalewidthsb")
        xKerning = xDialog.getChild("kerningsb")
        xPairKerning = xDialog.getChild("pairkerning")
        xFitToLine = xDialog.getChild("fittoline")

        self.assertEqual(get_state_as_dict(xSuperscript)["Checked"], "true")
        self.assertEqual(get_state_as_dict(x90deg)["Checked"], "true")
        self.assertEqual(get_state_as_dict(xScalewidth)["Text"], "100%")
        self.assertEqual(get_state_as_dict(xKerning)["Text"], "0.1 pt")
        self.assertEqual(get_state_as_dict(xPairKerning)["Selected"], "false")
        self.assertEqual(get_state_as_dict(xFitToLine)["Selected"], "true")

        xCanc = xDialog.getChild("cancel")
        self.ui_test.close_dialog_through_button(xCanc)

        self.ui_test.close_doc()

   def test_format_character_tab_position_scalewidthsb(self):
        self.ui_test.create_doc_in_start_center("writer")
        document = self.ui_test.get_component()
        xWriterDoc = self.xUITest.getTopFocusWindow()

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "2")

        xScalewidth = xDialog.getChild("scalewidthsb")
        xScalewidth.executeAction("UP", tuple())

        xOK = xDialog.getChild("ok")
        self.ui_test.close_dialog_through_button(xOK)

        self.ui_test.execute_dialog_through_command(".uno:FontDialog")
        xDialog = self.xUITest.getTopFocusWindow()
        xTabs = xDialog.getChild("tabcontrol")
        select_pos(xTabs, "2")
        xScalewidth = xDialog.getChild("scalewidthsb")
        self.assertEqual(get_state_as_dict(xScalewidth)["Text"], "101%")

        xCanc = xDialog.getChild("cancel")
        self.ui_test.close_dialog_through_button(xCanc)

        self.ui_test.close_doc()

# vim: set shiftwidth=4 softtabstop=4 expandtab:
