コード例 #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')
         ])
コード例 #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')
         ]
     )
コード例 #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
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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'),
         ]
     )
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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
コード例 #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)
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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'),
         ]
     )
コード例 #16
0
 def test_text(self):
     self.assertASTNodesEqual(
         self.parse('"data"'),
         [
             f_token(tvalue='data', ttype='operand', tsubtype='text'),
         ]
     )
コード例 #17
0
 def test_float(self):
     self.assertASTNodesEqual(
         self.parse('1.0'),
         [
             f_token(tvalue='1.0', ttype='operand', tsubtype='number'),
         ]
     )
コード例 #18
0
 def test_cell_address_with_sheet(self):
     self.assertASTNodesEqual(
         self.parse('Sheet1!A1'),
         [
             f_token(tvalue='Sheet1!A1', ttype='operand', tsubtype='range')
         ]
     )
コード例 #19
0
 def test_bool(self):
     self.assertASTNodesEqual(
         self.parse('TRUE'),
         [
             f_token(tvalue='TRUE', ttype='operand', tsubtype='logical'),
         ]
     )
コード例 #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')
         ]
     )
コード例 #21
0
 def test_cell_address(self):
     self.assertASTNodesEqual(
         self.parse('A1'),
         [
             f_token(tvalue='A1', ttype='operand', tsubtype='range')
         ]
     )
コード例 #22
0
 def test_null(self):
     self.assertASTNodesEqual(
         self.parse('NULL'),
         [
             f_token(tvalue='NULL', ttype='operand', tsubtype='range'),
         ]
     )
コード例 #23
0
 def test_error(self):
     self.assertASTNodesEqual(
         self.parse('#NUM!'),
         [
             f_token(tvalue='#NUM!', ttype='operand', tsubtype='error'),
         ]
     )
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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')
         ]
     )
コード例 #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'),
         ]
     )
コード例 #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)
コード例 #29
0
 def create_node(self, value='1', type='nuber'):
     return ast_nodes.OperandNode(
         f_token(tvalue=value, ttype='operand', tsubtype=type))
コード例 #30
0
 def create_node(self):
     return ast_nodes.ASTNode(
         f_token(tvalue='tv', ttype='tt', tsubtype='tst'))