# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*- # # This file is part of the LibreOffice project. # # 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 uitest.uihelper.common import change_measurement_unit from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file from uitest.uihelper.common import select_by_text, select_pos from libreoffice.uno.propertyvalue import mkPropertyValues from com.sun.star.lang import Locale # Chart Display Data Labels dialog class chartDataLabels(UITestCase): def test_chart_data_labels_dialog(self): with self.ui_test.load_file(get_url_for_data_file("chart.ods")) as calc_doc: xCalcDoc = self.xUITest.getTopFocusWindow() gridwin = xCalcDoc.getChild("grid_window") gridwin.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"})) gridwin.executeAction("ACTIVATE", tuple()) xChartMainTop = self.xUITest.getTopFocusWindow() xChartMain = xChartMainTop.getChild("chart_window") xSeriesObj = xChartMain.getChild("CID/D=0:CS=0:CT=0:Series=0") xDataSeries = calc_doc.Sheets[0].Charts[0].getEmbeddedObject().getFirstDiagram().CoordinateSystems[0].ChartTypes[0].DataSeries self.assertFalse(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowCategoryName) self.assertFalse(xDataSeries[0].Label.ShowLegendSymbol) self.assertEqual(xDataSeries[0].LabelSeparator, " ") with self.ui_test.execute_dialog_through_action(xSeriesObj, "COMMAND", mkPropertyValues({"COMMAND": "InsertMenuDataLabels"})) as xDialog: xTabs = xDialog.getChild("tabcontrol") select_pos(xTabs, "1") self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowCategoryName) self.assertFalse(xDataSeries[0].Label.ShowLegendSymbol) self.assertEqual(xDataSeries[0].LabelSeparator, " ") category = xDialog.getChild("CB_CATEGORY") legend = xDialog.getChild("CB_SYMBOL") wrapText = xDialog.getChild("CB_WRAP_TEXT") separator = xDialog.getChild("LB_TEXT_SEPARATOR") placement = xDialog.getChild("LB_LABEL_PLACEMENT") degrees = xDialog.getChild("NF_LABEL_DEGREES") textDirection = xDialog.getChild("LB_LABEL_TEXTDIR") #valueAsNumber.executeAction("CLICK", tuple()) category.executeAction("CLICK", tuple()) legend.executeAction("CLICK", tuple()) wrapText.executeAction("CLICK", tuple()) select_by_text(separator, "Comma") select_by_text(placement, "Below") degrees.executeAction("UP", tuple()) select_by_text(textDirection, "Right-to-left") self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertTrue(xDataSeries[0].Label.ShowCategoryName) self.assertTrue(xDataSeries[0].Label.ShowLegendSymbol) self.assertEqual(xDataSeries[0].LabelSeparator, ", ") #reopen and verify InsertMenuDataLabels dialog gridwin.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"})) gridwin.executeAction("ACTIVATE", tuple()) xChartMainTop = self.xUITest.getTopFocusWindow() xChartMain = xChartMainTop.getChild("chart_window") xSeriesObj = xChartMain.getChild("CID/D=0:CS=0:CT=0:Series=0") with self.ui_test.execute_dialog_through_action(xSeriesObj, "COMMAND", mkPropertyValues({"COMMAND": "InsertMenuDataLabels"})) as xDialog: xTabs = xDialog.getChild("tabcontrol") select_pos(xTabs, "1") self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertTrue(xDataSeries[0].Label.ShowCategoryName) self.assertTrue(xDataSeries[0].Label.ShowLegendSymbol) self.assertEqual(xDataSeries[0].LabelSeparator, ", ") valueAsNumber = xDialog.getChild("CB_VALUE_AS_NUMBER") category = xDialog.getChild("CB_CATEGORY") legend = xDialog.getChild("CB_SYMBOL") wrapText = xDialog.getChild("CB_WRAP_TEXT") separator = xDialog.getChild("LB_TEXT_SEPARATOR") placement = xDialog.getChild("LB_LABEL_PLACEMENT") degrees = xDialog.getChild("NF_LABEL_DEGREES") textDirection = xDialog.getChild("LB_LABEL_TEXTDIR") self.assertEqual(get_state_as_dict(valueAsNumber)["Selected"], "true") self.assertEqual(get_state_as_dict(category)["Selected"], "true") self.assertEqual(get_state_as_dict(legend)["Selected"], "true") self.assertEqual(get_state_as_dict(wrapText)["Selected"], "true") self.assertEqual(get_state_as_dict(separator)["SelectEntryText"], "Comma") self.assertEqual(get_state_as_dict(placement)["SelectEntryText"], "Below") self.assertEqual(get_state_as_dict(degrees)["Text"], "1°") self.assertEqual(get_state_as_dict(textDirection)["SelectEntryText"], "Right-to-left") self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertTrue(xDataSeries[0].Label.ShowCategoryName) self.assertTrue(xDataSeries[0].Label.ShowLegendSymbol) self.assertEqual(xDataSeries[0].LabelSeparator, ", ") def test_chart_data_labels_percentage_dialog(self): with self.ui_test.load_file(get_url_for_data_file("dataLabels.ods")) as calc_doc: xCalcDoc = self.xUITest.getTopFocusWindow() gridwin = xCalcDoc.getChild("grid_window") gridwin.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"})) gridwin.executeAction("ACTIVATE", tuple()) xChartMainTop = self.xUITest.getTopFocusWindow() xChartMain = xChartMainTop.getChild("chart_window") xSeriesObj = xChartMain.getChild("CID/D=0:CS=0:CT=0:Series=0") xDataSeries = calc_doc.Sheets[0].Charts[0].getEmbeddedObject().getFirstDiagram().CoordinateSystems[0].ChartTypes[0].DataSeries self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) self.assertIsNone(xDataSeries[0].PercentageNumberFormat) with self.ui_test.execute_dialog_through_action(xSeriesObj, "COMMAND", mkPropertyValues({"COMMAND": "FormatDataLabels"})) as xDialog: xTabs = xDialog.getChild("tabcontrol") select_pos(xTabs, "1") self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) self.assertIsNone(xDataSeries[0].PercentageNumberFormat) valueAsNumber = xDialog.getChild("CB_VALUE_AS_NUMBER") valueAsPercentage = xDialog.getChild("CB_VALUE_AS_PERCENTAGE") buttonPercentage = xDialog.getChild("PB_PERCENT_NUMBERFORMAT") valueAsNumber.executeAction("CLICK", tuple()) valueAsPercentage.executeAction("CLICK", tuple()) #button Percentage format with self.ui_test.execute_blocking_action(buttonPercentage.executeAction, args=('CLICK', ())) as dialog: sourceformat = dialog.getChild("sourceformat") decimalsed = dialog.getChild("decimalsed") leadzerosed = dialog.getChild("leadzerosed") negnumred = dialog.getChild("negnumred") thousands = dialog.getChild("thousands") formatted = dialog.getChild("formatted") sourceformat.executeAction("CLICK", tuple()) decimalsed.executeAction("UP", tuple()) leadzerosed.executeAction("UP", tuple()) negnumred.executeAction("CLICK", tuple()) thousands.executeAction("CLICK", tuple()) self.assertEqual(get_state_as_dict(formatted)["Text"], "#,#00.0%;[RED]-#,#00.0%") self.assertEqual(get_state_as_dict(valueAsNumber)["Selected"], "false") self.assertEqual(get_state_as_dict(valueAsPercentage)["Selected"], "true") xNumberFormats = calc_doc.Sheets[0].Charts[0].getEmbeddedObject().getNumberFormats() xLocale = Locale('en', 'US', '') xFormat = xNumberFormats.queryKey("#,#00.0%;[RED]-#,#00.0%", xLocale, True) self.assertFalse(xDataSeries[0].Label.ShowNumber) self.assertTrue(xDataSeries[0].Label.ShowNumberInPercent) self.assertEqual(xDataSeries[0].PercentageNumberFormat, xFormat) #reopen and verify Percentage dialog gridwin.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"})) gridwin.executeAction("ACTIVATE", tuple()) xChartMainTop = self.xUITest.getTopFocusWindow() xChartMain = xChartMainTop.getChild("chart_window") xSeriesObj = xChartMain.getChild("CID/D=0:CS=0:CT=0:Series=0") with self.ui_test.execute_dialog_through_action(xSeriesObj, "COMMAND", mkPropertyValues({"COMMAND": "FormatDataLabels"})) as xDialog: xTabs = xDialog.getChild("tabcontrol") select_pos(xTabs, "1") self.assertFalse(xDataSeries[0].Label.ShowNumber) self.assertTrue(xDataSeries[0].Label.ShowNumberInPercent) self.assertEqual(xDataSeries[0].PercentageNumberFormat, xFormat) valueAsNumber = xDialog.getChild("CB_VALUE_AS_NUMBER") valueAsPercentage = xDialog.getChild("CB_VALUE_AS_PERCENTAGE") self.assertEqual(get_state_as_dict(valueAsNumber)["Selected"], "false") self.assertEqual(get_state_as_dict(valueAsPercentage)["Selected"], "true") self.assertFalse(xDataSeries[0].Label.ShowNumber) self.assertTrue(xDataSeries[0].Label.ShowNumberInPercent) self.assertEqual(xDataSeries[0].PercentageNumberFormat, xFormat) def test_tdf131291(self): with self.ui_test.load_file(get_url_for_data_file("tdf131291.ods")) as calc_doc: xCalcDoc = self.xUITest.getTopFocusWindow() gridwin = xCalcDoc.getChild("grid_window") gridwin.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"})) gridwin.executeAction("ACTIVATE", tuple()) xChartMainTop = self.xUITest.getTopFocusWindow() xChartMain = xChartMainTop.getChild("chart_window") xSeriesObj = xChartMain.getChild("CID/D=0:CS=0:CT=0:Series=0") xDataSeries = calc_doc.Sheets[0].Charts[0].getEmbeddedObject().getFirstDiagram().CoordinateSystems[0].ChartTypes[0].DataSeries self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) with self.ui_test.execute_dialog_through_action(xSeriesObj, "COMMAND", mkPropertyValues({"COMMAND": "FormatDataLabels"})) as xDialog: xTabs = xDialog.getChild("tabcontrol") select_pos(xTabs, "1") self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) xNumberFormatBtn = xDialog.getChild("PB_NUMBERFORMAT") with self.ui_test.execute_blocking_action(xNumberFormatBtn.executeAction, args=('CLICK', ())) as dialog: categoryformat = dialog.getChild("categorylb") formatted = dialog.getChild("formatted") sourceformat = dialog.getChild("sourceformat") # Select currency sourceformat.executeAction("CLICK", tuple()); categoryformat.getChild("4").executeAction("SELECT", tuple()); self.assertEqual(get_state_as_dict(categoryformat)["SelectEntryText"], "Currency") self.assertEqual(get_state_as_dict(formatted)["Text"], "[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00") xNumberFormats = calc_doc.Sheets[0].Charts[0].getEmbeddedObject().getNumberFormats() xLocale = Locale() xFormat = xNumberFormats.queryKey("[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00", xLocale, True) self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) self.assertEqual(xDataSeries[0].NumberFormat, xFormat) #reopen and verify the previous changes with self.ui_test.execute_dialog_through_action(xSeriesObj, "COMMAND", mkPropertyValues({"COMMAND": "FormatDataLabels"})) as xDialog: self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) # tdf#131291: it would fail here: AssertionError: 0 != 104 self.assertEqual(xDataSeries[0].NumberFormat, xFormat) self.assertTrue(xDataSeries[0].Label.ShowNumber) self.assertFalse(xDataSeries[0].Label.ShowNumberInPercent) self.assertEqual(xDataSeries[0].NumberFormat, xFormat) def test_tdf136573(self): with self.ui_test.load_file(get_url_for_data_file("dataLabels.ods")): with change_measurement_unit(self, "Centimeter"): xCalcDoc = self.xUITest.getTopFocusWindow() gridwin = xCalcDoc.getChild("grid_window") gridwin.executeAction("SELECT", mkPropertyValues({"OBJECT": "Object 1"})) gridwin.executeAction("ACTIVATE", tuple()) xChartMainTop = self.xUITest.getTopFocusWindow() xChartMain = xChartMainTop.getChild("chart_window") # Select the first label xDataLabel = xChartMain.getChild("CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0") xDataLabel.executeAction("SELECT", tuple()) with self.ui_test.execute_dialog_through_action(xDataLabel, "COMMAND", mkPropertyValues({"COMMAND": "TransformDialog"})) as xDialog: self.assertEqual("0.74", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_X"))['Value']) self.assertEqual("2.82", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_Y"))['Value']) # Use OK button in order to test tdf#137165 xChartMain.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) xChartMain.executeAction("TYPE", mkPropertyValues({"KEYCODE": "LEFT"})) with self.ui_test.execute_dialog_through_action(xDataLabel, "COMMAND", mkPropertyValues({"COMMAND": "TransformDialog"})) as xDialog: # Check the position has changed after moving the label using the arrows keys self.assertEqual("0.64", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_X"))['Value']) self.assertEqual("2.72", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_Y"))['Value']) # vim: set shiftwidth=4 softtabstop=4 expandtab: