test_figure_yaml.py 2.3 KB

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