test_period.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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', 'end', 'iso'), [
  25. [
  26. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  27. datetime.datetime(
  28. 2016, 7, 24, 12, 21, 0,
  29. microsecond=130000,
  30. tzinfo=pytz.utc,
  31. ),
  32. '2016-07-24T12:20:00.0255/2016-07-24T12:21:00.13Z',
  33. ],
  34. ])
  35. def test_init_isoformat(start, end, iso):
  36. p = ioex.datetimeex.Period(isoformat=iso)
  37. assert p.start == start
  38. assert p.end == end
  39. @pytest.mark.parametrize(('params'), [
  40. {
  41. 'start': datetime.datetime(2016, 7, 24, 12, 20, 0),
  42. 'end': datetime.datetime(2016, 7, 24, 12, 21, 0),
  43. 'isoformat': '2016-07-24T12:20:00Z/2016-07-24T12:21:00Z',
  44. },
  45. {
  46. 'start': datetime.datetime(2016, 7, 24, 12, 20, 0),
  47. 'isoformat': '2016-07-24T12:20:00Z/2016-07-24T12:21:00Z',
  48. },
  49. {
  50. 'end': datetime.datetime(2016, 7, 24, 12, 21, 0),
  51. 'isoformat': '2016-07-24T12:20:00Z/2016-07-24T12:21:00Z',
  52. },
  53. ])
  54. def test_init_param_fail(params):
  55. with pytest.raises(AttributeError):
  56. ioex.datetimeex.Period(**params)
  57. @pytest.mark.parametrize(('start'), [
  58. datetime.datetime(2016, 7, 24, 12, 21),
  59. None,
  60. ])
  61. def test_set_start(start):
  62. p = ioex.datetimeex.Period()
  63. assert p.start is None
  64. p.start = start
  65. assert p.start == start
  66. @pytest.mark.parametrize(('start'), [
  67. ':-/',
  68. ])
  69. def test_set_start_fail(start):
  70. p = ioex.datetimeex.Period()
  71. with pytest.raises(TypeError):
  72. p.start = start
  73. @pytest.mark.parametrize(('end'), [
  74. datetime.datetime(2016, 7, 24, 12, 21),
  75. None,
  76. ])
  77. def test_set_end(end):
  78. p = ioex.datetimeex.Period()
  79. assert p.end is None
  80. p.end = end
  81. assert p.end == end
  82. @pytest.mark.parametrize(('end'), [
  83. ':-/',
  84. ])
  85. def test_set_end_fail(end):
  86. p = ioex.datetimeex.Period()
  87. with pytest.raises(TypeError):
  88. p.end = end
  89. @pytest.mark.parametrize(('start', 'end', 'iso'), [
  90. [
  91. datetime.datetime(2016, 7, 24, 12, 21, 0),
  92. datetime.datetime(2016, 7, 24, 12, 22, 13),
  93. '2016-07-24T12:21:00/2016-07-24T12:22:13',
  94. ],
  95. [
  96. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  97. datetime.datetime(2016, 7, 24, 12, 22, 13, tzinfo=pytz.utc),
  98. '2016-07-24T12:21:00Z/2016-07-24T12:22:13Z',
  99. ],
  100. [
  101. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  102. pytz.timezone('Europe/Vienna').localize(
  103. datetime.datetime(2016, 7, 24, 12, 22, 13)
  104. ),
  105. '2016-07-24T12:21:00Z/2016-07-24T12:22:13+02:00',
  106. ],
  107. [
  108. pytz.timezone('US/Pacific').localize(
  109. datetime.datetime(2016, 1, 12, 12, 22, 13)
  110. ),
  111. pytz.timezone('Europe/London').localize(
  112. datetime.datetime(2016, 1, 24, 12, 22, 13)
  113. ),
  114. '2016-01-12T12:22:13-08:00/2016-01-24T12:22:13Z',
  115. ],
  116. [
  117. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  118. datetime.datetime(
  119. 2016, 7, 24, 12, 21, 0,
  120. microsecond=13,
  121. tzinfo=pytz.utc,
  122. ),
  123. '2016-07-24T12:20:00.025500/2016-07-24T12:21:00.000013Z',
  124. ],
  125. ])
  126. def test_get_isoformat(start, end, iso):
  127. p = ioex.datetimeex.Period(start=start, end=end)
  128. assert p.isoformat == iso
  129. @pytest.mark.parametrize(('start', 'end', 'iso'), [
  130. [
  131. datetime.datetime(2016, 7, 24, 12, 21, 0),
  132. datetime.datetime(2016, 7, 24, 12, 22, 13),
  133. '2016-07-24T12:21:00/2016-07-24T12:22:13',
  134. ],
  135. [
  136. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  137. datetime.datetime(2016, 7, 24, 12, 22, 13, tzinfo=pytz.utc),
  138. '2016-07-24T12:21:00Z/2016-07-24T12:22:13Z',
  139. ],
  140. [
  141. datetime.datetime(2016, 7, 24, 12, 21, 0, tzinfo=pytz.utc),
  142. pytz.timezone('Europe/Vienna').localize(
  143. datetime.datetime(2016, 7, 24, 12, 22, 13)
  144. ),
  145. '2016-07-24T12:21:00Z/2016-07-24T12:22:13+02:00',
  146. ],
  147. [
  148. pytz.timezone('US/Pacific').localize(
  149. datetime.datetime(2016, 1, 12, 12, 22, 13)
  150. ),
  151. pytz.timezone('Europe/London').localize(
  152. datetime.datetime(2016, 1, 24, 12, 22, 13)
  153. ),
  154. '2016-01-12T12:22:13-08:00/2016-01-24T12:22:13Z',
  155. ],
  156. [
  157. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  158. datetime.datetime(
  159. 2016, 7, 24, 12, 21, 0,
  160. microsecond=13,
  161. tzinfo=pytz.utc,
  162. ),
  163. '2016-07-24T12:20:00.025500/2016-07-24T12:21:00.000013Z',
  164. ],
  165. [
  166. datetime.datetime(2016, 7, 24, 12, 20, 0, microsecond=25500),
  167. datetime.datetime(
  168. 2016, 7, 24, 12, 21, 0,
  169. microsecond=130000,
  170. tzinfo=pytz.utc,
  171. ),
  172. '2016-07-24T12:20:00.0255/2016-07-24T12:21:00.13Z',
  173. ],
  174. ])
  175. def test_set_isoformat(start, end, iso):
  176. p = ioex.datetimeex.Period()
  177. p.isoformat = iso
  178. assert p.start == start
  179. assert p.end == end
  180. @pytest.mark.parametrize(('iso'), [
  181. '2016-07-24T12:20:0<INVALID>0.0255/2016-07-24T12:21:00.13Z',
  182. ])
  183. def test_set_isoformat_fail(iso):
  184. p = ioex.datetimeex.Period()
  185. with pytest.raises(ValueError):
  186. p.isoformat = iso
  187. @pytest.mark.parametrize(('a', 'b'), [
  188. [
  189. ioex.datetimeex.Period(
  190. start=datetime.datetime(2016, 7, 24, 12, 21, 0),
  191. end=datetime.datetime(2016, 7, 24, 12, 22, 13),
  192. ),
  193. ioex.datetimeex.Period(
  194. start=datetime.datetime(2016, 7, 24, 12, 21, 0, 0),
  195. end=datetime.datetime(2016, 7, 24, 12, 22, 13, 0),
  196. ),
  197. ],
  198. [
  199. ioex.datetimeex.Period(
  200. start=pytz.timezone('Europe/Vienna').localize(
  201. datetime.datetime(2016, 7, 24, 12, 21, 0)
  202. ),
  203. end=datetime.datetime(2016, 7, 24, 12, 22, 13),
  204. ),
  205. ioex.datetimeex.Period(
  206. start=pytz.timezone('Europe/Vienna').localize(
  207. datetime.datetime(2016, 7, 24, 12, 21, 0)
  208. ),
  209. end=datetime.datetime(2016, 7, 24, 12, 22, 13),
  210. ),
  211. ],
  212. [
  213. ioex.datetimeex.Period(
  214. start=pytz.timezone('Europe/Vienna').localize(
  215. datetime.datetime(2016, 7, 24, 12, 21, 0)
  216. ),
  217. end=pytz.timezone('Europe/London').localize(
  218. datetime.datetime(2016, 7, 24, 12, 22, 13)
  219. ),
  220. ),
  221. ioex.datetimeex.Period(
  222. start=pytz.timezone('Europe/London').localize(
  223. datetime.datetime(2016, 7, 24, 11, 21, 0)
  224. ),
  225. end=pytz.timezone('Europe/Vienna').localize(
  226. datetime.datetime(2016, 7, 24, 13, 22, 13)
  227. ),
  228. ),
  229. ],
  230. ])
  231. def test_eq(a, b):
  232. assert a == b
  233. assert b == a