test_figure_yaml.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. ['!fig {value: null, unit: kg}', Figure(unit='kg')],
  11. ['!fig {value: 123.4, unit: km/h}', Figure(123.4, 'km/h')],
  12. ['!fig {value: [1, 2], unit: km/h}', Figure([1, 2], 'km/h')],
  13. ])
  14. def test_register_yaml_constructor(figure_yaml, expected_figure, yaml_loader):
  15. class TestLoader(yaml_loader):
  16. pass
  17. Figure.register_yaml_constructor(TestLoader, tag='!fig')
  18. assert expected_figure == yaml.load(figure_yaml, Loader=TestLoader)
  19. @pytest.mark.parametrize(('yaml_dumper'), [yaml.Dumper, yaml.SafeDumper])
  20. @pytest.mark.parametrize(('figure'), [
  21. Figure(),
  22. Figure(123.4),
  23. Figure([1, 2]),
  24. Figure(None, u'm/s²'),
  25. Figure(123.4, u'm/s²'),
  26. Figure(1234, u'米/s²'),
  27. ])
  28. def test_to_yaml(figure, yaml_dumper):
  29. class TestDumper(yaml_dumper):
  30. pass
  31. TestDumper.add_representer(
  32. type(figure),
  33. lambda d, f: figure.to_yaml(d, f, '!test-figure'))
  34. figure_yaml = yaml.dump(figure, Dumper=TestDumper)
  35. class TestLoader(yaml.SafeLoader):
  36. pass
  37. TestLoader.add_constructor(
  38. '!test-figure',
  39. lambda loader, node: loader.construct_mapping(node),
  40. )
  41. figure_attr = yaml.load(figure_yaml, Loader=TestLoader)
  42. assert set(['value', 'unit']) == set(figure_attr.keys())
  43. assert figure.value == figure_attr['value']
  44. assert figure.unit == figure_attr['unit']
  45. @pytest.mark.parametrize(('yaml_dumper'), [yaml.Dumper, yaml.SafeDumper])
  46. @pytest.mark.parametrize(('figure'), [
  47. Figure(123.4, u'm/s²'),
  48. ])
  49. def test_register_yaml_representer(figure, yaml_dumper):
  50. class TestDumper(yaml_dumper):
  51. pass
  52. figure.register_yaml_representer(TestDumper)
  53. figure_yaml = yaml.dump(figure, Dumper=TestDumper)
  54. class TestLoader(yaml.SafeLoader):
  55. pass
  56. TestLoader.add_constructor(
  57. '!figure',
  58. lambda loader, node: loader.construct_mapping(node),
  59. )
  60. figure_attr = yaml.load(figure_yaml, Loader=TestLoader)
  61. assert set(['value', 'unit']) == set(figure_attr.keys())
  62. assert figure.value == figure_attr['value']
  63. assert figure.unit == figure_attr['unit']