test_period.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. import pytz
  4. import ioex.datetimeex
  5. import datetime
  6. @pytest.mark.parametrize(('start', 'end'), [
  7. [datetime.datetime(2016, 7, 24, 12, 21),
  8. datetime.datetime(2016, 7, 24, 12, 22)],
  9. [None, datetime.datetime(2016, 7, 24, 12, 22)],
  10. [datetime.datetime(2016, 7, 24, 12, 21), None],
  11. [None, None],
  12. ])
  13. def test_init_start_end(start, end):
  14. p = ioex.datetimeex.Period(start=start, end=end)
  15. assert p.start == start
  16. assert p.end == end
  17. @pytest.mark.parametrize(('start', 'end'), [
  18. [';-)', datetime.datetime(2016, 7, 24, 12, 22)],
  19. [datetime.datetime(2016, 7, 24, 12, 22), ';-)'],
  20. ])
  21. def test_init_start_end_fail(start, end):
  22. with pytest.raises(TypeError):
  23. ioex.datetimeex.Period(start=start, end=end)
  24. @pytest.mark.parametrize(('start'), [
  25. datetime.datetime(2016, 7, 24, 12, 21),
  26. None,
  27. ])
  28. def test_set_start(start):
  29. p = ioex.datetimeex.Period()
  30. assert p.start is None
  31. p.start = start
  32. assert p.start == start
  33. @pytest.mark.parametrize(('start'), [
  34. ':-/',
  35. ])
  36. def test_set_start_fail(start):
  37. p = ioex.datetimeex.Period()
  38. with pytest.raises(TypeError):
  39. p.start = start
  40. @pytest.mark.parametrize(('end'), [
  41. datetime.datetime(2016, 7, 24, 12, 21),
  42. None,
  43. ])
  44. def test_set_end(end):
  45. p = ioex.datetimeex.Period()
  46. assert p.end is None
  47. p.end = end
  48. assert p.end == end
  49. @pytest.mark.parametrize(('end'), [
  50. ':-/',
  51. ])
  52. def test_set_end_fail(end):
  53. p = ioex.datetimeex.Period()
  54. with pytest.raises(TypeError):
  55. p.end = end
  56. @pytest.mark.parametrize(('start', 'end', 'iso'), [
  57. [
  58. datetime.datetime(2016, 7, 24, 12, 21, 0),
  59. datetime.datetime(2016, 7, 24, 12, 22, 13),
  60. '2016-07-24T12:21:00/2016-07-24T12:22:13',
  61. ],
  62. [
  63. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  64. datetime.datetime(2016, 7, 24, 12, 22, 13, tzinfo=pytz.utc),
  65. '2016-07-24T12:21:00Z/2016-07-24T12:22:13Z',
  66. ],
  67. [
  68. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  69. pytz.timezone('Europe/Vienna').localize(
  70. datetime.datetime(2016, 7, 24, 12, 22, 13)
  71. ),
  72. '2016-07-24T12:21:00Z/2016-07-24T12:22:13+02:00',
  73. ],
  74. [
  75. pytz.timezone('US/Pacific').localize(
  76. datetime.datetime(2016, 1, 12, 12, 22, 13)
  77. ),
  78. pytz.timezone('Europe/London').localize(
  79. datetime.datetime(2016, 1, 24, 12, 22, 13)
  80. ),
  81. '2016-01-12T12:22:13-08:00/2016-01-24T12:22:13Z',
  82. ],
  83. [
  84. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  85. datetime.datetime(
  86. 2016, 7, 24, 12, 21, 0,
  87. microsecond=13,
  88. tzinfo=pytz.utc,
  89. ),
  90. '2016-07-24T12:20:00.025500/2016-07-24T12:21:00.000013Z',
  91. ],
  92. ])
  93. def test_get_isoformat(start, end, iso):
  94. p = ioex.datetimeex.Period(start=start, end=end)
  95. assert p.isoformat == iso
  96. @pytest.mark.parametrize(('start', 'end', 'source_iso'), [
  97. [
  98. datetime.datetime(2016, 7, 24, 12, 21, 0),
  99. datetime.datetime(2016, 7, 24, 12, 22, 13),
  100. '2016-07-24T12:21:00/2016-07-24T12:22:13',
  101. ],
  102. [
  103. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  104. datetime.datetime(2016, 7, 24, 12, 22, 13, tzinfo=pytz.utc),
  105. '2016-07-24T12:21:00Z/2016-07-24T12:22:13Z',
  106. ],
  107. [
  108. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  109. pytz.timezone('Europe/Vienna').localize(
  110. datetime.datetime(2016, 7, 24, 12, 22, 13)
  111. ),
  112. '2016-07-24T12:21:00Z/2016-07-24T12:22:13+02:00',
  113. ],
  114. [
  115. pytz.timezone('US/Pacific').localize(
  116. datetime.datetime(2016, 1, 12, 12, 22, 13)
  117. ),
  118. pytz.timezone('Europe/London').localize(
  119. datetime.datetime(2016, 1, 24, 12, 22, 13)
  120. ),
  121. '2016-01-12T12:22:13-08:00/2016-01-24T12:22:13Z',
  122. ],
  123. [
  124. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  125. datetime.datetime(
  126. 2016, 7, 24, 12, 21, 0,
  127. microsecond=13,
  128. tzinfo=pytz.utc,
  129. ),
  130. '2016-07-24T12:20:00.025500/2016-07-24T12:21:00.000013Z',
  131. ],
  132. [
  133. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  134. datetime.datetime(
  135. 2016, 7, 24, 12, 21, 0,
  136. microsecond=130000,
  137. tzinfo=pytz.utc,
  138. ),
  139. '2016-07-24T12:20:00.0255/2016-07-24T12:21:00.13Z',
  140. ],
  141. ])
  142. def test_from_iso(start, end, source_iso):
  143. p = ioex.datetimeex.Period.from_iso(source_iso)
  144. assert p.start == start
  145. assert p.end == end
  146. @pytest.mark.parametrize(('source_iso'), [
  147. '2016-07-24T12:20:0<INVALID>0.0255/2016-07-24T12:21:00.13Z',
  148. ])
  149. def test_from_iso_fail(source_iso):
  150. with pytest.raises(ValueError):
  151. ioex.datetimeex.Period.from_iso(source_iso)
  152. @pytest.mark.parametrize(('a', 'b'), [
  153. [
  154. ioex.datetimeex.Period(
  155. start=datetime.datetime(2016, 7, 24, 12, 21, 0),
  156. end=datetime.datetime(2016, 7, 24, 12, 22, 13),
  157. ),
  158. ioex.datetimeex.Period(
  159. start=datetime.datetime(2016, 7, 24, 12, 21, 0, 0),
  160. end=datetime.datetime(2016, 7, 24, 12, 22, 13, 0),
  161. ),
  162. ],
  163. [
  164. ioex.datetimeex.Period(
  165. start=pytz.timezone('Europe/Vienna').localize(
  166. datetime.datetime(2016, 7, 24, 12, 21, 0)
  167. ),
  168. end=datetime.datetime(2016, 7, 24, 12, 22, 13),
  169. ),
  170. ioex.datetimeex.Period(
  171. start=pytz.timezone('Europe/Vienna').localize(
  172. datetime.datetime(2016, 7, 24, 12, 21, 0)
  173. ),
  174. end=datetime.datetime(2016, 7, 24, 12, 22, 13),
  175. ),
  176. ],
  177. [
  178. ioex.datetimeex.Period(
  179. start=pytz.timezone('Europe/Vienna').localize(
  180. datetime.datetime(2016, 7, 24, 12, 21, 0)
  181. ),
  182. end=pytz.timezone('Europe/London').localize(
  183. datetime.datetime(2016, 7, 24, 12, 22, 13)
  184. ),
  185. ),
  186. ioex.datetimeex.Period(
  187. start=pytz.timezone('Europe/London').localize(
  188. datetime.datetime(2016, 7, 24, 11, 21, 0)
  189. ),
  190. end=pytz.timezone('Europe/Vienna').localize(
  191. datetime.datetime(2016, 7, 24, 13, 22, 13)
  192. ),
  193. ),
  194. ],
  195. ])
  196. def test_eq(a, b):
  197. assert a == b
  198. assert b == a