michael@0: #!/usr/bin/env python michael@0: # michael@0: # Any copyright is dedicated to the Public Domain. michael@0: # http://creativecommons.org/publicdomain/zero/1.0/ michael@0: # michael@0: # Unit tests for xpidl.py michael@0: michael@0: import mozunit michael@0: import unittest michael@0: import xpidl michael@0: michael@0: class TestParser(unittest.TestCase): michael@0: def setUp(self): michael@0: self.p = xpidl.IDLParser() michael@0: michael@0: def testEmpty(self): michael@0: i = self.p.parse("", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertEqual([], i.productions) michael@0: michael@0: def testForwardInterface(self): michael@0: i = self.p.parse("interface foo;", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Forward)) michael@0: self.assertEqual("foo", i.productions[0].name) michael@0: michael@0: def testInterface(self): michael@0: i = self.p.parse("[uuid(abc)] interface foo {};", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Interface)) michael@0: self.assertEqual("foo", i.productions[0].name) michael@0: michael@0: def testAttributes(self): michael@0: i = self.p.parse("[scriptable, builtinclass, function, deprecated, uuid(abc)] interface foo {};", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Interface)) michael@0: iface = i.productions[0] michael@0: self.assertEqual("foo", iface.name) michael@0: self.assertTrue(iface.attributes.scriptable) michael@0: self.assertTrue(iface.attributes.builtinclass) michael@0: self.assertTrue(iface.attributes.function) michael@0: self.assertTrue(iface.attributes.deprecated) michael@0: michael@0: i = self.p.parse("[noscript, uuid(abc)] interface foo {};", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Interface)) michael@0: iface = i.productions[0] michael@0: self.assertEqual("foo", iface.name) michael@0: self.assertTrue(iface.attributes.noscript) michael@0: michael@0: def testMethod(self): michael@0: i = self.p.parse("""[uuid(abc)] interface foo { michael@0: void bar(); michael@0: };""", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Interface)) michael@0: iface = i.productions[0] michael@0: m = iface.members[0] michael@0: self.assertTrue(isinstance(m, xpidl.Method)) michael@0: self.assertEqual("bar", m.name) michael@0: self.assertEqual("void", m.type) michael@0: michael@0: def testMethodParams(self): michael@0: i = self.p.parse("""[uuid(abc)] interface foo { michael@0: long bar(in long a, in float b, [array] in long c); michael@0: };""", filename='f') michael@0: i.resolve([], self.p) michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Interface)) michael@0: iface = i.productions[0] michael@0: m = iface.members[0] michael@0: self.assertTrue(isinstance(m, xpidl.Method)) michael@0: self.assertEqual("bar", m.name) michael@0: self.assertEqual("long", m.type) michael@0: self.assertEqual(3, len(m.params)) michael@0: self.assertEqual("long", m.params[0].type) michael@0: self.assertEqual("in", m.params[0].paramtype) michael@0: self.assertEqual("float", m.params[1].type) michael@0: self.assertEqual("in", m.params[1].paramtype) michael@0: self.assertEqual("long", m.params[2].type) michael@0: self.assertEqual("in", m.params[2].paramtype) michael@0: self.assertTrue(isinstance(m.params[2].realtype, xpidl.Array)) michael@0: self.assertEqual("long", m.params[2].realtype.type.name) michael@0: michael@0: def testAttribute(self): michael@0: i = self.p.parse("""[uuid(abc)] interface foo { michael@0: attribute long bar; michael@0: };""", filename='f') michael@0: self.assertTrue(isinstance(i, xpidl.IDL)) michael@0: self.assertTrue(isinstance(i.productions[0], xpidl.Interface)) michael@0: iface = i.productions[0] michael@0: a = iface.members[0] michael@0: self.assertTrue(isinstance(a, xpidl.Attribute)) michael@0: self.assertEqual("bar", a.name) michael@0: self.assertEqual("long", a.type) michael@0: michael@0: if __name__ == '__main__': michael@0: mozunit.main()