test_duration_yaml.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. from ioex.datetimeex import Duration
  4. yaml = pytest.importorskip('yaml')
  5. @pytest.mark.parametrize(('loader'), [yaml.Loader, yaml.SafeLoader])
  6. @pytest.mark.parametrize(('expected_duration', 'yaml_string'), [
  7. [Duration(years=0), '!duration\nyears: 0'],
  8. [Duration(years=32), '!duration\nyears: 32'],
  9. [Duration(years=0), '!duration\n{}'],
  10. [Duration(years=0), '!duration {}'],
  11. [Duration(days=32), '!duration\ndays: 32'],
  12. [Duration(minutes=0), '!duration\nminutes: 0'],
  13. [Duration(minutes=32), '!duration\nminutes: 32'],
  14. [Duration(years=1, days=3), '!duration\nyears: 1\ndays: 3'],
  15. [Duration(years=1, days=3, minutes=5),
  16. '!duration\nyears: 1\ndays: 3\nminutes: 5'],
  17. ])
  18. def test_from_yaml(expected_duration, yaml_string, loader):
  19. class TestLoader(loader):
  20. pass
  21. Duration.register_yaml_constructor(TestLoader)
  22. loaded_duration = yaml.load(yaml_string, Loader=TestLoader)
  23. assert expected_duration == loaded_duration
  24. @pytest.mark.parametrize(('loader'), [yaml.Loader, yaml.SafeLoader])
  25. @pytest.mark.parametrize(('expected_duration', 'yaml_string', 'tag'), [
  26. [Duration(years=2), '!dur\nyears: 2', '!dur'],
  27. [Duration(years=0), '!duration_tag {}', '!duration_tag'],
  28. ])
  29. def test_from_yaml_tag(expected_duration, yaml_string, tag, loader):
  30. class TestLoader(loader):
  31. pass
  32. Duration.register_yaml_constructor(TestLoader, tag=tag)
  33. loaded_duration = yaml.load(yaml_string, Loader=TestLoader)
  34. assert expected_duration == loaded_duration
  35. @pytest.mark.parametrize(('dumper'), [yaml.Dumper, yaml.SafeDumper])
  36. @pytest.mark.parametrize(('duration', 'yaml_string'), [
  37. [Duration(years=0), '!duration {}\n'],
  38. [Duration(years=32), '!duration\nyears: 32\n'],
  39. [Duration(days=32), '!duration\ndays: 32\n'],
  40. [Duration(minutes=32), '!duration\nminutes: 32\n'],
  41. [Duration(years=1, days=2), '!duration\ndays: 2\nyears: 1\n'],
  42. [Duration(days=2, minutes=0), '!duration\ndays: 2\n'],
  43. [Duration(days=2, minutes=5), '!duration\ndays: 2\nminutes: 5\n'],
  44. [Duration(years=1, days=2, minutes=5),
  45. '!duration\ndays: 2\nminutes: 5\nyears: 1\n'],
  46. ])
  47. def test_to_yaml(duration, yaml_string, dumper):
  48. class TestDumper(dumper):
  49. pass
  50. Duration.register_yaml_representer(TestDumper)
  51. assert yaml_string == yaml.dump(
  52. duration,
  53. Dumper=TestDumper,
  54. default_flow_style=False,
  55. )