Added basic implentation for where
This commit is contained in:
+56
-20
@@ -1,10 +1,25 @@
|
||||
import core.utils
|
||||
import pytest
|
||||
from core.concept import ConceptParts
|
||||
from core.concept import ConceptParts, Concept
|
||||
|
||||
from core.tokenizer import Token, TokenKind
|
||||
|
||||
|
||||
def get_tokens(lst):
|
||||
res = []
|
||||
for e in lst:
|
||||
if e == " ":
|
||||
res.append(Token(TokenKind.WHITESPACE, " ", 0, 0, 0))
|
||||
elif e == "\n":
|
||||
res.append(Token(TokenKind.NEWLINE, "\n", 0, 0, 0))
|
||||
elif e == "<EOF>":
|
||||
res.append(Token(TokenKind.EOF, "\n", 0, 0, 0))
|
||||
else:
|
||||
res.append(Token(TokenKind.IDENTIFIER, e, 0, 0, 0))
|
||||
|
||||
return res
|
||||
|
||||
|
||||
@pytest.mark.parametrize("lst, as_string", [
|
||||
(None, "",),
|
||||
([], ""),
|
||||
@@ -136,18 +151,33 @@ def test_i_can_escape():
|
||||
(10, None, None),
|
||||
("", None, None),
|
||||
("xxx", None, None),
|
||||
(":c:", None, None),
|
||||
(":c:key", None, None),
|
||||
(":c:key:", "key", None),
|
||||
(":c:key:id", None, None),
|
||||
(":c:key:id:", "key", "id"),
|
||||
("c:", None, None),
|
||||
("c:key", None, None),
|
||||
("c:key:", "key", None),
|
||||
("c:key|id", None, None),
|
||||
("c:key|id:", "key", "id"),
|
||||
("c:|id:", None, "id"),
|
||||
("c:key|:", "key", None),
|
||||
])
|
||||
def test_i_can_decode_concept_repr(text, expected_key, expected_id):
|
||||
k, i = core.utils.decode_concept(text)
|
||||
def test_i_can_unstr_concept(text, expected_key, expected_id):
|
||||
k, i = core.utils.unstr_concept(text)
|
||||
assert k == expected_key
|
||||
assert i == expected_id
|
||||
|
||||
|
||||
def test_i_can_str_concept():
|
||||
assert core.utils.str_concept(("key", "id")) == "c:key|id:"
|
||||
assert core.utils.str_concept((None, "id")) == "c:|id:"
|
||||
assert core.utils.str_concept(("key", None)) == "c:key:"
|
||||
assert core.utils.str_concept((None, None)) == ""
|
||||
|
||||
concept = Concept("foo").init_key()
|
||||
assert core.utils.str_concept(concept) == "c:foo:"
|
||||
|
||||
concept.metadata.id = "1001"
|
||||
assert core.utils.str_concept(concept) == "c:foo|1001:"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("text, expected", [
|
||||
(None, None),
|
||||
(10, None),
|
||||
@@ -162,16 +192,22 @@ def test_i_can_decode_enum(text, expected):
|
||||
assert actual == expected
|
||||
|
||||
|
||||
def get_tokens(lst):
|
||||
res = []
|
||||
for e in lst:
|
||||
if e == " ":
|
||||
res.append(Token(TokenKind.WHITESPACE, " ", 0, 0, 0))
|
||||
elif e == "\n":
|
||||
res.append(Token(TokenKind.NEWLINE, "\n", 0, 0, 0))
|
||||
elif e == "<EOF>":
|
||||
res.append(Token(TokenKind.EOF, "\n", 0, 0, 0))
|
||||
else:
|
||||
res.append(Token(TokenKind.IDENTIFIER, e, 0, 0, 0))
|
||||
def test_encode_concept_key_id():
|
||||
assert core.utils.encode_concept(("key", "id")) == "__C__KEY_key__ID_id__C__"
|
||||
assert core.utils.encode_concept((None, "id")) == "__C__KEY_00None00__ID_id__C__"
|
||||
assert core.utils.encode_concept(("key", None)) == "__C__KEY_key__ID_00None00__C__"
|
||||
assert core.utils.encode_concept(("key", "id"), True) == "__C__USE_CONCEPT__KEY_key__ID_id__C__"
|
||||
assert core.utils.encode_concept(("k + y", "id")) == "__C__KEY_k000y__ID_id__C__"
|
||||
|
||||
return res
|
||||
concept = Concept("foo").init_key()
|
||||
assert core.utils.encode_concept(concept) == "__C__KEY_foo__ID_00None00__C__"
|
||||
|
||||
concept.metadata.id = "1001"
|
||||
assert core.utils.encode_concept(concept) == "__C__KEY_foo__ID_1001__C__"
|
||||
|
||||
|
||||
def test_decode_concept_key_id():
|
||||
assert core.utils.decode_concept("__C__KEY_key__ID_id__C__") == ("key", "id", False)
|
||||
assert core.utils.decode_concept("__C__KEY_00None00__ID_id__C__") == (None, "id", False)
|
||||
assert core.utils.decode_concept("__C__KEY_key__ID_00None00__C__") == ("key", None, False)
|
||||
assert core.utils.decode_concept("__C__USE_CONCEPT__KEY_key__ID_id__C__") == ("key", "id", True)
|
||||
|
||||
Reference in New Issue
Block a user