Files
libreoffice/sw/qa/python/check_table.py

458 lines
21 KiB
Python
Raw Normal View History

import math
import unittest
from org.libreoffice.unotest import UnoInProcess
from com.sun.star.beans import PropertyValue
from com.sun.star.uno import RuntimeException
from com.sun.star.table import BorderLine
from com.sun.star.table import BorderLine2
from com.sun.star.table.BorderLineStyle import (DOUBLE, SOLID, EMBOSSED,\
THICKTHIN_LARGEGAP, DASHED, DOTTED)
class CheckTable(unittest.TestCase):
_uno = None
def _fill_table(self, xTable):
for x in range(3):
for y in range(3):
xTable.getCellByPosition(x, y).String = 'Cell %d %d' % (x, y)
def _check_table(self, xTable):
for x in range(3):
for y in range(3):
self.assertEqual('Cell %d %d' % (x, y), xTable.getCellByPosition(x, y).String)
@classmethod
def setUpClass(cls):
cls._uno = UnoInProcess()
cls._uno.setUp()
@classmethod
def tearDownClass(cls):
cls._uno.tearDown()
def test_tableborder(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
# insert table
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(3, 3)
xText = xDoc.getText()
xCursor = xText.createTextCursor()
xText.insertTextContent(xCursor, xTable, False)
border = xTable.getPropertyValue("TableBorder")
self.assertTrue(border.IsTopLineValid)
self.assertEqual(0, border.TopLine.InnerLineWidth)
self.assertEqual(2, border.TopLine.OuterLineWidth)
self.assertEqual(0, border.TopLine.LineDistance)
self.assertEqual(0, border.TopLine.Color)
self.assertTrue(border.IsBottomLineValid)
self.assertEqual(0, border.BottomLine.InnerLineWidth)
self.assertEqual(2, border.BottomLine.OuterLineWidth)
self.assertEqual(0, border.BottomLine.LineDistance)
self.assertEqual(0, border.BottomLine.Color)
self.assertTrue(border.IsLeftLineValid)
self.assertEqual(0, border.LeftLine.InnerLineWidth)
self.assertEqual(2, border.LeftLine.OuterLineWidth)
self.assertEqual(0, border.LeftLine.LineDistance)
self.assertEqual(0, border.LeftLine.Color)
self.assertTrue(border.IsRightLineValid)
self.assertEqual(0, border.RightLine.InnerLineWidth)
self.assertEqual(2, border.RightLine.OuterLineWidth)
self.assertEqual(0, border.RightLine.LineDistance)
self.assertEqual(0, border.RightLine.Color)
self.assertTrue(border.IsHorizontalLineValid)
self.assertEqual(0, border.HorizontalLine.InnerLineWidth)
self.assertEqual(2, border.HorizontalLine.OuterLineWidth)
self.assertEqual(0, border.HorizontalLine.LineDistance)
self.assertEqual(0, border.HorizontalLine.Color)
self.assertTrue(border.IsVerticalLineValid)
self.assertEqual(0, border.VerticalLine.InnerLineWidth)
self.assertEqual(2, border.VerticalLine.OuterLineWidth)
self.assertEqual(0, border.VerticalLine.LineDistance)
self.assertEqual(0, border.VerticalLine.Color)
self.assertTrue(border.IsDistanceValid)
self.assertEqual(97, border.Distance)
# set border
border.TopLine = BorderLine(0, 11, 19, 19)
border.BottomLine = BorderLine(0xFF, 00, 11, 00)
border.HorizontalLine = BorderLine(0xFF00, 00, 90, 00)
xTable.setPropertyValue("TableBorder", border)
# read set border
border = xTable.getPropertyValue("TableBorder")
self.assertTrue(border.IsTopLineValid)
self.assertEqual(11, border.TopLine.InnerLineWidth)
self.assertEqual(19, border.TopLine.OuterLineWidth)
self.assertEqual(19, border.TopLine.LineDistance)
self.assertEqual(0, border.TopLine.Color)
self.assertTrue(border.IsBottomLineValid)
self.assertEqual(0, border.BottomLine.InnerLineWidth)
self.assertEqual(11, border.BottomLine.OuterLineWidth)
self.assertEqual(0, border.BottomLine.LineDistance)
self.assertEqual(0xFF, border.BottomLine.Color)
self.assertTrue(border.IsLeftLineValid)
self.assertEqual(0, border.LeftLine.InnerLineWidth)
self.assertEqual(2, border.LeftLine.OuterLineWidth)
self.assertEqual(0, border.LeftLine.LineDistance)
self.assertEqual(0, border.LeftLine.Color)
self.assertTrue(border.IsRightLineValid)
self.assertEqual(0, border.RightLine.InnerLineWidth)
self.assertEqual(2, border.RightLine.OuterLineWidth)
self.assertEqual(0, border.RightLine.LineDistance)
self.assertEqual(0, border.RightLine.Color)
self.assertTrue(border.IsHorizontalLineValid)
self.assertEqual(0, border.HorizontalLine.InnerLineWidth)
self.assertEqual(90, border.HorizontalLine.OuterLineWidth)
self.assertEqual(0, border.HorizontalLine.LineDistance)
self.assertEqual(0xFF00, border.HorizontalLine.Color)
self.assertTrue(border.IsVerticalLineValid)
self.assertEqual(0, border.VerticalLine.InnerLineWidth)
self.assertEqual(2, border.VerticalLine.OuterLineWidth)
self.assertEqual(0, border.VerticalLine.LineDistance)
self.assertEqual(0, border.VerticalLine.Color)
self.assertTrue(border.IsDistanceValid)
self.assertEqual(97, border.Distance)
border2 = xTable.getPropertyValue("TableBorder2")
self.assertTrue(border2.IsTopLineValid)
self.assertEqual(11, border2.TopLine.InnerLineWidth)
self.assertEqual(19, border2.TopLine.OuterLineWidth)
self.assertEqual(19, border2.TopLine.LineDistance)
self.assertEqual(0, border2.TopLine.Color)
self.assertEqual(DOUBLE, border2.TopLine.LineStyle)
self.assertEqual(49, border2.TopLine.LineWidth)
self.assertTrue(border2.IsBottomLineValid)
self.assertEqual(0, border2.BottomLine.InnerLineWidth)
self.assertEqual(11, border2.BottomLine.OuterLineWidth)
self.assertEqual(0, border2.BottomLine.LineDistance)
self.assertEqual(0xFF, border2.BottomLine.Color)
self.assertEqual(SOLID, border2.BottomLine.LineStyle)
self.assertEqual(11, border2.BottomLine.LineWidth)
self.assertTrue(border2.IsLeftLineValid)
self.assertEqual(0, border2.LeftLine.InnerLineWidth)
self.assertEqual(2, border2.LeftLine.OuterLineWidth)
self.assertEqual(0, border2.LeftLine.LineDistance)
self.assertEqual(0, border2.LeftLine.Color)
self.assertEqual(SOLID, border2.LeftLine.LineStyle)
self.assertEqual(2, border2.LeftLine.LineWidth)
self.assertTrue(border2.IsRightLineValid)
self.assertEqual(0, border2.RightLine.InnerLineWidth)
self.assertEqual(2, border2.RightLine.OuterLineWidth)
self.assertEqual(0, border2.RightLine.LineDistance)
self.assertEqual(0, border2.RightLine.Color)
self.assertEqual(SOLID, border2.RightLine.LineStyle)
self.assertEqual(2, border2.RightLine.LineWidth)
self.assertTrue(border2.IsHorizontalLineValid)
self.assertEqual(0, border2.HorizontalLine.InnerLineWidth)
self.assertEqual(90, border2.HorizontalLine.OuterLineWidth)
self.assertEqual(0, border2.HorizontalLine.LineDistance)
self.assertEqual(0xFF00, border2.HorizontalLine.Color)
self.assertEqual(SOLID, border2.HorizontalLine.LineStyle)
self.assertEqual(90, border2.HorizontalLine.LineWidth)
self.assertTrue(border2.IsVerticalLineValid)
self.assertEqual(0, border2.VerticalLine.InnerLineWidth)
self.assertEqual(2, border2.VerticalLine.OuterLineWidth)
self.assertEqual(0, border2.VerticalLine.LineDistance)
self.assertEqual(0, border2.VerticalLine.Color)
self.assertEqual(SOLID, border2.VerticalLine.LineStyle)
self.assertEqual(2, border2.VerticalLine.LineWidth)
self.assertTrue(border2.IsDistanceValid)
self.assertEqual(97, border2.Distance)
# set border2
border2.RightLine = BorderLine2(0, 0, 0, 0, THICKTHIN_LARGEGAP, 120)
border2.LeftLine = BorderLine2(0, 0, 0, 0, EMBOSSED, 90)
border2.VerticalLine = BorderLine2(0xFF, 0, 90, 0, DOTTED, 0)
border2.HorizontalLine = BorderLine2(0xFF00, 0, 0, 0, DASHED, 11)
xTable.setPropertyValue("TableBorder2", border2)
# read set border2
border2 = xTable.getPropertyValue("TableBorder2")
self.assertTrue(border2.IsTopLineValid)
self.assertEqual(11, border2.TopLine.InnerLineWidth)
self.assertEqual(19, border2.TopLine.OuterLineWidth)
self.assertEqual(19, border2.TopLine.LineDistance)
self.assertEqual(0, border2.TopLine.Color)
self.assertEqual(DOUBLE, border2.TopLine.LineStyle)
self.assertEqual(49, border2.TopLine.LineWidth)
self.assertTrue(border2.IsBottomLineValid)
self.assertEqual(0, border2.BottomLine.InnerLineWidth)
self.assertEqual(11, border2.BottomLine.OuterLineWidth)
self.assertEqual(0, border2.BottomLine.LineDistance)
self.assertEqual(0xFF, border2.BottomLine.Color)
self.assertEqual(SOLID, border2.BottomLine.LineStyle)
self.assertEqual(11, border2.BottomLine.LineWidth)
self.assertTrue(border2.IsLeftLineValid)
self.assertEqual(23, border2.LeftLine.InnerLineWidth)
self.assertEqual(23, border2.LeftLine.OuterLineWidth)
self.assertEqual(46, border2.LeftLine.LineDistance)
self.assertEqual(0, border2.LeftLine.Color)
self.assertEqual(EMBOSSED, border2.LeftLine.LineStyle)
self.assertEqual(90, border2.LeftLine.LineWidth)
self.assertTrue(border2.IsRightLineValid)
self.assertEqual(53, border2.RightLine.InnerLineWidth)
self.assertEqual(26, border2.RightLine.OuterLineWidth)
self.assertEqual(41, border2.RightLine.LineDistance)
self.assertEqual(0, border2.RightLine.Color)
self.assertEqual(THICKTHIN_LARGEGAP, border2.RightLine.LineStyle)
self.assertEqual(120, border2.RightLine.LineWidth)
self.assertTrue(border2.IsHorizontalLineValid)
self.assertEqual(0, border2.HorizontalLine.InnerLineWidth)
self.assertEqual(11, border2.HorizontalLine.OuterLineWidth)
self.assertEqual(0, border2.HorizontalLine.LineDistance)
self.assertEqual(0xFF00, border2.HorizontalLine.Color)
self.assertEqual(DASHED, border2.HorizontalLine.LineStyle)
self.assertEqual(11, border2.HorizontalLine.LineWidth)
self.assertTrue(border2.IsVerticalLineValid)
self.assertEqual(0, border2.VerticalLine.InnerLineWidth)
self.assertEqual(90, border2.VerticalLine.OuterLineWidth)
self.assertEqual(0, border2.VerticalLine.LineDistance)
self.assertEqual(0xFF, border2.VerticalLine.Color)
self.assertEqual(DOTTED, border2.VerticalLine.LineStyle)
self.assertEqual(90, border2.VerticalLine.LineWidth)
self.assertTrue(border2.IsDistanceValid)
self.assertEqual(97, border2.Distance)
# close document
xDoc.dispose()
def test_fdo58242(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
# insert table
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(3, 3)
xText = xDoc.getText()
xCursor = xText.createTextCursor()
xText.insertTextContent(xCursor, xTable, False)
# get anchor
xAnchor = xTable.getAnchor()
# check all properties on the anchor - shouldn't crash despite
# pointing to a non-SwTextNode
xPropsInfo = xAnchor.getPropertySetInfo()
for i in xPropsInfo.getProperties():
try:
xAnchor.getPropertyValue(i.Name)
except RuntimeException:
pass
# close document
xDoc.dispose()
def test_descriptions(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
# insert table
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(3, 3)
xCursor = xDoc.Text.createTextCursor()
xDoc.Text.insertTextContent(xCursor, xTable, False)
self.assertEqual(3, xTable.Rows.Count)
self.assertEqual(3, xTable.Columns.Count)
# fill table
self._fill_table(xTable)
self._check_table(xTable)
# check without labels first
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = False
self.assertEqual(0, len(xTable.RowDescriptions))
self.assertEqual(0, len(xTable.ColumnDescriptions))
self.RowDescriptions = ('foo', 'bar', 'baz') # no labels, thus noop
self.ColumnDescriptions = ('foo', 'bar', 'baz') # no labels, thus noop
self._check_table(xTable)
# now check with labels
xTable.ChartColumnAsLabel = True
xTable.ChartRowAsLabel = True
self.assertEqual(2, len(xTable.RowDescriptions))
self.assertEqual('Cell 0 1', xTable.RowDescriptions[0])
self.assertEqual('Cell 0 2', xTable.RowDescriptions[1])
self.assertEqual(2, len(xTable.ColumnDescriptions))
self.assertEqual('Cell 1 0', xTable.ColumnDescriptions[0])
self.assertEqual('Cell 2 0', xTable.ColumnDescriptions[1])
with self.assertRaises(Exception):
xTable.RowDescriptions = ('foo',) # too short
with self.assertRaises(Exception):
xTable.ColumnDescriptions = ('foo',) # too short
self._check_table(xTable)
xTable.RowDescriptions = ('fooRow', 'bazRow')
xTable.ColumnDescriptions = ('fooColumn', 'bazColumn')
self.assertEqual('fooRow', xTable.getCellByPosition(0,1).String)
self.assertEqual('bazRow', xTable.getCellByPosition(0,2).String)
self.assertEqual('fooColumn', xTable.getCellByPosition(1,0).String)
self.assertEqual('bazColumn', xTable.getCellByPosition(2,0).String)
xTable.getCellByPosition(0,1).String = 'Cell 0 1' # reset changes values ...
xTable.getCellByPosition(0,2).String = 'Cell 0 2'
xTable.getCellByPosition(1,0).String = 'Cell 1 0'
xTable.getCellByPosition(2,0).String = 'Cell 2 0'
self._check_table(xTable) # ... to ensure the rest was untouched
# check disconnected table excepts, but doesnt crash
xTable2 = xDoc.createInstance("com.sun.star.text.TextTable")
xTable2.initialize(3, 3)
with self.assertRaises(Exception):
foo = xTable2.RowDescriptions
with self.assertRaises(Exception):
foo = xTable2.ColumnDescriptions
xDoc.dispose()
def test_getset_data(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
# insert table
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(4, 3)
xCursor = xDoc.Text.createTextCursor()
xDoc.Text.insertTextContent(xCursor, xTable, False)
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = False
# roundtrip
xTable.Data = ((1,2,3), (4,5,6), (7,8,9), (10,11,12))
self.assertEqual( xTable.Data, ((1,2,3), (4,5,6), (7,8,9), (10,11,12)))
# missing row
with self.assertRaises(Exception):
xTable.Data = ((1,2,3), (4,5,6), (7,8,9))
# missing column
with self.assertRaises(Exception):
xTable.Data = ((1,2), (4,5), (7,8), (10,11))
# with labels
xTable.ChartColumnAsLabel = True
xTable.ChartRowAsLabel = True
self.assertEqual( xTable.Data, ((5,6), (8,9), (11,12)))
xTable.Data = ((55,66), (88,99), (1111,1212))
xTable.ChartColumnAsLabel = True
xTable.ChartRowAsLabel = False
self.assertEqual( xTable.Data, ((2,3), (55,66), (88,99), (1111,1212)))
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = True
self.assertEqual( xTable.Data, ((4,55,66), (7,88,99), (10,1111,1212)))
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = False
self.assertEqual( xTable.Data, ((1,2,3), (4,55,66), (7,88,99), (10,1111,1212)))
xDoc.dispose()
def test_remove_colrow(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(4, 3)
xCursor = xDoc.Text.createTextCursor()
xDoc.Text.insertTextContent(xCursor, xTable, False)
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = False
xTable.Data = ((1,2,3), (4,5,6), (7,8,9), (10,11,12))
xRows = xTable.Rows
self.assertEquals(xRows.ImplementationName, 'SwXTableRows')
self.assertTrue(xRows.supportsService('com.sun.star.text.TableRows'))
self.assertFalse(xRows.supportsService('foo'))
self.assertIn('com.sun.star.text.TableRows', xRows.SupportedServiceNames)
self.assertNotIn('foo', xRows.SupportedServiceNames)
xRows.removeByIndex(1, 2)
self.assertEqual( xTable.Data, ((1,2,3), (10,11,12)))
xCols = xTable.Columns
self.assertEquals(xCols.ImplementationName, 'SwXTableColumns')
self.assertTrue(xCols.supportsService('com.sun.star.text.TableColumns'))
self.assertFalse(xCols.supportsService('foo'))
self.assertIn('com.sun.star.text.TableColumns', xCols.SupportedServiceNames)
self.assertNotIn('foo', xCols.SupportedServiceNames)
xCols.removeByIndex(1, 1)
self.assertEqual( xTable.Data, ((1,3), (10,12)))
xDoc.dispose()
def test_insert_colrow(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(4, 3)
xCursor = xDoc.Text.createTextCursor()
xDoc.Text.insertTextContent(xCursor, xTable, False)
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = False
xTable.Data = ((1,2,3), (4,5,6), (7,8,9), (10,11,12))
xRows = xTable.Rows
xRows.insertByIndex(1, 2)
nan = float('nan')
self.assertEqual(xTable.Data[0], (1,2,3))
self.assertEqual(xTable.Data[3], (4,5,6))
self.assertEqual(xTable.Data[4], (7,8,9))
self.assertEqual(xTable.Data[5], (10,11,12))
for x in range(3):
self.assertTrue(math.isnan(xTable.Data[1][x]))
self.assertTrue(math.isnan(xTable.Data[2][x]))
xCols = xTable.Columns
xCols.insertByIndex(1, 1)
self.assertEqual(xTable.Data[0][0], 1)
self.assertTrue(math.isnan(xTable.Data[0][1]))
self.assertEqual(xTable.Data[0][2], 2)
self.assertEqual(xTable.Data[0][3], 3)
self.assertEqual(xTable.Data[3][0], 4)
self.assertTrue(math.isnan(xTable.Data[3][1]))
self.assertEqual(xTable.Data[3][2], 5)
self.assertEqual(xTable.Data[3][3], 6)
self.assertEqual(xTable.Data[4][0], 7)
self.assertTrue(math.isnan(xTable.Data[4][1]))
self.assertEqual(xTable.Data[4][2], 8)
self.assertEqual(xTable.Data[4][3], 9)
self.assertEqual(xTable.Data[5][0], 10)
self.assertTrue(math.isnan(xTable.Data[5][1]))
self.assertEqual(xTable.Data[5][2], 11)
self.assertEqual(xTable.Data[5][3], 12)
for x in range(4):
self.assertTrue(math.isnan(xTable.Data[1][x]))
self.assertTrue(math.isnan(xTable.Data[2][x]))
xDoc.dispose()
def test_chartdataprovider(self):
xDoc = CheckTable._uno.openEmptyWriterDoc()
xTable = xDoc.createInstance("com.sun.star.text.TextTable")
xTable.initialize(4, 3)
xCursor = xDoc.Text.createTextCursor()
xDoc.Text.insertTextContent(xCursor, xTable, False)
xTable.ChartColumnAsLabel = False
xTable.ChartRowAsLabel = False
xTable.Data = ((1,2,3), (4,5,6), (7,8,9), (10,11,12))
self.assertTrue(xTable.Name == 'Table1')
self.assertIn('com.sun.star.text.GenericTextDocument', xDoc.SupportedServiceNames)
xChartdataprovider = xDoc.createInstance('com.sun.star.chart2.data.DataProvider')
self.assertEquals(xChartdataprovider.ImplementationName, 'SwChartDataProvider')
self.assertTrue(xChartdataprovider.supportsService('com.sun.star.chart2.data.DataProvider'))
self.assertFalse(xChartdataprovider.supportsService('foo'))
self.assertIn('com.sun.star.chart2.data.DataProvider', xChartdataprovider.SupportedServiceNames)
pv = PropertyValue()
pv.Name = 'CellRangeRepresentation'
pv.Value = 'Table1.A1:C2'
xDataSource = xChartdataprovider.createDataSource((pv,))
self.assertEqual(len(xDataSource.DataSequences), 3)
expectedValues = ((1,4), (2,5), (3,6))
expectedCellrange = ('A1:A2', 'B1:B2', 'C1:C2')
for col in range(3):
xSeq = xDataSource.DataSequences[col].Values
self.assertEquals(xSeq.ImplementationName, 'SwChartDataSequence')
self.assertTrue(xSeq.supportsService('com.sun.star.chart2.data.DataSequence'))
self.assertFalse(xSeq.supportsService('foo'))
self.assertIn('com.sun.star.chart2.data.DataSequence', xSeq.SupportedServiceNames)
self.assertEqual(xSeq.SourceRangeRepresentation, 'Table1.%s' % expectedCellrange[col])
self.assertEqual(xSeq.Data, expectedValues[col])
self.assertEqual(xSeq.NumericalData, expectedValues[col])
self.assertEqual(
[int(txtval) for txtval in xSeq.TextualData],
[val for val in expectedValues[col]])
if __name__ == '__main__':
unittest.main()
# /* vim:set shiftwidth=4 softtabstop=4 expandtab: */