We can now use concept sets in BNF definitions
This commit is contained in:
@@ -164,7 +164,7 @@ class ObjWithDigestWithKey:
|
||||
return hash((self.a, self.b))
|
||||
|
||||
def __eq__(self, obj):
|
||||
return isinstance(obj, ObjNoKey) and \
|
||||
return isinstance(obj, ObjWithDigestWithKey) and \
|
||||
self.a == obj.a and \
|
||||
self.b == obj.b
|
||||
|
||||
@@ -529,6 +529,44 @@ def test_i_can_add_obj_with_key_to_a_list(root):
|
||||
assert loaded == ["foo", "bar", ObjWithKey("a", "b")]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("root", [
|
||||
".sheerka",
|
||||
"mem://"
|
||||
])
|
||||
def test_i_can_add_a_reference(root):
|
||||
sdp = SheerkaDataProvider(root)
|
||||
sdp.serializer.register(PickleSerializer(lambda o: isinstance(o, ObjWithDigestWithKey)))
|
||||
obj1 = ObjWithDigestWithKey(1, "foo")
|
||||
sdp.add(evt_digest, "entry", obj1, use_ref=True)
|
||||
sdp.add(evt_digest, "entry_by_value", {obj1.b: obj1.get_digest()}, is_ref=True)
|
||||
|
||||
# another object
|
||||
obj2 = ObjWithDigestWithKey(2, "bar")
|
||||
sdp.add(evt_digest, "entry", obj2, use_ref=True)
|
||||
sdp.add(evt_digest, "entry_by_value", {obj2.b: obj2.get_digest()}, is_ref=True)
|
||||
|
||||
state = sdp.load_state(sdp.get_snapshot())
|
||||
assert state.data == {
|
||||
"entry": {
|
||||
"1": '##REF##:' + obj1.get_digest(),
|
||||
"2": '##REF##:' + obj2.get_digest(),
|
||||
},
|
||||
"entry_by_value": {
|
||||
"foo": '##REF##:' + obj1.get_digest(),
|
||||
"bar": '##REF##:' + obj2.get_digest()
|
||||
},
|
||||
}
|
||||
|
||||
# sanity check, make sure that I can load back
|
||||
loaded1 = sdp.get("entry_by_value", "foo")
|
||||
assert loaded1 == ObjWithDigestWithKey(1, "foo")
|
||||
assert getattr(loaded1, Serializer.ORIGIN) == obj1.get_digest()
|
||||
|
||||
loaded2 = sdp.get("entry_by_value", "bar")
|
||||
assert loaded2 == ObjWithDigestWithKey(2, "bar")
|
||||
assert getattr(loaded2, Serializer.ORIGIN) == obj2.get_digest()
|
||||
|
||||
|
||||
@pytest.mark.parametrize("root", [
|
||||
".sheerka",
|
||||
"mem://"
|
||||
@@ -650,6 +688,20 @@ def test_i_cannot_add_the_same_digest_twice_in_the_same_entry4(root):
|
||||
assert error.value.args[0] == "Duplicate object."
|
||||
|
||||
|
||||
def test_i_cannot_add_using_use_ref_and_is_ref():
|
||||
sdp = SheerkaDataProvider("mem://")
|
||||
|
||||
with pytest.raises(SheerkaDataProviderError) as error:
|
||||
sdp.add(evt_digest, "entry", ObjWithDigestWithKey("a", "b"), use_ref=True, is_ref=True)
|
||||
|
||||
|
||||
def test_i_cannot_add_using_is_ref_if_obj_is_not_a_dictionary():
|
||||
sdp = SheerkaDataProvider("mem://")
|
||||
|
||||
with pytest.raises(SheerkaDataProviderError) as error:
|
||||
sdp.add(evt_digest, "entry", ObjWithDigestWithKey("a", "b"), is_ref=True)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("root", [
|
||||
".sheerka",
|
||||
"mem://"
|
||||
@@ -782,6 +834,43 @@ def test_i_can_set_using_reference(root):
|
||||
assert getattr(loaded, Serializer.ORIGIN) == "95b5cbab545dded0b90b57a3d15a157b9a559fb586ee2f8d6ccbc6d2491f1268"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("root", [
|
||||
".sheerka",
|
||||
"mem://"
|
||||
])
|
||||
def test_i_can_set_a_reference(root):
|
||||
sdp = SheerkaDataProvider(root)
|
||||
sdp.serializer.register(PickleSerializer(lambda o: isinstance(o, ObjWithDigestWithKey)))
|
||||
obj = ObjWithDigestWithKey(1, "foo")
|
||||
sdp.add(evt_digest, "entry", obj, use_ref=True)
|
||||
sdp.set(evt_digest, "entry_by_value", {obj.b: obj.get_digest()}, is_ref=True)
|
||||
|
||||
state = sdp.load_state(sdp.get_snapshot())
|
||||
assert state.data == {
|
||||
"entry": {"1": '##REF##:' + obj.get_digest()},
|
||||
"entry_by_value": {"foo": '##REF##:' + obj.get_digest()},
|
||||
}
|
||||
|
||||
# sanity check, make sure that I can load back
|
||||
loaded = sdp.get("entry_by_value", "foo")
|
||||
assert loaded == ObjWithDigestWithKey(1, "foo")
|
||||
assert getattr(loaded, Serializer.ORIGIN) == obj.get_digest()
|
||||
|
||||
|
||||
def test_i_cannot_set_using_use_ref_and_is_ref():
|
||||
sdp = SheerkaDataProvider("mem://")
|
||||
|
||||
with pytest.raises(SheerkaDataProviderError) as error:
|
||||
sdp.set(evt_digest, "entry", ObjWithDigestWithKey("a", "b"), use_ref=True, is_ref=True)
|
||||
|
||||
|
||||
def test_i_cannot_set_using_is_ref_if_obj_is_not_a_dictionary():
|
||||
sdp = SheerkaDataProvider("mem://")
|
||||
|
||||
with pytest.raises(SheerkaDataProviderError) as error:
|
||||
sdp.set(evt_digest, "entry", ObjWithDigestWithKey("a", "b"), is_ref=True)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("root", [
|
||||
".sheerka",
|
||||
"mem://"
|
||||
|
||||
Reference in New Issue
Block a user