summaryrefslogtreecommitdiffstats
path: root/pyuno/qa/pytests/testcollections_XNameContainer.py
blob: c544ca9dd181528393e2a2ce3c6b177de728b3c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/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
import uno

from testcollections_base import CollectionsTestBase
from com.sun.star.beans import PropertyValue

# SheetCellRanges instance factory
def getSheetCellRangesInstance(spr):
    return spr.createInstance("com.sun.star.sheet.SheetCellRanges")


# Tests behaviour of objects implementing XNameContainer using the new-style
# collection accessors
# The objects chosen have no special meaning, they just happen to implement the
# tested interfaces

class TestXNameContainer(CollectionsTestBase):

    # Tests syntax:
    #    obj[key] = val              # Insert by key
    # For:
    #    0->1 element
    def test_XNameContainer_InsertName(self):
        # Given
        spr = self.createBlankSpreadsheet()
        ranges = getSheetCellRangesInstance(spr)
        new_range = spr.Sheets[0].getCellRangeByPosition(1, 2, 1, 2)

        # When
        ranges['foo'] = new_range

        # Then
        self.assertEqual(1, len(ranges.ElementNames))

        spr.close(True)

    # Tests syntax:
    #    obj[key] = val              # Insert by key
    # For:
    #    Invalid key
    def test_XNameContainer_InsertName_Invalid(self):
        # Given
        spr = self.createBlankSpreadsheet()
        ranges = getSheetCellRangesInstance(spr)
        new_range = spr.Sheets[0].getCellRangeByPosition(1, 2, 1, 2)

        # When / Then
        with self.assertRaises(TypeError):
            ranges[12.34] = new_range

        spr.close(True)

    # Tests syntax:
    #    obj[key] = val              # Replace by key
    def test_XNameContainer_ReplaceName(self):
        # Given
        spr = self.createBlankSpreadsheet()
        ranges = getSheetCellRangesInstance(spr)
        new_range1 = spr.Sheets[0].getCellRangeByPosition(1, 2, 1, 2)
        new_range2 = spr.Sheets[0].getCellRangeByPosition(6, 6, 6, 6)

        # When
        ranges['foo'] = new_range1
        ranges['foo'] = new_range2

        # Then
        self.assertEqual(1, len(ranges.ElementNames))
        read_range = ranges['foo']
        self.assertEqual(6, read_range.CellAddress.Column)

        spr.close(True)

    # Tests syntax:
    #    del obj[key]                # Delete by key
    # For:
    #    1/2 elements
    def test_XNameContainer_DelKey(self):
        # Given
        spr = self.createBlankSpreadsheet()
        spr.Sheets.insertNewByName('foo', 1)

        # When
        del spr.Sheets['foo']

        # Then
        self.assertEqual(1, len(spr.Sheets))
        self.assertFalse('foo' in spr.Sheets)

        spr.close(True)

    # Tests syntax:
    #    del obj[key]                # Delete by key
    # For:
    #    Missing key
    def test_XNameContainer_DelKey_Missing(self):
        # Given
        spr = self.createBlankSpreadsheet()

        # When / Then
        with self.assertRaises(KeyError):
            del spr.Sheets['foo']

        spr.close(True)

    # Tests syntax:
    #    del obj[key]                # Delete by key
    # For:
    #    Invalid key (float)
    def test_XNameContainer_DelKey_Invalid(self):
        # Given
        spr = self.createBlankSpreadsheet()

        # When / Then
        with self.assertRaises(TypeError):
            del spr.Sheets[12.34]

        spr.close(True)


if __name__ == '__main__':
    unittest.main()

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