def test_set(): a = Array(Value("str")) a.set("abc") assert a.value == ["a", "b", "c"] a = Array(Value("int")) a.set([1, 2, 3]) assert a.value == [1, 2, 3]
def test_get_unset_value(): v = Value(type_name="bool") assert v.value is None v = Value(type_name="float") assert v.value is None v = Value(type_name="int") assert v.value is None v = Value(type_name="str") assert v.value is None
def test_parse_int_success(): v = Value(type_name="int", strict=False) res = v.parse_int("1") assert res == 1 res = v.parse_int("1.0") assert res == 1 res = v.parse_int("1,1") assert res == None res = v.parse_int("1,a") assert res == None res = v.parse_int("1.a") assert res == None res = v.parse_int(True) assert res == 1 res = v.parse_int(False) assert res == 0 res = v.parse_int(1) assert res == 1 res = v.parse_int(1.2) assert res == None
def test_getitem_with_base_type(): a = Array(Value("int"), strict=True) a.add(1) a.add("2") assert a[0] is 1 assert a[1] == 2
def test_getitem_without_base_type(): a = Array(Value("int")) a.add(1) a.add("2") assert a[0] == 1 assert a[1] == 2
def test_parse_float_success(): v = Value(type_name="float", strict=False) res = v.parse_float("2") assert res == 2.0 res = v.parse_float("2.") assert res == 2.0 res = v.parse_float("2,") assert res == 2.0 res = v.parse_float(".1") assert res == 0.1 res = v.parse_float(",1") assert res == 0.1 res = v.parse_float("2,23") assert res == 2.23 res = v.parse_float("2.222") assert res == 2.222 res = v.parse_float(2) assert res == 2.0 res = v.parse_float(2.0) assert res == 2.0 res = v.parse_float(True) assert res == 1.0 res = v.parse_float(False) assert res == 0.0
def test_add(): a = Array(Value("int")) a.add(1) a.add(2) assert a.add(2) == a assert a[0] == 1 assert a[1] == 2
def build_container(config, strict=True): _body = dict() for el in config: val = Value(el["type"], required=el["required"]) _body[el["name"]] = val class ContainerBuilder(Container): body = _body res = ContainerBuilder(strict=strict) return res
def test_get_all_values(): vi = Value("int", strict=False) assert vi.set("1").value == 1 assert vi.set("1.1").value == None assert vi.set("1,1").value == None assert vi.set("1,a").value == None assert vi.set("1,").value == 1 assert vi.set("1.").value == 1 assert vi.set(1).value == 1 assert vi.set(1.3).value == None assert vi.set(None).value is None vf = Value("float") assert vf.set("1").value == 1.0 assert vf.set("1.1").value == 1.1 assert vf.set("1,1").value == 1.1 assert vf.set("1,").value == 1.0 assert vf.set(".1").value == 0.1 assert vf.set(",1").value == 0.1 assert vf.set(1).value == 1.0 assert vf.set(1.2).value == 1.2 assert vf.set(None).value is None
def test_parse_bool_failure(): v = Value(type_name="bool") v._value = "" assert v.value is False v._value = list() assert v.value is False v._value = dict() assert v.value is False v._value = set() assert v.value is False
def test_parse_bool_success(): v = Value(type_name="bool") v._value = 1 assert v.value is True v._value = 2.2 assert v.value is True v._value = "2" assert v.value is True v._value = {"a"} assert v.value is True v._value = [1, 4, 4, 4, 4] assert v.value is True
def test_set(): v = Value("int") assert v.set(1) == v
def test_is_allowed(): v = Value(type_name="int", allowed={1, 2, 3, 4}) v.set(1) assert v.value == 1
def test_is_allowed_not_strict_failure(): v = Value(type_name="int", allowed={1, 2, 3, 4}, strict=False) v.set(5) assert v.value is None assert v.is_valid is False
class Cont1(Container): body = {"a": Value("int"), "b": Cont()} class Cont2(Container): body = { "a": Value("int", meta={"edit": True}), "b": Value("int", meta={"edit": False}), "c": Value("int", meta={"edit": True}) } _body = { "v1": Value("int"), "v2": Value("float"), "v3": Value("bool"), "v4": Value("str", required=True), "a1": Any(), "a2": Any(), "r1": Array(Value("int")), "d1": Dictionary(), "c1": Cont() } class C(Container): body = _body
def test_parse_float_not_srtict_failure(): v = Value(type_name="float", strict=False) res = v.parse_float("22a") assert res is None assert v.is_valid is False
def test_check_avaliable_types(): v = Value("str") assert v.types == {"float", "int", "str", "bool"}
def test_type(): a = Array(Value("int")) assert a.type == "array"
def test_is_list(): a = Array(Value("int")) assert isinstance(a._value, list)
def test_check_type(): with pytest.raises(exc.WrongFieldType): Value(type_name="string")
def test_return_none(): v = Value(type_name="float") res = v.parse_float(None) assert res is None
class Cont(Container): body = {"a": Value("int", meta={"edit": True})}
class Cont2(Container): body = { "a": Value("int", meta={"edit": True}), "b": Value("int", meta={"edit": False}), "c": Value("int", meta={"edit": True}) }
class Cont1(Container): body = {"a": Value("int"), "b": Cont()}
def test_empty_array_value(): a = Array(Value("int")) assert a.value is None
def test_is_allowed_failure(): v = Value(type_name="int", allowed={1, 2, 3, 4}) with pytest.raises(exc.ForbiddenValue): v.set(5) v.value
def test_parse_float_strict_failure(): v = Value(type_name="float", strict=True) with pytest.raises(exc.FloatError): v.parse_float("2a")
def test_value_failure_2(): v = Value(type_name="int", strict=True) with pytest.raises(exc.IntError): v.set("5.1") v.value
def test_parse_int_strict_failure(): v = Value(type_name="int", strict=True) with pytest.raises(exc.IntError): v.parse_int("2a")
def test_get_value_only_valid(): a = Array(Value("int"), strict=False) a.add(1) a.add("2.a") assert a.get() == [1]