test_figure_yaml.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. from ioex.calcex import Figure, UnitMismatchError
  4. yaml = pytest.importorskip('yaml')
  5. @pytest.mark.parametrize(('yaml_dumper'), [yaml.Dumper, yaml.SafeDumper])
  6. @pytest.mark.parametrize(('figure'), [
  7. Figure(),
  8. Figure(123.4),
  9. Figure([1, 2]),
  10. Figure(None, u'm/s²'),
  11. Figure(123.4, u'm/s²'),
  12. Figure(1234, u'米/s²'),
  13. ])
  14. def test_to_yaml(figure, yaml_dumper):
  15. class TestDumper(yaml_dumper):
  16. pass
  17. TestDumper.add_representer(
  18. type(figure),
  19. lambda d, f: figure.to_yaml(d, f, '!test-figure'))
  20. figure_yaml = yaml.dump(figure, Dumper=TestDumper)
  21. class TestLoader(yaml.SafeLoader):
  22. pass
  23. TestLoader.add_constructor(
  24. '!test-figure',
  25. lambda loader, node: loader.construct_mapping(node),
  26. )
  27. figure_attr = yaml.load(figure_yaml, Loader=TestLoader)
  28. assert set(['value', 'unit']) == set(figure_attr.keys())
  29. assert figure.value == figure_attr['value']
  30. assert figure.unit == figure_attr['unit']
  31. @pytest.mark.parametrize(('yaml_dumper'), [yaml.Dumper, yaml.SafeDumper])
  32. @pytest.mark.parametrize(('figure'), [
  33. Figure(123.4, u'm/s²'),
  34. ])
  35. def test_register_yaml_representer(figure, yaml_dumper):
  36. class TestDumper(yaml_dumper):
  37. pass
  38. figure.register_yaml_representer(TestDumper)
  39. figure_yaml = yaml.dump(figure, Dumper=TestDumper)
  40. class TestLoader(yaml.SafeLoader):
  41. pass
  42. TestLoader.add_constructor(
  43. '!figure',
  44. lambda loader, node: loader.construct_mapping(node),
  45. )
  46. figure_attr = yaml.load(figure_yaml, Loader=TestLoader)
  47. assert set(['value', 'unit']) == set(figure_attr.keys())
  48. assert figure.value == figure_attr['value']
  49. assert figure.unit == figure_attr['unit']