def test_packGrammar(): gramSpec = ['<rule> exported = action;'] parser = GramParser(gramSpec) parser.doParse() parser.checkForErrors() assert parser.knownRules == {'rule': 1} assert parser.knownWords == {'action': 1} assert parser.exportRules == {'rule': 1} assert parser.ruleDefines == {'rule': [('word', 1)]} assert packGrammar(parser) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00' \ b'\x01\x00\x00\x00rule\x00\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00' \ b'\x00\x01\x00\x00\x00action\x00\x00\x03\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00' \ b'\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00'
def test_packGrammar_with_list(): gramSpec = ['<ruleList> exported = action {List};'] parser = GramParser(gramSpec) parser.doParse() parser.checkForErrors() assert parser.knownRules == {'ruleList': 1} assert parser.knownLists == {'List': 1} assert parser.knownWords == {'action': 1} assert parser.exportRules == {'ruleList': 1} assert parser.ruleDefines == {'ruleList': [('start', 1), ('word', 1), ('list', 1), ('end', 1)]} assert packGrammar(parser) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x14\x00\x00\x00\x14\x00\x00\x00' \ b'\x01\x00\x00\x00ruleList\x00\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00\x10\x00' \ b'\x00\x00\x01\x00\x00\x00List\x00\x00\x00\x00\x02\x00\x00\x00\x10\x00\x00\x00\x10' \ b'\x00\x00\x00\x01\x00\x00\x00action\x00\x00\x03\x00\x00\x00(\x00\x00\x00(\x00\x00' \ b'\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00' \ b'\x00\x06\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00'
def test_packGrammar_with_two_lines(): gramSpec = ['<rule1> exported = action one;', '<rule2> exported = action two;'] parser = GramParser(gramSpec) parser.doParse() parser.checkForErrors() assert parser.knownRules == {'rule1': 1, 'rule2': 2} assert parser.knownWords == {'action': 1, 'one': 2, 'two': 3} assert parser.exportRules == {'rule1': 1, 'rule2': 2} assert parser.ruleDefines == {'rule1': [('start', 1), ('word', 1), ('word', 2), ('end', 1)], 'rule2': [('start', 1), ('word', 1), ('word', 3), ('end', 1)]} assert packGrammar(parser) == b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x01' \ b'\x00\x00\x00rule1\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00rule2\x00\x00\x00' \ b'\x02\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00action\x00\x00\x0c' \ b'\x00\x00\x00\x02\x00\x00\x00one\x00\x0c\x00\x00\x00\x03\x00\x00\x00two\x00\x03' \ b'\x00\x00\x00P\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00' \ b'\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x02\x00' \ b'\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00' \ b'\x00\x03\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x02\x00\x00' \ b'\x00\x01\x00\x00\x00'