test_yaml.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. yaml = pytest.importorskip('yaml')
  4. import datetime
  5. import pytz
  6. @pytest.mark.parametrize('source_object,yaml_string', [
  7. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0), '2016-07-14 13:50:04\n...\n'],
  8. [pytz.timezone('Europe/Vienna').localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0)), '2016-07-14 13:50:04+02:00\n...\n'],
  9. [pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0)), '2016-07-14 13:50:04+00:00\n...\n'],
  10. ])
  11. def test_to_yaml(source_object, yaml_string):
  12. assert yaml.dump(source_object) == yaml_string
  13. assert yaml.safe_dump(source_object) == yaml_string
  14. @pytest.mark.parametrize('yaml_loader', [yaml.Loader, yaml.SafeLoader])
  15. @pytest.mark.parametrize('expected_object,yaml_string', [
  16. [datetime.datetime(2016, 7, 14, 13, 50, 4, 0), '2016-07-14 13:50:04'],
  17. [pytz.timezone('Europe/Vienna').localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0)), '2016-07-14 13:50:04+02:00'],
  18. [pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0)), '2016-07-14 13:50:04+00:00'],
  19. [pytz.utc.localize(datetime.datetime(2016, 7, 14, 13, 50, 4, 0)), '2016-07-14 13:50:04Z'],
  20. ])
  21. def test_from_yaml(expected_object, yaml_string, yaml_loader):
  22. loaded_object = yaml.load(yaml_string, Loader = yaml_loader)
  23. try:
  24. assert expected_object == loaded_object
  25. except (TypeError, AssertionError) as ex:
  26. # python 2.7 -> TypeError
  27. # python 3 -> AssertionError
  28. if (isinstance(expected_object, datetime.datetime)
  29. and not expected_object.tzinfo is None
  30. and loaded_object.tzinfo is None):
  31. pytest.xfail('pyyaml\'s loaders do not set datetime.tzinfo')
  32. else:
  33. raise ex