def test_merge_semantics(data, s1, s2):
    assume(canonicalish(s1) != FALSEY and canonicalish(s2) != FALSEY)
    combined = merged([s1, s2])
    assume(combined is not None)
    assert combined == merged([s2, s1])  # union is commutative
    assume(combined != FALSEY)
    _merge_semantics_helper(data, s1, s2, combined)
def test_merge_should_notice_required_disallowed_properties():
    # The required "name" property is banned by the additionalProperties: False
    # See https://github.com/Zac-HD/hypothesis-jsonschema/issues/30 for details.
    schemas = [
        {"type": "object", "properties": {"name": True}, "required": ["name"]},
        {"type": "object", "properties": {"id": True}, "additionalProperties": False},
    ]
    assert merged(schemas) == FALSEY
Пример #3
0
def test_can_almost_always_merge_numeric_schemas(data, s1, s2):
    assume(canonicalish(s1) != FALSEY and canonicalish(s2) != FALSEY)
    combined = merged([s1, s2])
    if combined is None:
        # The ONLY case in which we can't merge numeric schemas is when
        # they both contain multipleOf keys with distinct non-integer values.
        mul1, mul2 = s1["multipleOf"], s2["multipleOf"]
        assert isinstance(mul1, float) or isinstance(mul2, float)
        assert mul1 != mul2
    elif combined != FALSEY:
        _merge_semantics_helper(data, s1, s2, combined)
def test_merge_semantics(data, s1, s2):
    assume(canonicalish(s1) != FALSEY and canonicalish(s2) != FALSEY)
    combined = merged([s1, s2])
    assume(combined is not None)
    assume(combined != FALSEY)
    note(combined)
    ic = data.draw(from_schema(combined), label="combined")
    i1 = data.draw(from_schema(s1), label="s1")
    i2 = data.draw(from_schema(s2), label="s2")
    assert is_valid(ic, s1) and is_valid(ic, s2)
    assert is_valid(i1, s2) == is_valid(i1, combined)
    assert is_valid(i2, s1) == is_valid(i2, combined)
Пример #5
0
def test_merge_semantics_regressions():
    # TODO: broken because of missing interaction between
    # properties and additionalProperties - merged should return None for this.
    s1 = {
        "properties": {
            "": {
                "type": "string"
            }
        },
        "required": [""],
        "type": "object"
    }
    s2 = {"additionalProperties": {"type": "null"}, "type": "object"}
    instance = {"": ""}
    combined = merged([s1, s2])
    assert is_valid(instance, combined) == (is_valid(instance, s1)
                                            and is_valid(instance, s2))
Пример #6
0
def test_self_merge_eq_canonicalish(schema):
    m = merged([schema, schema])
    assert m == canonicalish(schema)
Пример #7
0
def test_unable_to_merge(group):
    assert merged(group) is None
Пример #8
0
def test_merged(group, result):
    assert merged(group) == result