summaryrefslogtreecommitdiffstats
path: root/test/python/test_xlsx.py
blob: 1f691da9a7137496fa2ea54301814bd2db97f47b (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
#!/usr/bin/env python3
########################################################################
#
# 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 os
import os.path
import mmap

from orcus import xlsx

import file_load_common as common


class TestCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        # base directory for xlsx test files.
        basedir = os.path.join(os.path.dirname(__file__), "..", "xlsx")
        cls.basedir = os.path.normpath(basedir)

    def test_import(self):

        test_dirs = (
            "boolean-values",
            "empty-shared-strings",
            "formula-cells",
            "formula-shared",
            "named-expression",
            "named-expression-sheet-local",
            "raw-values-1",
        )

        for test_dir in test_dirs:
            test_dir = os.path.join(self.basedir, test_dir)
            common.run_test_dir(self, test_dir, common.DocLoader(xlsx))

    def test_named_expression(self):
        filepath = os.path.join(self.basedir, "named-expression", "input.xlsx")
        with open(filepath, "rb") as f:
            doc = xlsx.read(f)

        named_exps = doc.get_named_expressions()
        self.assertEqual(named_exps.names(), {"MyRange", "MyRange2"})
        self.assertEqual(len(named_exps), 2)

        named_exps_dict = {x[0]: x[1] for x in named_exps}
        exp = named_exps_dict["MyRange"]
        self.assertEqual(exp.origin, "Sheet1!$A$1")
        self.assertEqual(exp.formula, "$A$1:$A$5")
        iter = exp.get_formula_tokens()
        self.assertEqual(len(iter), 1)
        tokens = [t for t in iter]
        self.assertEqual(str(tokens[0]), "$A$1:$A$5")

        exp = named_exps_dict["MyRange2"]
        self.assertEqual(exp.origin, "Sheet1!$A$1")
        self.assertEqual(exp.formula, "$A$1:$B$5")
        iter = exp.get_formula_tokens()
        self.assertEqual(len(iter), 1)
        tokens = [t for t in iter]
        self.assertEqual(str(tokens[0]), "$A$1:$B$5")

    def test_named_expression_sheet_local(self):
        filepath = os.path.join(self.basedir, "named-expression-sheet-local", "input.xlsx")
        with open(filepath, "rb") as f:
            doc = xlsx.read(f)

        sheet = doc.sheets[0]
        named_exps = sheet.get_named_expressions()
        self.assertEqual(len(named_exps), 1)
        self.assertEqual(named_exps.names(), {"MyRange",})

        named_exps_dict = {x[0]: x[1] for x in named_exps}
        exp = named_exps_dict["MyRange"]
        self.assertEqual(exp.formula, "$A$1:$B$3")
        iter = exp.get_formula_tokens()
        self.assertEqual(len(iter), 1)
        tokens = [t for t in iter]
        self.assertEqual(str(tokens[0]), "$A$1:$B$3")

        sheet = doc.sheets[1]
        named_exps = sheet.get_named_expressions()
        self.assertEqual(named_exps.names(), {"MyRange",})
        self.assertEqual(len(named_exps), 1)

        named_exps_dict = {x[0]: x[1] for x in named_exps}
        exp = named_exps_dict["MyRange"]
        self.assertEqual(exp.formula, "$A$4:$B$5")
        iter = exp.get_formula_tokens()
        self.assertEqual(len(iter), 1)
        tokens = [t for t in iter]
        self.assertEqual(str(tokens[0]), "$A$4:$B$5")


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