1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
"""
Unit tests for CalendarDateRange parameter.
"""
import datetime as dt
import re
import unittest
import param
import pytest
# Assuming tests of range parameter cover most of what's needed to
# test date range.
class TestDateTimeRange(unittest.TestCase):
def _check_defaults(self, p):
assert p.default is None
assert p.allow_None is True
assert p.length == 2
assert p.bounds is None
assert p.softbounds is None
assert p.inclusive_bounds == (True, True)
assert p.step is None
def test_defaults_class(self):
class P(param.Parameterized):
r = param.CalendarDateRange()
self._check_defaults(P.param.r)
def test_defaults_inst(self):
class P(param.Parameterized):
r = param.CalendarDateRange()
p = P()
self._check_defaults(p.param.r)
def test_defaults_unbound(self):
r = param.CalendarDateRange()
self._check_defaults(r)
bad_range = (dt.date(2017,2,27),dt.date(2017,2,26))
def test_wrong_type_default(self):
with pytest.raises(
ValueError,
match=re.escape("CalendarDateRange parameter 'a' only takes date types, not (1.0, 2.0).")
):
class Q(param.Parameterized):
a = param.CalendarDateRange(default=(1.0,2.0))
def test_wrong_type_init(self):
class Q(param.Parameterized):
a = param.CalendarDateRange()
with pytest.raises(
ValueError,
match=re.escape("CalendarDateRange parameter 'Q.a' end date 2017-02-26 is before start date 2017-02-27.")
):
Q(a=self.bad_range)
def test_wrong_type_set(self):
class Q(param.Parameterized):
a = param.CalendarDateRange()
q = Q()
with pytest.raises(
ValueError,
match=re.escape("CalendarDateRange parameter 'Q.a' end date 2017-02-26 is before start date 2017-02-27.")
):
q.a = self.bad_range
def test_start_before_end_default(self):
with pytest.raises(
ValueError,
match=re.escape("CalendarDateRange parameter 'a' end date 2017-02-26 is before start date 2017-02-27.")
):
class Q(param.Parameterized):
a = param.CalendarDateRange(default=self.bad_range)
def test_start_before_end_init(self):
class Q(param.Parameterized):
a = param.CalendarDateRange()
with pytest.raises(
ValueError,
match=re.escape("CalendarDateRange parameter 'Q.a' end date 2017-02-26 is before start date 2017-02-27.")
):
Q(a=self.bad_range)
def test_start_before_end_set(self):
class Q(param.Parameterized):
a = param.CalendarDateRange()
q = Q()
with pytest.raises(
ValueError,
match=re.escape("CalendarDateRange parameter 'Q.a' end date 2017-02-26 is before start date 2017-02-27.")
):
q.a = self.bad_range
def test_validate_bounds_wrong_type_lower(self):
msg = re.escape("CalendarDateRange parameter lower bound can only be None or a date value, not <class 'str'>.")
with pytest.raises(ValueError, match=msg):
param.CalendarDateRange(bounds=('a', dt.date(2017,2,27)))
def test_validate_bounds_wrong_type_upper(self):
msg = re.escape("CalendarDateRange parameter upper bound can only be None or a date value, not <class 'str'>.")
with pytest.raises(ValueError, match=msg):
param.CalendarDateRange(bounds=(dt.date(2017,2,27), 'b'))
def test_validate_softbounds_wrong_type_lower(self):
msg = re.escape("CalendarDateRange parameter lower softbound can only be None or a date value, not <class 'str'>.")
with pytest.raises(ValueError, match=msg):
param.CalendarDateRange(softbounds=('a', dt.date(2017,2,27)))
def test_validate_softbounds_wrong_type_upper(self):
msg = re.escape("CalendarDateRange parameter upper softbound can only be None or a date value, not <class 'str'>.")
with pytest.raises(ValueError, match=msg):
param.CalendarDateRange(softbounds=(dt.date(2017,2,27), 'b'))
|