ii-vision/symbol_table_test.py
kris c139e8bf1b Write symbol table to .dbg file when assembling player
Add explicit end_{opcode} labels to mark (1 byte past) end of opcode.

Rename op_done to op_terminate to match opcode name in encoder.

Extract symbol table in encoder and use this to populate the opcode
start/end addresses.
2019-02-27 12:10:14 +00:00

32 lines
1.0 KiB
Python

import io
import unittest
import symbol_table
DEBUG_FILE = """
version major=2,minor=0
info csym=0,file=594,lib=1,line=420,mod=2,scope=2,seg=7,span=255,sym=151,type=5
file id=0,name="main.s",size=10297,mtime=0x5C766D92,mod=0
file id=1,name="/usr/local/share/cc65/asminc/apple2.inc",size=2348,mtime=0x5AA06221,mod=0
file id=2,name="apple2/exehdr.s",size=1848,mtime=0x5AA06221,mod=1
lib id=0,name="/usr/local/share/cc65/lib/apple2enh.lib"
line id=0,file=1,line=60
[...]
sym id=8,name="op_ack",addrsize=absolute,scope=1,def=195,val=0x81FA,type=lab
sym id=10,name="op_tick",addrsize=absolute,scope=1,def=6,val=0x81EE,type=lab
sym id=12,name="rle1",addrsize=absolute,scope=1,def=135,ref=373,val=0x81D6,type=lab
[...]
"""
class TestSymbolTable(unittest.TestCase):
def test_parse(self):
dbg = io.StringIO(DEBUG_FILE)
s = symbol_table.SymbolTable()
self.assertEqual({"\"op_ack\"", "\"op_tick\"", "\"rle1\""},
s.parse(dbg).keys())
if __name__ == '__main__':
unittest.main()