Ejemplo n.º 1
0
 def test_defined_name_formula(self):
     self.assertASTNodesEqual(
         xltypes.XLFormula('=SUM(A1:B1)').tokens, [
             f_token(tvalue='SUM', ttype='function', tsubtype='start'),
             f_token(tvalue='A1:B1', ttype='operand', tsubtype='range'),
             f_token(tvalue='', ttype='function', tsubtype='stop')
         ])
Ejemplo n.º 2
0
 def test_cell_minus_with_sheet(self):
     self.assertASTNodesEqual(
         self.parse('-Sheet1!A1'),
         [
             f_token(tvalue='-', ttype='operator-prefix', tsubtype=''),
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 3
0
 def create_node(self):
     node = ast_nodes.OperatorNode(
         f_token(tvalue='+', ttype='operator-infix', tsubtype='math'))
     node.left = ast_nodes.OperandNode(
         f_token(tvalue='1', ttype='operand', tsubtype='number'))
     node.right = ast_nodes.OperandNode(
         f_token(tvalue='2', ttype='operand', tsubtype='number'))
     return node
Ejemplo n.º 4
0
 def test_cells_union(self):
     self.assertASTNodesEqual(
         self.parse('A1,B1'),
         [
             f_token(tvalue='A1', ttype='operand', tsubtype='range'),
             f_token(tvalue=',', ttype='operator-infix', tsubtype='union'),
             f_token(tvalue='B1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 5
0
 def test_cells_union_with_different_sheet(self):
     self.assertASTNodesEqual(
         self.parse('Sheet1!A1,Sheet2!B1'),
         [
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range'),
             f_token(tvalue=',', ttype='operator-infix', tsubtype='union'),
             f_token(tvalue='Sheet2!B1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 6
0
 def test_cells_addition(self):
     self.assertASTNodesEqual(
         self.parse('A1+B1'),
         [
             f_token(tvalue='A1', ttype='operand', tsubtype='range'),
             f_token(tvalue='+', ttype='operator-infix', tsubtype='math'),
             f_token(tvalue='B1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 7
0
 def test_range_address_function(self):
     self.assertASTNodesEqual(
         self.parse('SUM(A1:B1)'),
         [
             f_token(tvalue='SUM', ttype='function', tsubtype='start'),
             f_token(tvalue='A1:B1', ttype='operand', tsubtype='range'),
             f_token(tvalue='', ttype='function', tsubtype='stop'),
         ]
     )
Ejemplo n.º 8
0
 def test_range_address_union(self):
     self.assertASTNodesEqual(
         self.parse('A1:B1,A2:B2'),
         [
             f_token(tvalue='A1:B1', ttype='operand', tsubtype='range'),
             f_token(tvalue=',', ttype='operator-infix', tsubtype='union'),
             f_token(tvalue='A2:B2', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 9
0
 def test_cells_addition_with_same_sheet(self):
     self.assertASTNodesEqual(
         self.parse('Sheet1!A1+Sheet1!B1'),
         [
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range'),
             f_token(tvalue='+', ttype='operator-infix', tsubtype='math'),
             f_token(tvalue='Sheet1!B1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 10
0
 def create_node(self):
     node = ast_nodes.FunctionNode(
         f_token(tvalue='MOD', ttype='function', tsubtype='start'))
     node.args = [
         ast_nodes.OperandNode(
             f_token(tvalue='3', ttype='operand', tsubtype='number')),
         ast_nodes.OperandNode(
             f_token(tvalue='2', ttype='operand', tsubtype='number')),
     ]
     return node
Ejemplo n.º 11
0
 def test_eval_expr_var_positional(self):
     node = ast_nodes.FunctionNode(
         f_token(tvalue='AND', ttype='function', tsubtype='start'))
     node.args = [
         ast_nodes.OperandNode(
             f_token(tvalue='3', ttype='operand', tsubtype='number')),
         ast_nodes.OperandNode(
             f_token(tvalue='2', ttype='operand', tsubtype='number')),
     ]
     self.assertEqual(node.eval(context('A1')), True)
Ejemplo n.º 12
0
 def test_cells_function_with_trailing_comma(self):
     self.assertASTNodesEqual(
         self.parse('SUM(A1,)'),
         [
             f_token(tvalue='SUM', ttype='function', tsubtype='start'),
             f_token(tvalue='A1', ttype='operand', tsubtype='range'),
             f_token(tvalue=',', ttype='argument', tsubtype=''),
             f_token(tvalue='', ttype='function', tsubtype='stop')
         ]
     )
Ejemplo n.º 13
0
 def test_cells_is_equal_with_sheet(self):
     self.assertASTNodesEqual(
         self.parse('Sheet1!A1=Sheet1!B1'),
         [
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range'),
             f_token(
                 tvalue='=', ttype='operator-infix', tsubtype='logical'),
             f_token(tvalue='Sheet1!B1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 14
0
 def test_cells_function_with_sheet(self):
     self.assertASTNodesEqual(
         self.parse('SUM(Sheet1!A1,Sheet1!B1)'),
         [
             f_token(tvalue='SUM', ttype='function', tsubtype='start'),
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range'),
             f_token(tvalue=',', ttype='argument', tsubtype=''),
             f_token(tvalue='Sheet1!B1', ttype='operand', tsubtype='range'),
             f_token(tvalue='', ttype='function', tsubtype='stop')
         ]
     )
Ejemplo n.º 15
0
 def test_concat(self):
     self.assertASTNodesEqual(
         self.parse('"hi" & "de"'),
         [
             f_token(tvalue='hi', ttype='operand', tsubtype='text'),
             f_token(
                 tvalue='&', ttype='operator-infix',
                 tsubtype='concatenate'),
             f_token(tvalue='de', ttype='operand', tsubtype='text'),
         ]
     )
Ejemplo n.º 16
0
 def test_text(self):
     self.assertASTNodesEqual(
         self.parse('"data"'),
         [
             f_token(tvalue='data', ttype='operand', tsubtype='text'),
         ]
     )
Ejemplo n.º 17
0
 def test_float(self):
     self.assertASTNodesEqual(
         self.parse('1.0'),
         [
             f_token(tvalue='1.0', ttype='operand', tsubtype='number'),
         ]
     )
Ejemplo n.º 18
0
 def test_cell_address_with_sheet(self):
     self.assertASTNodesEqual(
         self.parse('Sheet1!A1'),
         [
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 19
0
 def test_bool(self):
     self.assertASTNodesEqual(
         self.parse('TRUE'),
         [
             f_token(tvalue='TRUE', ttype='operand', tsubtype='logical'),
         ]
     )
Ejemplo n.º 20
0
 def test_cell_address_by_number(self):
     self.assertASTNodesEqual(
         self.parse('R[1]C[1]'),
         [
             f_token(tvalue='R[1]C[1]', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 21
0
 def test_cell_address(self):
     self.assertASTNodesEqual(
         self.parse('A1'),
         [
             f_token(tvalue='A1', ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 22
0
 def test_null(self):
     self.assertASTNodesEqual(
         self.parse('NULL'),
         [
             f_token(tvalue='NULL', ttype='operand', tsubtype='range'),
         ]
     )
Ejemplo n.º 23
0
 def test_error(self):
     self.assertASTNodesEqual(
         self.parse('#NUM!'),
         [
             f_token(tvalue='#NUM!', ttype='operand', tsubtype='error'),
         ]
     )
Ejemplo n.º 24
0
 def test_range_address_with_same_sheets(self):
     self.assertASTNodesEqual(
         self.parse('Sh1!A1:Sh1!B1'),
         [
             f_token(tvalue='Sh1!A1:Sh1!B1',
                     ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 25
0
 def test_range_address_with_different_sheets(self):
     # THIS CAN'T HAPPEN IN REAL LIFE
     self.assertASTNodesEqual(
         self.parse('Sh1!A1:Sh2!B1'),
         [
             f_token(tvalue='Sh1!A1:Sh2!B1',
                     ttype='operand', tsubtype='range')
         ]
     )
Ejemplo n.º 26
0
 def test_cells_function_and_operator(self):
     self.assertASTNodesEqual(
         self.parse('SUM(A1+B1,C1)'),
         [
             f_token(tvalue='SUM', ttype='function', tsubtype='start'),
             f_token(tvalue='A1', ttype='operand', tsubtype='range'),
             f_token(tvalue='+', ttype='operator-infix', tsubtype='math'),
             f_token(tvalue='B1', ttype='operand', tsubtype='range'),
             f_token(tvalue=',', ttype='argument', tsubtype=''),
             f_token(tvalue='C1', ttype='operand', tsubtype='range'),
             f_token(tvalue='', ttype='function', tsubtype='stop')
         ]
     )
Ejemplo n.º 27
0
 def test_array_formula(self):
     self.assertASTNodesEqual(
         self.parse('{=1}'),
         [
             f_token(tvalue='ARRAY', ttype='function', tsubtype='start'),
             f_token(tvalue='ARRAYROW', ttype='function', tsubtype='start'),
             f_token(
                 tvalue='=', ttype='operator-infix', tsubtype='logical'),
             f_token(tvalue='1', ttype='operand', tsubtype='number'),
             f_token(tvalue='', ttype='function', tsubtype='stop'),
             f_token(tvalue='', ttype='function', tsubtype='stop'),
         ]
     )
Ejemplo n.º 28
0
    def test_eval_expr(self):
        cond_node = ast_nodes.OperatorNode(
            f_token(tvalue='>', ttype='operator-infix', tsubtype='math'))
        cond_node.left = ast_nodes.OperandNode(
            f_token(tvalue='1', ttype='operand', tsubtype='number'))
        cond_node.right = ast_nodes.OperandNode(
            f_token(tvalue='0', ttype='operand', tsubtype='number'))

        node = ast_nodes.FunctionNode(
            f_token(tvalue='IF', ttype='function', tsubtype='start'))
        node.args = [
            cond_node,
            ast_nodes.OperandNode(
                f_token(tvalue='3', ttype='operand', tsubtype='number')),
            ast_nodes.OperandNode(
                f_token(tvalue='2', ttype='operand', tsubtype='number')),
        ]
        self.assertEqual(node.eval(context('A1')), 3)
Ejemplo n.º 29
0
 def create_node(self, value='1', type='nuber'):
     return ast_nodes.OperandNode(
         f_token(tvalue=value, ttype='operand', tsubtype=type))
Ejemplo n.º 30
0
 def create_node(self):
     return ast_nodes.ASTNode(
         f_token(tvalue='tv', ttype='tt', tsubtype='tst'))