def test_get_parse_tree_dependencies_should_not_return_locations_for_deleted_references( self): self.assertEquals( get_dependencies_from_parse_tree(parse("=#Deleted!")), []) self.assertEquals( get_dependencies_from_parse_tree(parse("=#Deleted! + A2")), [(1, 2)])
def test_get_parse_tree_dependencies_should_not_return_locations_for_invalid_references_in_cell_ranges( self): self.assertEquals( get_dependencies_from_parse_tree(parse("=#Invalid!:A2")), []) self.assertEquals( get_dependencies_from_parse_tree(parse("=A2:#Invalid!")), []) self.assertEquals( get_dependencies_from_parse_tree(parse("=#Invalid!:#Invalid!")), [])
def test_get_parse_tree_dependencies_should_not_return_locations_for_worksheet_references( self): for expression in ("=<Sheet1>", "=<Sheet1>.Bounds", "=<Sheet1> + <Sheet2>"): self.assertEquals( get_dependencies_from_parse_tree(parse(expression)), []) self.assertEquals( get_dependencies_from_parse_tree(parse("=<Sheet1> + A2")), [(1, 2)])
def test_get_parse_tree_dependencies_should_return_cellrange_deps(self): self.assertItemsEqual( get_dependencies_from_parse_tree(parse('=a2:b3')), [(1, 2), (1, 3), (2, 2), (2, 3)]) self.assertItemsEqual( get_dependencies_from_parse_tree(parse('=b3:a2')), [(1, 2), (1, 3), (2, 2), (2, 3)]) self.assertItemsEqual( get_dependencies_from_parse_tree(parse('=a3:b2')), [(1, 2), (1, 3), (2, 2), (2, 3)])
def test_get_parse_tree_dependencies_should_return_cellrange_deps(self): self.assertItemsEqual( get_dependencies_from_parse_tree(parse('=a2:b3')), [(1, 2), (1, 3), (2, 2), (2, 3)] ) self.assertItemsEqual( get_dependencies_from_parse_tree(parse('=b3:a2')), [(1, 2), (1, 3), (2, 2), (2, 3)] ) self.assertItemsEqual( get_dependencies_from_parse_tree(parse('=a3:b2')), [(1, 2), (1, 3), (2, 2), (2, 3)] )
def _set_formula(self, value): self._python_formula = None if value is None: self._formula = None elif type(value) == str or type(value) == unicode: self._formula = value if value.startswith('='): try: parsed_formula = parser.parse(value) self.dependencies = get_dependencies_from_parse_tree(parsed_formula) self._python_formula = get_python_formula_from_parse_tree(parsed_formula) except FormulaError, e: self.dependencies = [] self._python_formula = '_raise(FormulaError("{}"))'.format(e)
def _set_formula(self, value): self._python_formula = None if value is None: self._formula = None elif type(value) == str or type(value) == unicode: self._formula = value if value.startswith('='): try: parsed_formula = parser.parse(value) self.dependencies = get_dependencies_from_parse_tree( parsed_formula) self._python_formula = get_python_formula_from_parse_tree( parsed_formula) except FormulaError, e: self.dependencies = [] self._python_formula = '_raise(FormulaError("{}"))'.format( e)
def test_get_parse_tree_dependencies_should_not_return_locations_for_deleted_references_in_cell_ranges(self): self.assertEquals(get_dependencies_from_parse_tree(parse("=#Deleted!:A2")), []) self.assertEquals(get_dependencies_from_parse_tree(parse("=A2:#Deleted!")), []) self.assertEquals(get_dependencies_from_parse_tree(parse("=#Deleted!:#Deleted!")), [])
def test_get_parse_tree_dependencies_should_not_return_locations_for_worksheet_references(self): for expression in ("=<Sheet1>", "=<Sheet1>.Bounds", "=<Sheet1> + <Sheet2>"): self.assertEquals(get_dependencies_from_parse_tree(parse(expression)), []) self.assertEquals(get_dependencies_from_parse_tree(parse("=<Sheet1> + A2")), [(1, 2)])
def test_get_parse_tree_dependencies_should_return_locations_used_for_function_calls_and_arguments(self): tree = parse("=A2(a3)") self.assertEquals(get_dependencies_from_parse_tree(tree), [(1, 2), (1, 3)])
def test_get_parse_tree_dependencies_should_not_return_locations_for_invalid_references(self): self.assertEquals(get_dependencies_from_parse_tree(parse("=#Invalid!")), []) self.assertEquals(get_dependencies_from_parse_tree(parse("=#Invalid! + A2")), [(1, 2)])
def test_get_parse_tree_dependencies_should_return_locations_for_simple_expression_with_case_mismatch(self): tree = parse("=a1+A2") self.assertEquals(get_dependencies_from_parse_tree(tree), [(1, 1), (1, 2)])
def test_get_parse_tree_dependencies_should_return_locations_disregarding_worksheet_names(self): tree = parse("=Sheet1!A3") self.assertEquals(get_dependencies_from_parse_tree(tree), [(1, 3)])
def test_get_parse_tree_dependencies_should_return_empty_list_when_no_cell_refs(self): tree = parse("=1+2") self.assertEquals(get_dependencies_from_parse_tree(tree), [])
def test_get_parse_tree_dependencies_should_return_empty_list_when_no_cell_refs( self): tree = parse("=1+2") self.assertEquals(get_dependencies_from_parse_tree(tree), [])
def test_get_parse_tree_dependencies_should_return_locations_for_simple_expression_with_case_mismatch( self): tree = parse("=a1+A2") self.assertEquals(get_dependencies_from_parse_tree(tree), [(1, 1), (1, 2)])
def test_get_parse_tree_dependencies_should_return_locations_disregarding_worksheet_names( self): tree = parse("=Sheet1!A3") self.assertEquals(get_dependencies_from_parse_tree(tree), [(1, 3)])
def test_get_parse_tree_dependencies_should_return_locations_used_for_function_calls_and_arguments( self): tree = parse("=A2(a3)") self.assertEquals(get_dependencies_from_parse_tree(tree), [(1, 2), (1, 3)])