コード例 #1
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_validate_name_invalid_ns_two():
    @xml_dataclass
    class Foo:
        __ns__ = None

    el = etree.fromstring(f'<foo xmlns="{NS}" />')
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert el.tag in msg
    assert f"'{NS}'" in msg
コード例 #2
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_validate_name_invalid_name():
    @xml_dataclass
    class Foo:
        __ns__ = None

    el = etree.fromstring("<foo />")
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "bar")

    msg = str(exc_info.value)
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #3
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_text_missing_required():
    @xml_dataclass
    class Foo:
        __ns__ = None
        value: str = text()

    el = etree.fromstring("<foo />")
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "no text" in msg
    assert "'foo'" in msg
コード例 #4
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_has_text(xml):
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Child1

    el = etree.fromstring(xml)
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "has text" in msg
    assert "'bar'" in msg
コード例 #5
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_single_undeclared():
    @xml_dataclass
    class Foo:
        __ns__ = None

    el = etree.fromstring("<foo><bar /></foo>")
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "undeclared child elements" in msg
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #6
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_attributes_undeclared():
    @xml_dataclass
    class Foo:
        __ns__ = None

    el = etree.fromstring('<foo bar="baz" />')
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "undeclared attributes" in msg
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #7
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_text_has_children(xml):
    @xml_dataclass
    class Foo:
        __ns__ = None
        value: str = text()

    el = etree.fromstring(xml)
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "has child elements" in msg
    assert "'foo'" in msg
コード例 #8
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_attributes_missing_required():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: str

    el = etree.fromstring("<foo />")
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "Required attribute" in msg
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #9
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_missing_required():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Union[Child1, Child2]

    el = etree.fromstring("<foo />")
    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "Required child element" in msg
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #10
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_invalid():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Union[Child1, Child2]

    el = etree.fromstring('<foo><bar qux="eggs" /></foo>')

    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "Invalid child elements" in msg
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #11
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_with_validation():
    class MyError(Exception):
        pass

    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: str

        def xml_validate(self) -> None:
            if self.bar == "baz":
                raise MyError()

    el = etree.fromstring('<foo bar="baz" />')
    with pytest.raises(MyError):
        load(Foo, el, "foo")
コード例 #12
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_overrepresented():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Union[Child1, Child2]

    el = etree.fromstring(
        '<foo><bar spam="eggs" /><bar wibble="wobble" /></foo>')

    with pytest.raises(ValueError) as exc_info:
        load(Foo, el, "foo")

    msg = str(exc_info.value)
    assert "Multiple child elements" in msg
    assert "'foo'" in msg
    assert "'bar'" in msg
コード例 #13
0
ファイル: package_test.py プロジェクト: masak/xml_dataclasses
def test_functional_package():
    parser = etree.XMLParser(remove_blank_text=True)
    el = etree.parse(str(BASE / "package.xml"), parser).getroot()
    original = lmxl_dump(el)
    package = load(Package3, el, "package")
    el = dump(package, "package", NsMap.to_dict(NsMap.opf.value))
    roundtrip = lmxl_dump(el)
    assert original == roundtrip
コード例 #14
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_attributes_missing_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Optional[str] = None

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert foo.bar is None
コード例 #15
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_text_missing_default():
    @xml_dataclass
    class Foo:
        __ns__ = None
        value: str = text(default="bar")

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert foo.value == "bar"
コード例 #16
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_single_missing_default():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Child1 = Child1(spam="eggs")

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert foo.bar.spam == "eggs"
コード例 #17
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_attributes_present_required():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: str

    el = etree.fromstring('<foo bar="baz" />')
    foo = load(Foo, el, "foo")
    assert foo.bar == "baz"
コード例 #18
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_attributes_present_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Optional[str] = None

    el = etree.fromstring('<foo bar="baz" />')
    foo = load(Foo, el, "foo")
    assert foo.bar == "baz"
コード例 #19
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_text_present_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        value: Optional[str] = text(default=None)

    el = etree.fromstring("<foo>bar</foo>")
    foo = load(Foo, el, "foo")
    assert foo.value == "bar"
コード例 #20
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_attributes_missing_default():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: str = "baz"

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert foo.bar == "baz"
コード例 #21
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_missing_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Optional[Union[Child1, Child2]] = None

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert foo.bar is None
コード例 #22
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_text_present_required():
    @xml_dataclass
    class Foo:
        __ns__ = None
        value: str = text()

    el = etree.fromstring("<foo>bar</foo>")
    foo = load(Foo, el, "foo")
    assert foo.value == "bar"
コード例 #23
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_single_present_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Optional[Child1] = None

    el = etree.fromstring('<foo><bar spam="eggs" /></foo>')
    foo = load(Foo, el, "foo")
    assert foo.bar.spam == "eggs"
コード例 #24
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_text_missing_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        value: Optional[str] = text(default=None)

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert foo.value is None
コード例 #25
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_present_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Optional[Union[Child1, Child2]] = None

    el = etree.fromstring('<foo><bar spam="eggs" /></foo>')
    foo = load(Foo, el, "foo")
    assert isinstance(foo.bar, Child1)
    assert foo.bar.spam == "eggs"
コード例 #26
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_missing_default():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Union[Child1, Child2] = Child1(spam="eggs")

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert isinstance(foo.bar, Child1)
    assert foo.bar.spam == "eggs"
コード例 #27
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_union_present_required2():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Union[Child1, Child2]

    el = etree.fromstring('<foo><bar wibble="wobble" /></foo>')
    foo = load(Foo, el, "foo")
    assert isinstance(foo.bar, Child2)
    assert foo.bar.wibble == "wobble"
コード例 #28
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_multiple_present_optional():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: Optional[List[Child1]] = None

    el = etree.fromstring('<foo><bar spam="eggs" /></foo>')
    foo = load(Foo, el, "foo")
    assert len(foo.bar) == 1
    assert foo.bar[0].spam == "eggs"
コード例 #29
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_multiple_present_required2():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: List[Child1]

    el = etree.fromstring('<foo><bar spam="eggs" /><bar spam="ham" /></foo>')
    foo = load(Foo, el, "foo")
    assert len(foo.bar) == 2
    assert foo.bar[0].spam == "eggs"
    assert foo.bar[1].spam == "ham"
コード例 #30
0
ファイル: load_test.py プロジェクト: masak/xml_dataclasses
def test_load_children_multiple_missing_default():
    @xml_dataclass
    class Foo:
        __ns__ = None
        bar: List[Child1] = field(
            default_factory=lambda: [Child1(spam="eggs")])

    el = etree.fromstring("<foo />")
    foo = load(Foo, el, "foo")
    assert len(foo.bar) == 1
    assert foo.bar[0].spam == "eggs"