Source code for openpyxl.worksheet.tests.test_datavalidation

from __future__ import absolute_import
# Copyright (c) 2010-2017 openpyxl

import pytest

from openpyxl.xml.functions import fromstring, tostring
from openpyxl.tests.helper import compare_xml


@pytest.fixture
[docs]def DataValidation(): from ..datavalidation import DataValidation return DataValidation
[docs]class TestDataValidation:
[docs] def test_ctor(self, DataValidation): dv = DataValidation() xml = tostring(dv.to_tree()) expected = """ <dataValidation allowBlank="0" showErrorMessage="1" showInputMessage="1" sqref="" /> """ diff = compare_xml(xml, expected) assert diff is None, diff
[docs] def test_from_xml(self, DataValidation): src = """ <root /> """ node = fromstring(src) dv = DataValidation.from_tree(node) assert dv == DataValidation() def test_list_validation(DataValidation): dv = DataValidation(type="list", formula1='"Dog,Cat,Fish"') assert dv.formula1, '"Dog,Cat == Fish"' dv_dict = dict(dv) assert dv_dict['type'] == 'list' assert dv_dict['allowBlank'] == '0' assert dv_dict['showErrorMessage'] == '1' assert dv_dict['showInputMessage'] == '1'
[docs] def test_hide_drop_down(self, DataValidation): dv = DataValidation() assert not dv.hide_drop_down dv.hide_drop_down = True assert dv.showDropDown is True
[docs] def test_writer_validation(self, DataValidation): class DummyCell: coordinate = "A1" dv = DataValidation(type="list", formula1='"Dog,Cat,Fish"') dv.add(DummyCell()) xml = tostring(dv.to_tree()) expected = """ <dataValidation allowBlank="0" showErrorMessage="1" showInputMessage="1" sqref="A1" type="list"> <formula1>&quot;Dog,Cat,Fish&quot;</formula1> </dataValidation> """ diff = compare_xml(xml, expected) assert diff is None, diff
[docs] def test_sqref(self, DataValidation): dv = DataValidation() dv.sqref = "A1" assert dv.cells == set(["A1"])
[docs] def test_add_after_sqref(self, DataValidation): class DummyCell: coordinate = "A2" dv = DataValidation() dv.sqref = "A1" assert dv.cells == set(["A1"]) dv.add(DummyCell()) assert dv.cells == set(["A1", "A2"])
[docs] def test_read_formula(self, DataValidation): xml = """ <dataValidation xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" allowBlank="0" showErrorMessage="1" showInputMessage="1" sqref="A1" type="list"> <formula1>&quot;Dog,Cat,Fish&quot;</formula1> </dataValidation> """ xml = fromstring(xml) dv = DataValidation.from_tree(xml) assert dv.cells == set(["A1"]) assert dv.type == "list" assert dv.formula1 == '"Dog,Cat,Fish"'
[docs] def test_parser(self, DataValidation): xml = """ <dataValidation xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" type="list" errorStyle="warning" allowBlank="1" showInputMessage="1" showErrorMessage="1" error="Value must be between 1 and 3!" errorTitle="An Error Message" promptTitle="Multiplier" prompt="for monthly or quartely reports" sqref="H6"> </dataValidation> """ xml = fromstring(xml) dv = DataValidation.from_tree(xml) assert dv == DataValidation( error="Value must be between 1 and 3!", errorStyle="warning", errorTitle="An Error Message", prompt="for monthly or quartely reports", promptTitle="Multiplier", type="list", allowBlank="1", sqref="H6", showErrorMessage="1", showInputMessage="1" )
@pytest.fixture
[docs]def DataValidationList(): from ..datavalidation import DataValidationList return DataValidationList
[docs]class TestDataValidationList:
[docs] def test_ctor(self, DataValidationList): dvs = DataValidationList() xml = tostring(dvs.to_tree()) expected = """ <dataValidations count="0" /> """ diff = compare_xml(xml, expected) assert diff is None, diff
[docs] def test_from_xml(self, DataValidationList): src = """ <dataValidations /> """ node = fromstring(src) dvs = DataValidationList.from_tree(node) assert dvs == DataValidationList()
COLLAPSE_TEST_DATA = [ ( ["A1"], "A1" ), ( ["A1", "B1"], "A1 B1" ), ( ["A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4"], "A1:A4 B1:B4" ), ( ["A2", "A4", "A3", "A1", "A5"], "A1:A5" ), ( ['AA1','AA2', 'B1', 'B2', 'B3', 'AA4', 'AA3'], ("B1:B3 AA1:AA4") ), ] @pytest.mark.parametrize("cells, expected", COLLAPSE_TEST_DATA)
[docs]def test_collapse_cell_addresses(cells, expected): from .. datavalidation import collapse_cell_addresses assert collapse_cell_addresses(cells) == expected
[docs]def test_expand_cell_ranges(): from .. datavalidation import expand_cell_ranges rs = "A1:A3 B1:B3" assert expand_cell_ranges(rs) == set(["A1", "A2", "A3", "B1", "B2", "B3"])