summaryrefslogtreecommitdiff
path: root/tools/python-yasm/tests/test_symrec.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/python-yasm/tests/test_symrec.py')
-rw-r--r--tools/python-yasm/tests/test_symrec.py81
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)