1
0

test_period.py 7.1 KB

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