forked from trueagi-io/hyperon-experimental
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_sexparser.py
46 lines (37 loc) · 1.53 KB
/
test_sexparser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import unittest
from hyperon import *
class HyperonTestCase(unittest.TestCase):
def __init__(self, methodName):
super().__init__(methodName)
def testParseToSyntaxNodes(self):
parser = SExprParser("(+ one \"one\")")
syntax_node = parser.parse_to_syntax_tree()
leaf_node_list = syntax_node.unroll()
leaf_node_types = []
for node in leaf_node_list:
leaf_node_types.append(node.get_type())
expected_node_types = [SyntaxNodeType.OPEN_PAREN,
SyntaxNodeType.WORD_TOKEN,
SyntaxNodeType.WHITESPACE,
SyntaxNodeType.WORD_TOKEN,
SyntaxNodeType.WHITESPACE,
SyntaxNodeType.STRING_TOKEN,
SyntaxNodeType.CLOSE_PAREN]
self.assertEqual(leaf_node_types, expected_node_types)
def testParseErr(self):
tokenizer = Tokenizer()
parser = SExprParser("(+ one \"one")
try:
parsed_atom = parser.parse(tokenizer)
self.assertTrue(False, "Parse error expected")
except SyntaxError as e:
self.assertEqual(e.args[0], 'Unclosed String Literal')
parser = SExprParser("(+ one \"one\"")
try:
parsed_atom = parser.parse(tokenizer)
self.assertTrue(False, "Parse error expected")
except SyntaxError as e:
self.assertEqual(e.args[0], 'Unexpected end of expression')
parser = SExprParser("(+ one \"one\")")
parsed_atom = parser.parse(tokenizer)
self.assertTrue(parsed_atom is not None)