def test_user_parameter_validation_allowed(): p = local.UserParameter('a', 'a desc', 'int', 1, allowed=[1, 2]) with pytest.raises(ValueError) as except_info: p.validate(0) assert 'allowed' in str(except_info.value) assert p.validate(1) == 1 assert p.validate(2) == 2 with pytest.raises(ValueError) as except_info: p.validate(3) assert 'allowed' in str(except_info.value)
def test_user_parameter_validation_range(): p = local.UserParameter('a', 'a desc', 'int', 1, min=0, max=3) with pytest.raises(ValueError) as except_info: p.validate(-1) assert 'less than' in str(except_info.value) assert p.validate(0) == 0 assert p.validate(1) == 1 assert p.validate(2) == 2 assert p.validate(3) == 3 with pytest.raises(ValueError) as except_info: p.validate(4) assert 'greater than' in str(except_info.value)
def test_user_pars_mlist(): # second case: allowed are not lists, can choose any number of them # NB: repeats are allowed p = local.UserParameter("", "", "mlist", allowed=["one", "two", "three"]) with pytest.raises(TypeError): p.validate(0) with pytest.raises((TypeError, ValueError)): # unfortunately, a string does coerce to a list p.validate("one") with pytest.raises(ValueError, match="allowed"): p.validate(["two", "other"]) p.validate(["two"]) p.validate(["two", "two"]) p.validate(["two", "one"]) p.validate([])
def test_user_pars_list(): # first case: allowed are all lists, must choose exactly one of them # NB: order must match p = local.UserParameter("", "", "list", allowed=[[], ["one"], ["one", "two"]]) with pytest.raises(TypeError): p.validate(0) with pytest.raises((TypeError, ValueError)): # unfortunately, a string does coerce to a list p.validate("one") with pytest.raises(ValueError, match="allowed"): p.validate(["two"]) with pytest.raises(ValueError, match="allowed"): p.validate(["two", "one"]) p.validate(["one"]) p.validate(["one", "two"])
def test_user_parameter_coerce_allowed(dtype, given, expected): p = local.UserParameter('a', 'a desc', dtype, expected[0], allowed=given) assert p.allowed == expected
def test_user_parameter_coerce_max(dtype, given, expected): p = local.UserParameter('a', 'a desc', dtype, expected, max=given) assert p.max == expected
def test_user_parameter_coerce_special_datetime(given): p = local.UserParameter('a', 'a desc', 'datetime', given) assert type(p.validate(given)) == pandas.Timestamp
def test_user_parameter_coerce_value(dtype, given, expected): p = local.UserParameter('a', 'a desc', dtype, given) assert p.validate(given) == expected
def test_user_parameter_repr(): p = local.UserParameter('a', 'a desc', 'str') expected = "<UserParameter 'a'>" assert repr(p) == str(p) == expected
def test_user_parameter_default_value(dtype, expected): p = local.UserParameter('a', 'a desc', dtype) assert p.validate(None) == expected
def test_user_parameter_str_method(): p = local.UserParameter('a', 'a desc', 'str') expected = ("UserParameter(name='a', description='a desc', type='str', " "default='', min=None, max=None, allowed=None)") assert str(p) == expected