diff options
Diffstat (limited to 'tools/python-yasm/tests/test_symrec.py')
-rw-r--r-- | tools/python-yasm/tests/test_symrec.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/tools/python-yasm/tests/test_symrec.py b/tools/python-yasm/tests/test_symrec.py new file mode 100644 index 00000000..a228eebd --- /dev/null +++ b/tools/python-yasm/tests/test_symrec.py @@ -0,0 +1,81 @@ +# $Id$ +from tests import TestCase, add +from yasm import SymbolTable, Expression, YasmError + +class TSymbolTable(TestCase): + def setUp(self): + self.symtab = SymbolTable() + + def test_keys(self): + self.assertEquals(len(self.symtab.keys()), 0) + self.symtab.declare("foo", None, 0) + keys = self.symtab.keys() + self.assertEquals(len(keys), 1) + self.assertEquals(keys[0], "foo") + + def test_contains(self): + self.assert_("foo" not in self.symtab) + self.symtab.declare("foo", None, 0) + self.assert_("foo" in self.symtab) + + def test_exception(self): + expr = Expression('+', 1, 2) + self.symtab.define_equ("foo", expr, 0) + self.assertRaises(YasmError, self.symtab.define_equ, "foo", expr, 0) + self.symtab.define_equ("bar", expr, 0) # cleared + self.assertRaises(YasmError, self.symtab.define_special, "bar", + 'global') + + def test_iters(self): + tab = self.symtab + tab.declare("foo", None, 0) + tab.declare("bar", None, 0) + tab.declare("baz", None, 0) + + # while ordering is not known, it must be consistent + self.assertEquals(list(tab.keys()), list(tab.iterkeys())) + self.assertEquals(list(tab.values()), list(tab.itervalues())) + self.assertEquals(list(tab.items()), list(tab.iteritems())) + self.assertEquals(list(tab.iteritems()), zip(tab.keys(), tab.values())) + +add(TSymbolTable) + +class TSymbolAttr(TestCase): + def setUp(self): + self.symtab = SymbolTable() + self.declsym = self.symtab.declare("foo", None, 0) + + def test_visibility(self): + sym = self.symtab.declare("local1", None, 0) + self.assertEquals(sym.visibility, set()) + sym = self.symtab.declare("local2", '', 0) + self.assertEquals(sym.visibility, set()) + sym = self.symtab.declare("local3", 'local', 0) + self.assertEquals(sym.visibility, set()) + sym = self.symtab.declare("global", 'global', 0) + self.assertEquals(sym.visibility, set(['global'])) + sym = self.symtab.declare("common", 'common', 0) + self.assertEquals(sym.visibility, set(['common'])) + sym = self.symtab.declare("extern", 'extern', 0) + self.assertEquals(sym.visibility, set(['extern'])) + sym = self.symtab.declare("dlocal", 'dlocal', 0) + self.assertEquals(sym.visibility, set(['dlocal'])) + + self.assertRaises(ValueError, + lambda: self.symtab.declare("extern2", 'foo', 0)) + def test_name(self): + self.assertEquals(self.declsym.name, "foo") + + def test_equ(self): + self.assertRaises(AttributeError, lambda: self.declsym.equ) + + def test_label(self): + self.assertRaises(AttributeError, lambda: self.declsym.label) + + def test_is_special(self): + self.assertEquals(self.declsym.is_special, False) + + def test_is_curpos(self): + self.assertEquals(self.declsym.is_curpos, False) + +add(TSymbolAttr) |