summaryrefslogtreecommitdiffstats
path: root/_test/test_class_register.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 20:19:53 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-14 20:19:53 +0000
commite7ee850d46d54789979bf0c5244bae1825fb7149 (patch)
tree6e94ed55df9ec749682a3c792ce752d07892b968 /_test/test_class_register.py
parentInitial commit. (diff)
downloadpython-ruyaml-e7ee850d46d54789979bf0c5244bae1825fb7149.tar.xz
python-ruyaml-e7ee850d46d54789979bf0c5244bae1825fb7149.zip
Adding upstream version 0.91.0.upstream/0.91.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '_test/test_class_register.py')
-rw-r--r--_test/test_class_register.py141
1 files changed, 141 insertions, 0 deletions
diff --git a/_test/test_class_register.py b/_test/test_class_register.py
new file mode 100644
index 0000000..54c2191
--- /dev/null
+++ b/_test/test_class_register.py
@@ -0,0 +1,141 @@
+# coding: utf-8
+
+"""
+testing of YAML.register_class and @yaml_object
+"""
+
+from .roundtrip import YAML
+
+
+class User0:
+ def __init__(self, name, age):
+ self.name = name
+ self.age = age
+
+
+class User1(object):
+ yaml_tag = '!user'
+
+ def __init__(self, name, age):
+ self.name = name
+ self.age = age
+
+ @classmethod
+ def to_yaml(cls, representer, node):
+ return representer.represent_scalar(
+ cls.yaml_tag, '{.name}-{.age}'.format(node, node)
+ )
+
+ @classmethod
+ def from_yaml(cls, constructor, node):
+ return cls(*node.value.split('-'))
+
+
+class TestRegisterClass:
+ def test_register_0_rt(self):
+ yaml = YAML()
+ yaml.register_class(User0)
+ ys = """
+ - !User0
+ name: Anthon
+ age: 18
+ """
+ d = yaml.load(ys)
+ yaml.dump(d, compare=ys, unordered_lines=True)
+
+ def test_register_0_safe(self):
+ # default_flow_style = None
+ yaml = YAML(typ='safe')
+ yaml.register_class(User0)
+ ys = """
+ - !User0 {age: 18, name: Anthon}
+ """
+ d = yaml.load(ys)
+ yaml.dump(d, compare=ys)
+
+ def test_register_0_unsafe(self):
+ # default_flow_style = None
+ yaml = YAML(typ='unsafe')
+ yaml.register_class(User0)
+ ys = """
+ - !User0 {age: 18, name: Anthon}
+ """
+ d = yaml.load(ys)
+ yaml.dump(d, compare=ys)
+
+ def test_register_1_rt(self):
+ yaml = YAML()
+ yaml.register_class(User1)
+ ys = """
+ - !user Anthon-18
+ """
+ d = yaml.load(ys)
+ yaml.dump(d, compare=ys)
+
+ def test_register_1_safe(self):
+ yaml = YAML(typ='safe')
+ yaml.register_class(User1)
+ ys = """
+ [!user Anthon-18]
+ """
+ d = yaml.load(ys)
+ yaml.dump(d, compare=ys)
+
+ def test_register_1_unsafe(self):
+ yaml = YAML(typ='unsafe')
+ yaml.register_class(User1)
+ ys = """
+ [!user Anthon-18]
+ """
+ d = yaml.load(ys)
+ yaml.dump(d, compare=ys)
+
+
+class TestDecorator:
+ def test_decorator_implicit(self):
+ from ruyaml import yaml_object
+
+ yml = YAML()
+
+ @yaml_object(yml)
+ class User2:
+ def __init__(self, name, age):
+ self.name = name
+ self.age = age
+
+ ys = """
+ - !User2
+ name: Anthon
+ age: 18
+ """
+ d = yml.load(ys)
+ yml.dump(d, compare=ys, unordered_lines=True)
+
+ def test_decorator_explicit(self):
+ from ruyaml import yaml_object
+
+ yml = YAML()
+
+ @yaml_object(yml)
+ class User3(object):
+ yaml_tag = '!USER'
+
+ def __init__(self, name, age):
+ self.name = name
+ self.age = age
+
+ @classmethod
+ def to_yaml(cls, representer, node):
+ return representer.represent_scalar(
+ cls.yaml_tag, '{.name}-{.age}'.format(node, node)
+ )
+
+ @classmethod
+ def from_yaml(cls, constructor, node):
+ return cls(*node.value.split('-'))
+
+ ys = """
+ - !USER Anthon-18
+ """
+ d = yml.load(ys)
+ yml.dump(d, compare=ys)