test_.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. # -*- coding: utf-8 -*-
  2. import pytest
  3. import ioex
  4. import locale
  5. import datetime
  6. @pytest.mark.parametrize(('locale_code'), [
  7. 'unknown_??.utf8',
  8. ])
  9. def test_setlocale_unsupported(locale_code):
  10. with pytest.raises(ioex.UnsupportedLocaleSettingError):
  11. with ioex.setlocale(locale_code):
  12. pass
  13. def test_setlocale_unsupported_inheritance():
  14. assert issubclass(ioex.UnsupportedLocaleSettingError, locale.Error)
  15. @pytest.mark.xfail(raises = ioex.UnsupportedLocaleSettingError)
  16. @pytest.mark.parametrize(('dt', 'dt_format', 'locale_code', 'expected_string'), [
  17. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%x', 'de_DE.utf8', u'23.07.2016'],
  18. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%X', 'de_DE.utf8', u'01:07:12'],
  19. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%x', 'en_US.utf8', u'07/23/2016'],
  20. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%X', 'en_US.utf8', u'01:07:12 AM'],
  21. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%x', 'it_IT.utf8', u'23/07/2016'],
  22. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%X', 'it_IT.utf8', u'01:07:12'],
  23. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%x', 'zh_CN.utf8', u'2016年07月23日'],
  24. [datetime.datetime(2016, 07, 23, 1, 7, 12), '%X', 'zh_CN.utf8', u'01时07分12秒'],
  25. ])
  26. def test_setlocale_strtime(dt, dt_format, locale_code, expected_string):
  27. with ioex.setlocale(locale_code):
  28. assert dt.strftime(dt_format).decode('utf-8') == expected_string
  29. @pytest.mark.parametrize(('start', 'end'), [
  30. [datetime.datetime(2016, 7, 24, 12, 21), datetime.datetime(2016, 7, 24, 12, 22)],
  31. [None, datetime.datetime(2016, 7, 24, 12, 22)],
  32. [datetime.datetime(2016, 7, 24, 12, 21), None],
  33. [None, None],
  34. ])
  35. def test_dateperiod_init(start, end):
  36. p = ioex.DatePeriod(start = start, end = end)
  37. assert p.start == start
  38. assert p.end == end
  39. @pytest.mark.parametrize(('start', 'end'), [
  40. [';-)', datetime.datetime(2016, 7, 24, 12, 22)],
  41. [datetime.datetime(2016, 7, 24, 12, 22), ';-)'],
  42. ])
  43. def test_dateperiod_init_fail(start, end):
  44. with pytest.raises(TypeError):
  45. ioex.DatePeriod(start = start, end = end)
  46. @pytest.mark.parametrize(('start'), [
  47. datetime.datetime(2016, 7, 24, 12, 21),
  48. None,
  49. ])
  50. def test_dateperiod_set_start(start):
  51. p = ioex.DatePeriod()
  52. assert p.start is None
  53. p.start = start
  54. assert p.start == start
  55. @pytest.mark.parametrize(('start'), [
  56. ':-/',
  57. ])
  58. def test_dateperiod_set_start_fail(start):
  59. p = ioex.DatePeriod()
  60. with pytest.raises(TypeError):
  61. p.start = start
  62. @pytest.mark.parametrize(('end'), [
  63. datetime.datetime(2016, 7, 24, 12, 21),
  64. None,
  65. ])
  66. def test_dateperiod_set_end(end):
  67. p = ioex.DatePeriod()
  68. assert p.end is None
  69. p.end = end
  70. assert p.end == end
  71. @pytest.mark.parametrize(('end'), [
  72. ':-/',
  73. ])
  74. def test_dateperiod_set_end_fail(end):
  75. p = ioex.DatePeriod()
  76. with pytest.raises(TypeError):
  77. p.end = end