#!/usr/bin/env python
#
# 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/.
#
import unittest
from testcollections_base
import CollectionsTestBase
from com.sun.star.table
import CellAddress
# TextTable instance factory
def getTextTableInstance(doc):
return doc.createInstance(
'com.sun.star.text.TextTable')
# Tests behaviour of objects implementing XCellRange using the new-style
# collection accessors
class TestXCellRange(CollectionsTestBase):
# TODO negative indices
# Tests syntax:
# cell = cellrange[0,0] # Access cell by indices
# For:
# Spreadsheet
# Cell at Row 0, Col 0
def test_XCellRange_Spreadsheet_Cell_00(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
cell = sht[0, 0]
# Then
self.assertEqual(0, cell.CellAddress.Sheet)
self.assertEqual(0, cell.CellAddress.Row)
self.assertEqual(0, cell.CellAddress.Column)
spr.close(
True)
# Tests syntax:
# cell = cellrange[0,0] # Access cell by indices
# For:
# Text table
# Cell at Row 0, Col 0
def test_XCellRange_Table_Cell_00(self):
# Given
doc = self.createBlankTextDocument()
text_table = getTextTableInstance(doc)
text_table.initialize(10, 10)
cursor = doc.Text.createTextCursor()
doc.Text.insertTextContent(cursor, text_table,
False)
tbl = doc.TextTables[0]
# When
cell = tbl[0, 0]
# Then
self.assertEqual(
'A1', cell.CellName)
doc.close(
True)
# Tests syntax:
# cell = cellrange[0,0] # Access cell by indices
# For:
# Spreadsheet
# Cell at Row 3, Col 7
def test_XCellRange_Spreadsheet_Cell_37(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[3, 7]
# Then
self.assertEqual(0, rng.CellAddress.Sheet)
self.assertEqual(3, rng.CellAddress.Row)
self.assertEqual(7, rng.CellAddress.Column)
spr.close(
True)
# Tests syntax:
# cell = cellrange[0,0] # Access cell by indices
# For:
# Text table
# Cell at Row 3, Col 7
def test_XCellRange_Table_Cell_37(self):
# Given
doc = self.createBlankTextDocument()
text_table = getTextTableInstance(doc)
text_table.initialize(10, 10)
cursor = doc.Text.createTextCursor()
doc.Text.insertTextContent(cursor, text_table,
False)
tbl = doc.TextTables[0]
# When
cell = tbl[3, 7]
# Then
self.assertEqual(
'H4', cell.CellName)
doc.close(
True)
# Tests syntax:
# rng = cellrange[0,1:2] # Access cell range by index,slice
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_Index_Slice(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[0, 1:3]
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(0, rng.RangeAddress.StartRow)
self.assertEqual(1, rng.RangeAddress.StartColumn)
self.assertEqual(0, rng.RangeAddress.EndRow)
self.assertEqual(2, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange[0,1:2] # Access cell range by index,slice
# For:
# Text table
def test_XCellRange_Table_Range_Index_Slice(self):
# Given
doc = self.createBlankTextDocument()
text_table = getTextTableInstance(doc)
text_table.initialize(10, 10)
cursor = doc.Text.createTextCursor()
doc.Text.insertTextContent(cursor, text_table,
False)
tbl = doc.TextTables[0]
doc.lockControllers()
tbl.DataArray = tuple(tuple(str(100 + y)
for y
in range(10*x, 10*x + 10))
for x
in range(10))
doc.unlockControllers()
# When
rng = tbl[0, 1:3]
# Then
self.assertEqual(((
'101',
'102'),), rng.DataArray)
doc.close(
True)
# Tests syntax:
# rng = cellrange[1:2,0] # Access cell range by slice,index
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_Slice_Index(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[1:3, 0]
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(1, rng.RangeAddress.StartRow)
self.assertEqual(0, rng.RangeAddress.StartColumn)
self.assertEqual(2, rng.RangeAddress.EndRow)
self.assertEqual(0, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange[1:2,0] # Access cell range by index,slice
# For:
# Text table
def test_XCellRange_Table_Range_Slice_Index(self):
# Given
doc = self.createBlankTextDocument()
text_table = getTextTableInstance(doc)
text_table.initialize(10, 10)
cursor = doc.Text.createTextCursor()
doc.Text.insertTextContent(cursor, text_table,
False)
tbl = doc.TextTables[0]
doc.lockControllers()
tbl.DataArray = tuple(tuple(str(100 + y)
for y
in range(10*x, 10*x + 10))
for x
in range(10))
doc.unlockControllers()
# When
rng = tbl[1:3, 0]
# Then
self.assertEqual(((
'110',), (
'120',)), rng.DataArray)
doc.close(
True)
# Tests syntax:
# rng = cellrange[0:1,2:3] # Access cell range by slices
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_Slices(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[1:3, 3:5]
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(1, rng.RangeAddress.StartRow)
self.assertEqual(3, rng.RangeAddress.StartColumn)
self.assertEqual(2, rng.RangeAddress.EndRow)
self.assertEqual(4, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange[0:1,2:3] # Access cell range by slices
# For:
# Spreadsheet
# Zero rows/columns
def test_XCellRange_Spreadsheet_Range_Slices_Invalid(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When / Then
with self.assertRaises(KeyError):
_ = sht[1:1, 3:5]
with self.assertRaises(KeyError):
_ = sht[1:3, 3:3]
spr.close(
True)
# Tests syntax:
# rng = cellrange[0:1,2:3] # Access cell range by slices
# For:
# Text table
def test_XCellRange_Table_Range_Slices(self):
# Given
doc = self.createBlankTextDocument()
text_table = getTextTableInstance(doc)
text_table.initialize(10, 10)
cursor = doc.Text.createTextCursor()
doc.Text.insertTextContent(cursor, text_table,
False)
tbl = doc.TextTables[0]
doc.lockControllers()
tbl.DataArray = tuple(tuple(str(100 + y)
for y
in range(10*x, 10*x + 10))
for x
in range(10))
doc.unlockControllers()
# When
rng = tbl[1:3, 3:5]
# Then
self.assertEqual(((
'113',
'114'), (
'123',
'124')), rng.DataArray)
doc.close(
True)
# Tests syntax:
# rng = cellrange['A1:B2'] # Access cell range by descriptor
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_Descriptor(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[
'A3:B4']
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(2, rng.RangeAddress.StartRow)
self.assertEqual(0, rng.RangeAddress.StartColumn)
self.assertEqual(3, rng.RangeAddress.EndRow)
self.assertEqual(1, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange['A1:B2'] # Access cell range by descriptor
# For:
# Table
def test_XCellRange_Table_Range_Descriptor(self):
# Given
doc = self.createBlankTextDocument()
text_table = getTextTableInstance(doc)
text_table.initialize(10, 10)
cursor = doc.Text.createTextCursor()
doc.Text.insertTextContent(cursor, text_table,
False)
tbl = doc.TextTables[0]
doc.lockControllers()
tbl.DataArray = tuple(tuple(str(100 + y)
for y
in range(10*x, 10*x + 10))
for x
in range(10))
doc.unlockControllers()
# When
rng = tbl[
'A3:B4']
# Then
self.assertEqual(((
'120',
'121'), (
'130',
'131')), rng.DataArray)
doc.close(
True)
# Tests syntax:
# rng = cellrange['Name'] # Access cell range by name
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_Name(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
expr =
'$' + sht.Name +
'.$C2:F10'
addr = CellAddress(Sheet=0, Row=1, Column=2)
sht.NamedRanges.addNewByName(
'foo', expr, addr, 0)
# When
rng = sht[
'foo']
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(1, rng.RangeAddress.StartRow)
self.assertEqual(2, rng.RangeAddress.StartColumn)
self.assertEqual(9, rng.RangeAddress.EndRow)
self.assertEqual(5, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange[0] # Access cell range by row index
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_RowIndex(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[0]
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(0, rng.RangeAddress.StartRow)
self.assertEqual(0, rng.RangeAddress.StartColumn)
self.assertEqual(0, rng.RangeAddress.EndRow)
self.assertEqual(16383, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange[0,:] # Access cell range by row index
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_RowIndex_FullSlice(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[0, :]
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(0, rng.RangeAddress.StartRow)
self.assertEqual(0, rng.RangeAddress.StartColumn)
self.assertEqual(0, rng.RangeAddress.EndRow)
self.assertEqual(16383, rng.RangeAddress.EndColumn)
spr.close(
True)
# Tests syntax:
# rng = cellrange[:,0] # Access cell range by column index
# For:
# Spreadsheet
def test_XCellRange_Spreadsheet_Range_FullSlice_ColumnIndex(self):
# Given
spr = self.createBlankSpreadsheet()
sht = spr.Sheets[0]
# When
rng = sht[:, 0]
# Then
self.assertEqual(0, rng.RangeAddress.Sheet)
self.assertEqual(0, rng.RangeAddress.StartRow)
self.assertEqual(0, rng.RangeAddress.StartColumn)
self.assertEqual(1048575, rng.RangeAddress.EndRow)
self.assertEqual(0, rng.RangeAddress.EndColumn)
spr.close(
True)
if __name__ ==
'__main__':
unittest.main()
# vim:set shiftwidth=4 softtabstop=4 expandtab: