Fixed #18 : Parsing and evaluating Python
This commit is contained in:
@@ -4,9 +4,9 @@ from base import BaseTest
|
||||
from common.global_symbols import NotFound, NotInit
|
||||
from conftest import NewOntology
|
||||
from core.BuiltinConcepts import BuiltinConcepts
|
||||
from core.ErrorContext import ErrorContext
|
||||
from core.concept import ConceptMetadata
|
||||
from core.services.SheerkaConceptManager import ConceptAlreadyDefined, ConceptManager
|
||||
from core.error import ErrorContext
|
||||
from services.SheerkaConceptManager import ConceptAlreadyDefined, ConceptManager
|
||||
from helpers import get_metadata
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ class TestConceptManager(BaseTest):
|
||||
"""
|
||||
metadata = get_metadata("foo", "body")
|
||||
digest = service.compute_metadata_digest(metadata)
|
||||
assert digest == "21a1c2f420da62f4dc60f600c95b19dd9527b19dd28fd38e17f5c0e28963d176"
|
||||
assert digest == "7c0f1708968e0312be622950d3f21d588f718f7ba568054ece64d077052a6476"
|
||||
|
||||
another_metadata = get_metadata("foo", "body")
|
||||
other_digest = service.compute_metadata_digest(another_metadata)
|
||||
@@ -86,7 +86,7 @@ class TestConceptManager(BaseTest):
|
||||
assert metadata.name == "name"
|
||||
assert metadata.key == "name"
|
||||
assert metadata.body == "body"
|
||||
assert metadata.digest == "eb0620bd4a317af8a403c0ae1e185a528f9b58f8b0878d990e62278f89cf10d5"
|
||||
assert metadata.digest == "c75faa4efbc9ef9dbc5174c52786d5b066e2ece41486b81c27336e292917fecb"
|
||||
assert metadata.all_attrs == ('#where#', '#pre#', '#post#', '#body#', '#ret#')
|
||||
|
||||
# is sorted in db
|
||||
@@ -117,6 +117,11 @@ class TestConceptManager(BaseTest):
|
||||
res = service.define_new_concept(context, "name", body="body")
|
||||
assert res.status is True
|
||||
|
||||
def test_i_cannot_get_by_if_concept_does_not_exist(self, service):
|
||||
assert service.get_by_id("unresolved_id") == NotFound
|
||||
assert service.get_by_name("unresolved name") == NotFound
|
||||
assert service.get_by_key("unresolved_hash") == NotFound
|
||||
|
||||
def test_i_can_get_a_newly_created_concept(self, context, service):
|
||||
with NewOntology(context, "test_i_can_get_a_newly_created_concept"):
|
||||
res = service.define_new_concept(context, "name", body="body")
|
||||
@@ -141,6 +146,19 @@ class TestConceptManager(BaseTest):
|
||||
assert foo.var1 == "value1"
|
||||
assert foo.var2 == "value2"
|
||||
|
||||
def test_i_can_manage_when_concepts_with_the_same_name(self, context, service):
|
||||
with NewOntology(context, "test_i_can_manage_when_concepts_with_the_same_name"):
|
||||
service.define_new_concept(context, "foo", body="body1")
|
||||
service.define_new_concept(context, "foo", body="body2")
|
||||
|
||||
concepts = service.newn("foo")
|
||||
|
||||
assert len(concepts) == 2
|
||||
assert concepts[0].name == "foo"
|
||||
assert concepts[0].get_metadata().body == "body1"
|
||||
assert concepts[1].name == "foo"
|
||||
assert concepts[1].get_metadata().body == "body2"
|
||||
|
||||
def test_i_can_instantiate_a_new_concept_by_its_id(self, context, service):
|
||||
with NewOntology(context, "test_i_can_instantiate_a_new_concept_by_its_id"):
|
||||
res = service.define_new_concept(context, "foo", variables=[("var1", None), ("var2", None)])
|
||||
@@ -184,3 +202,64 @@ class TestConceptManager(BaseTest):
|
||||
|
||||
context.sheerka.om.pop_ontology(context)
|
||||
assert service.get_by_id(res.value.metadata.id) is NotFound
|
||||
|
||||
def test_i_can_new(self, context, service):
|
||||
with NewOntology(context, "test_i_can_new"):
|
||||
res = service.define_new_concept(context, "name", body="body", variables=[("my_var", None)])
|
||||
assert res.status
|
||||
metadata = res.value.metadata
|
||||
|
||||
# I can create a new concept
|
||||
res = service.new(metadata, my_var="my_var_value")
|
||||
assert res.id == metadata.id
|
||||
assert res.my_var == "my_var_value"
|
||||
|
||||
res = service.new((metadata.name, None), my_var="my_var_value")
|
||||
assert res.id == metadata.id
|
||||
assert res.my_var == "my_var_value"
|
||||
|
||||
res = service.new((None, metadata.id), my_var="my_var_value")
|
||||
assert res.id == metadata.id
|
||||
assert res.my_var == "my_var_value"
|
||||
|
||||
res = service.new("c:name:", my_var="my_var_value")
|
||||
assert res.id == metadata.id
|
||||
assert res.my_var == "my_var_value"
|
||||
|
||||
res = service.new("c:#1001:", my_var="my_var_value")
|
||||
assert res.id == metadata.id
|
||||
assert res.my_var == "my_var_value"
|
||||
|
||||
res = service.new("c:name#1001:", my_var="my_var_value")
|
||||
assert res.id == metadata.id
|
||||
assert res.my_var == "my_var_value"
|
||||
|
||||
# cannot new using id
|
||||
assert service.new(f"1001").name == BuiltinConcepts.UNKNOWN_CONCEPT
|
||||
|
||||
def test_id_is_used_when_name_and_id_are_provided(self, context, service):
|
||||
with NewOntology(context, "test_id_is_used_when_name_and_id_are_provided"):
|
||||
res = service.define_new_concept(context, "name", body="body1")
|
||||
metadata = res.value.metadata
|
||||
service.define_new_concept(context, "name", body="body2")
|
||||
|
||||
assert service.new((metadata.name, metadata.id)).id == metadata.id
|
||||
|
||||
def test_unknown_concept_is_return_if_the_identifier_is_not_found(self, service):
|
||||
assert service.new("unknown").name == BuiltinConcepts.UNKNOWN_CONCEPT
|
||||
|
||||
def test_can_get_all_concepts(self, context, service):
|
||||
with NewOntology(context, "test_i_can_new"):
|
||||
service.define_new_concept(context, "foo")
|
||||
service.define_new_concept(context, "bar")
|
||||
context.sheerka.om.push_ontology("another ontology")
|
||||
service.define_new_concept(context, "baz")
|
||||
service.define_new_concept(context, "qux")
|
||||
|
||||
all_concepts = service.get_all_concepts()
|
||||
assert [c.name for c in all_concepts if not c.is_builtin] == ["foo", "bar", "baz", "qux"]
|
||||
|
||||
# sanity check. Concepts are discarded when ontology is popped
|
||||
context.sheerka.om.pop_ontology(context)
|
||||
all_concepts = service.get_all_concepts()
|
||||
assert [c.name for c in all_concepts if not c.is_builtin] == ["foo", "bar"]
|
||||
|
||||
Reference in New Issue
Block a user