Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
import logging
|
||||
|
||||
import pytest
|
||||
from core.concept import Concept, ConceptParts
|
||||
from core.concept import Concept
|
||||
from core.tokenizer import Keywords
|
||||
from sheerkapickle import tags
|
||||
from sheerkapickle.SheerkaPickler import SheerkaPickler
|
||||
from sheerkapickle.SheerkaUnpickler import SheerkaUnpickler
|
||||
|
||||
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
|
||||
|
||||
class Obj:
|
||||
@@ -28,7 +29,7 @@ class Obj:
|
||||
return hash((self.a, self.b, self.c))
|
||||
|
||||
|
||||
class TestSheerkaPickler(TestUsingFileBasedSheerka):
|
||||
class TestSheerkaPickler(TestUsingMemoryBasedSheerka):
|
||||
|
||||
@pytest.mark.parametrize("obj, expected", [
|
||||
(1, 1),
|
||||
@@ -44,7 +45,7 @@ class TestSheerkaPickler(TestUsingFileBasedSheerka):
|
||||
([1, [3.14, "a string"]], [1, [3.14, "a string"]]),
|
||||
([1, (3.14, "a string")], [1, {tags.TUPLE: [3.14, "a string"]}]),
|
||||
([], []),
|
||||
(ConceptParts.BODY, {tags.ENUM: "core.concept.ConceptParts.BODY"}),
|
||||
(Keywords.DEF, {tags.ENUM: 'core.tokenizer.Keywords.DEF'}),
|
||||
])
|
||||
def test_i_can_flatten_and_restore_primitives(self, obj, expected):
|
||||
sheerka = self.get_sheerka()
|
||||
@@ -105,9 +106,22 @@ class TestSheerkaPickler(TestUsingFileBasedSheerka):
|
||||
decoded = SheerkaUnpickler(sheerka).restore(flatten)
|
||||
assert decoded == obj
|
||||
|
||||
def test_i_cannot_correctly_flatten_compiled_and_generator(self):
|
||||
sheerka = self.get_sheerka()
|
||||
|
||||
obj = Obj((i for i in range(3)), compile("a + b", "<src>", mode="eval"), None)
|
||||
|
||||
flatten = SheerkaPickler(sheerka).flatten(obj)
|
||||
|
||||
assert isinstance(flatten["a"], str)
|
||||
assert flatten["a"].startswith("<generator object")
|
||||
assert isinstance(flatten["b"], str)
|
||||
assert flatten["b"].startswith("<code object")
|
||||
assert flatten["c"] is None
|
||||
|
||||
@pytest.mark.parametrize("obj, expected", [
|
||||
({None: "a"}, {'null': "a"}),
|
||||
({ConceptParts.BODY: "a"}, {'core.concept.ConceptParts.BODY': 'a'}),
|
||||
({Keywords.DEF: "a"}, {'core.tokenizer.Keywords.DEF': 'a'}),
|
||||
({(1, 2): "a"}, {(1, 2): "a"}),
|
||||
])
|
||||
def test_i_can_manage_specific_keys_in_dictionaries(self, obj, expected):
|
||||
@@ -136,15 +150,15 @@ class TestSheerkaPickler(TestUsingFileBasedSheerka):
|
||||
sheerka = self.get_sheerka()
|
||||
|
||||
foo = Obj("foo", "bar", "baz")
|
||||
obj = [ConceptParts.BODY, foo, ConceptParts.WHERE, ConceptParts.BODY, foo]
|
||||
obj = [Keywords.DEF, foo, Keywords.WHERE, Keywords.DEF, foo]
|
||||
flatten = SheerkaPickler(sheerka).flatten(obj)
|
||||
|
||||
assert flatten == [{'_sheerka/enum': 'core.concept.ConceptParts.BODY'},
|
||||
assert flatten == [{'_sheerka/enum': 'core.tokenizer.Keywords.DEF'},
|
||||
{'_sheerka/obj': 'tests.sheerkapickle.test_SheerkaPickler.Obj',
|
||||
'a': 'foo',
|
||||
'b': 'bar',
|
||||
'c': 'baz'},
|
||||
{'_sheerka/enum': 'core.concept.ConceptParts.WHERE'},
|
||||
{'_sheerka/enum': 'core.tokenizer.Keywords.WHERE'},
|
||||
{'_sheerka/id': 0},
|
||||
{'_sheerka/id': 1}]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user