Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
+50
-13
@@ -1,6 +1,7 @@
|
||||
import pytest
|
||||
from core.builtin_concepts import BuiltinConcepts
|
||||
|
||||
from core.concept import Concept, ConceptParts, DEFINITION_TYPE_DEF
|
||||
from core.concept import Concept, ConceptParts, DEFINITION_TYPE_DEF, ALL_ATTRIBUTES, get_concept_attrs
|
||||
|
||||
|
||||
@pytest.mark.parametrize("name, variables, expected", [
|
||||
@@ -24,7 +25,7 @@ from core.concept import Concept, ConceptParts, DEFINITION_TYPE_DEF
|
||||
def test_i_can_compute_the_key(name, variables, expected):
|
||||
concept = Concept(name)
|
||||
for var_name in variables:
|
||||
concept.metadata.variables.append((var_name, None))
|
||||
concept.get_metadata().variables.append((var_name, None))
|
||||
concept.init_key()
|
||||
|
||||
assert concept.key == expected
|
||||
@@ -33,17 +34,17 @@ def test_i_can_compute_the_key(name, variables, expected):
|
||||
def test_i_can_compute_the_key_when_from_definition():
|
||||
# if definition is not defined, use the name
|
||||
concept = Concept()
|
||||
concept.metadata.name = "hello a"
|
||||
concept.metadata.variables = [("a", None)]
|
||||
concept.get_metadata().name = "hello a"
|
||||
concept.get_metadata().variables = [("a", None)]
|
||||
concept.init_key()
|
||||
assert concept.key == "hello __var__0"
|
||||
|
||||
# if definition is defined, use it
|
||||
concept = Concept()
|
||||
concept.metadata.name = "greetings"
|
||||
concept.metadata.definition = "hello a"
|
||||
concept.metadata.definition_type = DEFINITION_TYPE_DEF
|
||||
concept.metadata.variables = [("a", None)]
|
||||
concept.get_metadata().name = "greetings"
|
||||
concept.get_metadata().definition = "hello a"
|
||||
concept.get_metadata().definition_type = DEFINITION_TYPE_DEF
|
||||
concept.get_metadata().variables = [("a", None)]
|
||||
concept.init_key()
|
||||
assert concept.key == "hello __var__0"
|
||||
|
||||
@@ -52,7 +53,7 @@ def test_key_does_not_use_variable_when_definition_is_set():
|
||||
concept = Concept("plus").def_var('plus')
|
||||
|
||||
concept.init_key()
|
||||
assert concept.metadata.key == "plus"
|
||||
assert concept.get_metadata().key == "plus"
|
||||
|
||||
|
||||
def test_i_can_serialize():
|
||||
@@ -181,6 +182,8 @@ def test_i_can_compare_concepts():
|
||||
|
||||
|
||||
def test_i_can_detect_concept_differences():
|
||||
ALL_ATTRIBUTES.clear()
|
||||
|
||||
assert Concept(name="concept_name") != Concept()
|
||||
assert Concept(is_builtin=True) != Concept()
|
||||
assert Concept(is_unique=True) != Concept()
|
||||
@@ -197,14 +200,18 @@ def test_i_can_detect_concept_differences():
|
||||
assert Concept().add_prop("a", "b") != Concept()
|
||||
assert Concept().set_value("a", "b") != Concept()
|
||||
|
||||
|
||||
def test_compiled_is_not_used_when_comparing_concepts():
|
||||
ALL_ATTRIBUTES.clear()
|
||||
|
||||
concept = Concept()
|
||||
concept.compiled["foo"] = "value"
|
||||
concept.get_compiled()["foo"] = "value"
|
||||
assert concept == Concept() # compiled is not used in the comparison
|
||||
|
||||
|
||||
def test_i_can_compare_concept_with_circular_reference():
|
||||
foo = Concept("foo")
|
||||
foo.metadata.body = foo
|
||||
foo.get_metadata().body = foo
|
||||
|
||||
assert foo == foo
|
||||
|
||||
@@ -213,7 +220,7 @@ def test_i_can_compare_concept_with_sophisticated_circular_reference():
|
||||
foo = Concept("foo")
|
||||
bar = Concept("foo", body=foo)
|
||||
baz = Concept("foo", body=bar)
|
||||
foo.metadata.body = baz
|
||||
foo.get_metadata().body = baz
|
||||
|
||||
assert foo != bar
|
||||
|
||||
@@ -222,12 +229,14 @@ def test_i_can_compare_concept_with_sophisticated_circular_reference_in_other_me
|
||||
foo = Concept("foo")
|
||||
bar = Concept("foo", pre=foo)
|
||||
baz = Concept("foo", pre=bar)
|
||||
foo.metadata.pre = baz
|
||||
foo.get_metadata().pre = baz
|
||||
|
||||
assert foo != bar
|
||||
|
||||
|
||||
def test_i_can_update_from():
|
||||
ALL_ATTRIBUTES.clear()
|
||||
|
||||
template = Concept(
|
||||
name="concept_name",
|
||||
is_builtin=True,
|
||||
@@ -242,6 +251,9 @@ def test_i_can_update_from():
|
||||
desc="this this the desc",
|
||||
id="123456"
|
||||
).def_var("a", "10").def_var("b", None)
|
||||
template.add_prop(BuiltinConcepts.ISA, Concept("foo").def_var("x", "value_x"))
|
||||
template.add_prop(BuiltinConcepts.HASA, Concept("bar").def_var("x", "value_x"))
|
||||
template.set_prop(BuiltinConcepts.AUTO_EVAL, True)
|
||||
|
||||
# make sure origin is preserved
|
||||
setattr(template, "##origin##", "digest")
|
||||
@@ -257,3 +269,28 @@ def test_i_can_update_from():
|
||||
|
||||
assert concept == template
|
||||
assert getattr(concept, "##origin##") == "digest"
|
||||
|
||||
|
||||
def test_i_can_manage_concepts_attributes():
|
||||
ALL_ATTRIBUTES.clear()
|
||||
concept = Concept("foo")
|
||||
assert get_concept_attrs(concept) == []
|
||||
assert concept.values() == {}
|
||||
|
||||
concept.set_value(ConceptParts.BODY, "I have a body!")
|
||||
assert concept.values() == {"#body#": "I have a body!"}
|
||||
|
||||
|
||||
def test_attributes_are_generated_once_for_all():
|
||||
ALL_ATTRIBUTES.clear()
|
||||
concept = Concept("foo")
|
||||
concept.get_metadata().id = "id"
|
||||
|
||||
concept.set_value("key1", "value1")
|
||||
concept.set_value("key2", "value2")
|
||||
assert get_concept_attrs(concept) == ["key1", "key2"]
|
||||
assert concept.values() == {"key1": "value1", "key2": "value2"}
|
||||
|
||||
concept.set_value("key3", "value3") # too late for it !
|
||||
assert get_concept_attrs(concept) == ["key1", "key2"]
|
||||
assert concept.values() == {"key1": "value1", "key2": "value2"}
|
||||
|
||||
Reference in New Issue
Block a user