Пример #1
0
 def testInitLoaded(self):
     ob = ldmud.Object("/master")
     self.assertIsNotNone(ob)
     self.assertTrue(ob)
     self.assertIn("master", repr(ob))
     self.assertEqual(ob, ldmud.Object("/master"))
     self.assertEqual(hash(ob), hash(ldmud.Object("/master")))
Пример #2
0
    def testDict(self):
        ob = ldmud.Object("/testob")
        ob.testvalue = "42"
        ob = None

        ob = ldmud.Object("/testob")
        self.assertEqual(ob.testvalue, "42")
        with self.assertRaises(AttributeError):
            ob.doesntExist
Пример #3
0
 def testInitLoad(self):
     oldob = ldmud.efuns.find_object("/testob")
     if oldob:
         ldmud.efuns.destruct(oldob)
     ob = ldmud.Object("/testob")
     self.assertIsNotNone(ob)
     self.assertEqual(ob.name, "/testob")
Пример #4
0
    def testVariableInfo(self):
        ob = ldmud.Object("/testob")
        self.assertIsNotNone(ob)

        self.assertTrue('testvar' in dir(ob.variables))
        self.assertTrue('testvar' in ob.variables.__dict__)

        var = ob.variables.testvar
        self.assertIsNotNone(var)
        self.assertEqual(var.name, "testvar")
        self.assertEqual(var.value, 42)
        self.assertSetEqual(set(var.type), set((
            int,
            float,
        )))
        self.assertEqual(var.flags, ldmud.VF_NOSAVE)
        self.assertEqual(var.visibility, ldmud.VIS_PROTECTED)
        self.assertTrue("testvar" in repr(var) and "testob" in repr(var))
        self.assertEqual(hash(var), hash(ob.variables.testvar))
        self.assertEqual(var, ob.variables.testvar)
        self.assertNotEqual(var, ob.variables.var_testob)

        var.value = 84
        self.assertEqual(var.value, 84)

        with self.assertRaises(TypeError):
            var.value = "42"
        self.assertEqual(var.value, 84)
Пример #5
0
    def testFunctionInfo(self):
        ob = ldmud.Object("/testob")
        self.assertIsNotNone(ob)

        self.assertTrue('testfun' in dir(ob.functions))
        self.assertTrue('testfun' in ob.functions.__dict__)

        fun = ob.functions.testfun
        self.assertIsNotNone(fun)
        self.assertEqual(fun.name, "testfun")
        self.assertEqual(fun.file_name, "/testob.c")
        self.assertGreater(fun.line_number, 0)
        self.assertEqual(fun.return_type, int)
        self.assertEqual(fun.flags, ldmud.LF_NOMASK)
        self.assertEqual(fun.visibility, ldmud.VIS_PROTECTED)
        self.assertTrue("testfun" in repr(fun) and "testob" in repr(fun))
        self.assertEqual(hash(fun), hash(ob.functions.testfun))
        self.assertEqual(fun, ob.functions.testfun)
        self.assertNotEqual(fun, ob.functions.fun_testob)

        args = fun.arguments
        self.assertEqual(len(args), 2)
        self.assertEqual(args[0].position, 1)
        self.assertSetEqual(set(args[0].type), set((
            int,
            float,
        )))
        self.assertEqual(args[1].position, 2)
        self.assertEqual(args[1].flags, ldmud.LA_VARARGS)
        self.assertEqual(args[1].type, ldmud.Array)

        self.assertEqual(fun(10, "A", "B", "C"), 3)
Пример #6
0
    def testDestructedFunctionAndVariable(self):
        ob = ldmud.Object("/testob")
        lfun = ob.functions.testfun
        var = ob.variables.testvar

        ldmud.efuns.destruct(ob)
        self.assertFalse(lfun)
        self.assertFalse(var)
Пример #7
0
 def testMaster(self):
     ob = ldmud.Object("/master")
     self.assertEqual(ob, ldmud.get_master())
Пример #8
0
 def testInitNonExisting(self):
     with self.assertRaises(RuntimeError):
         ob = ldmud.Object("/imnotthere")
Пример #9
0
 def testInitLoaded(self):
     ob = ldmud.Object("/master")
     self.assertIsNotNone(ob)
Пример #10
0
 def testDestructed(self):
     ob = ldmud.Object("/testob")
     ldmud.efuns.destruct(ob)
     self.assertFalse(ob)
Пример #11
0
 def setUp(self):
     self.ob = ldmud.Object("/testob")
     self.lwob = ldmud.LWObject("/testob")
Пример #12
0
 def testDestructedLfun(self):
     ob = ldmud.Object("/testob")
     c = ldmud.Closure(ob, "testfun", ob)
     self.assertTrue(c)
     ldmud.efuns.destruct(ob)
     self.assertFalse(c)
Пример #13
0
 def testInitLoaded(self):
     blueprint = ldmud.Object("/testob")
     lwob = ldmud.LWObject("/testob")
     self.assertIsNotNone(lwob)
     self.assertTrue(lwob)
     self.assertIn("testob", repr(lwob))
Пример #14
0
    async def process_message(self, msg):
        """
        Dispatch a single message.
        """
        if msg.msg_type == DBusMessage.MessageType.METHOD_RETURN:
            serial = msg.header.get(DBusMessage.HeaderField.REPLY_SERIAL, 0)
            cb = self.callbacks.pop(serial, None)
            if cb:
                await cb(msg)
        elif msg.msg_type == DBusMessage.MessageType.ERROR:
            serial = msg.header.get(DBusMessage.HeaderField.REPLY_SERIAL, 0)
            cb = self.callbacks.pop(serial, None)
            if cb:
                await cb(msg)
        elif msg.msg_type == DBusMessage.MessageType.SIGNAL:
            for key, (rule, cbs) in listeners.items():
                if rule.matches(msg):
                    for cb in cbs:
                        cb(*msg.data)
        elif msg.msg_type == DBusMessage.MessageType.METHOD_CALL:
            try:
                path = msg.header.get(DBusMessage.HeaderField.PATH)
                if path not in objects:
                    raise DBusException(
                        "org.freedesktop.DBus.Error.UnknownObject",
                        "Path not found.")

                interface = msg.header.get(DBusMessage.HeaderField.INTERFACE)
                if interface not in objects[path][1]:
                    raise DBusException(
                        "org.freedesktop.DBus.Error.UnknownInterface",
                        "Interface not found.")

                ob = objects[path][0]
                lfunname = objects[path][1][interface] + msg.header.get(
                    DBusMessage.HeaderField.MEMBER, "")
                if not ob:
                    raise DBusException(
                        "org.freedesktop.DBus.Error.UnknownObject",
                        "Object has vanished.")
                if isinstance(ob, str):
                    ob = ldmud.Object(ob)
                lfun = getattr(ob.functions, lfunname, None)
                if not lfun:
                    raise DBusException(
                        "org.freedesktop.DBus.Error.UnknownMethod",
                        "Method not found.")
                result = lfun(*msg.data)

                if not (msg.flags & DBusMessage.Flags.NO_REPLY_EXPECTED):
                    self.send_message(
                        print_error_callback,
                        DBusMethodResult(
                            msg.header.get(DBusMessage.HeaderField.SENDER),
                            msg.serial, self.get_signature(result), [result]))
            except DBusException as ex:
                if not (msg.flags & DBusMessage.Flags.NO_REPLY_EXPECTED):
                    self.send_message(
                        print_error_callback,
                        DBusErrorMessage(
                            msg.header.get(DBusMessage.HeaderField.SENDER),
                            msg.serial, ex.name, ex.msg))
            except Exception as ex:
                if not (msg.flags & DBusMessage.Flags.NO_REPLY_EXPECTED):
                    self.send_message(
                        print_error_callback,
                        DBusErrorMessage(
                            msg.header.get(DBusMessage.HeaderField.SENDER),
                            msg.serial, "org.freedesktop.DBus.Error.Failed",
                            repr(ex)))