1
0

test_duration.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. from ioex.datetimeex import Duration
  4. @pytest.mark.parametrize(('init_kwargs'), [
  5. {'years': 0},
  6. {'years': 13},
  7. {'days': 0},
  8. {'days': 13},
  9. {'years': 1, 'days': 3},
  10. ])
  11. def test_init(init_kwargs):
  12. d = Duration(**init_kwargs)
  13. for attr in ['years', 'days']:
  14. if attr in init_kwargs:
  15. assert init_kwargs[attr] == getattr(d, attr)
  16. else:
  17. assert 0 == getattr(d, attr)
  18. def test_init_default():
  19. d = Duration()
  20. assert 0 == d.years
  21. assert 0 == d.days
  22. @pytest.mark.parametrize(('init_kwargs', 'exception_type'), [
  23. [{'years': -2}, ValueError],
  24. [{'years': '1'}, TypeError],
  25. [{'days': -2}, ValueError],
  26. [{'days': '1'}, TypeError],
  27. ])
  28. def test_init_fail(init_kwargs, exception_type):
  29. with pytest.raises(exception_type):
  30. Duration(**init_kwargs)
  31. @pytest.mark.parametrize(('years'), [
  32. 0,
  33. 13,
  34. ])
  35. def test_set_years(years):
  36. d = Duration()
  37. d.years = years
  38. assert d.years == years
  39. @pytest.mark.parametrize(('years', 'exception_type'), [
  40. [-2, ValueError],
  41. ['1', TypeError],
  42. ])
  43. def test_set_years_fail(years, exception_type):
  44. d = Duration()
  45. with pytest.raises(exception_type):
  46. d.years = years
  47. @pytest.mark.parametrize(('days'), [
  48. 0,
  49. 13,
  50. ])
  51. def test_set_days(days):
  52. d = Duration()
  53. d.days = days
  54. assert d.days == days
  55. @pytest.mark.parametrize(('days', 'exception_type'), [
  56. [-2, ValueError],
  57. ['1', TypeError],
  58. ])
  59. def test_set_days_fail(days, exception_type):
  60. d = Duration()
  61. with pytest.raises(exception_type):
  62. d.days = days
  63. @pytest.mark.parametrize(('init_params', 'iso'), [
  64. [{'years': 0}, 'P0Y'],
  65. [{'years': 30}, 'P30Y'],
  66. [{'years': 3}, 'P3Y'],
  67. [{'days': 30}, 'P30D'],
  68. [{'days': 3}, 'P3D'],
  69. [{'years': 10, 'days': 30}, 'P10Y30D'],
  70. ])
  71. def test_get_isoformat(init_params, iso):
  72. d = Duration(**init_params)
  73. assert d.isoformat == iso
  74. @pytest.mark.parametrize(('expected', 'source_iso'), [
  75. [Duration(years=0), 'P0Y'],
  76. [Duration(years=30), 'P30Y'],
  77. [Duration(years=3), 'P3Y'],
  78. [Duration(days=30), 'P30D'],
  79. [Duration(days=3), 'P3D'],
  80. [Duration(years=10, days=30), 'P10Y30D'],
  81. ])
  82. def test_from_iso(expected, source_iso):
  83. d = Duration.from_iso(source_iso)
  84. assert expected == d
  85. @pytest.mark.parametrize(('source_iso'), [
  86. 'Q0Y',
  87. '2017-05-19T20:02:22+02:00',
  88. ])
  89. def test_from_iso_fail(source_iso):
  90. with pytest.raises(ValueError):
  91. Duration.from_iso(source_iso)
  92. @pytest.mark.parametrize(('a', 'b'), [
  93. [Duration(), Duration(years=0, days=0)],
  94. [Duration(years=0), Duration(years=0)],
  95. [Duration(years=3), Duration(years=3)],
  96. [Duration(days=0), Duration(days=0)],
  97. [Duration(days=3), Duration(days=3)],
  98. [Duration(years=1, days=3), Duration(years=1, days=3)],
  99. ])
  100. def test_eq(a, b):
  101. assert a == b
  102. assert b == a