def test8_getArgsBadListener(self):
     self.assertRaises(ListenerMismatchError, getArgs, 1)
     try:
         getArgs(1)
     except ListenerMismatchError as exc:
         msg = 'Listener "int" (from module "__main__") inadequate: type "int" not supported'
         self.assertEqual(str(exc), msg)
 def test8_getArgsBadListener(self):
     self.assertRaises(ListenerInadequate, getArgs, 1)
     try:
         getArgs(1)
     except ListenerInadequate, exc:
         msg = 'Listener "int" (from module "__main__") inadequate: type "int" not supported'
         self.assertEqual(str(exc), msg)
    def test4_WantTopic(self):
        # Test the correct determination of whether want topic
        # auto-passed during sendMessage() calls.

        # first check proper breakdown of listener args:
        def listener(a, b=1):
            pass

        argsInfo = CallArgsInfo(listener, 0)
        self.assertEqual(None, argsInfo.autoTopicArgName)

        msgTopic = 'auto'

        class MyListener:
            def method(self, a, b=1, auto=Listener.AUTO_TOPIC):
                pass

        listener = MyListener()
        argsInfo = getArgs(listener.method)
        self.assertEqual(msgTopic, argsInfo.autoTopicArgName)
        self.assertEqual(['a', 'b'], argsInfo.allParams)

        # now some white box testing of validator that makes use of args info:
        def checkWantTopic(validate, listener, wantTopicAsArg=None):
            argsInfo = getArgs(listener)
            self.assertEqual(argsInfo.autoTopicArgName, wantTopicAsArg)
            validate(listener)

        validator = ListenerValidator([], ['a'])
        validate = validator.validate

        def noWant(a=1):
            pass

        def want1(a=1, auto=Listener.AUTO_TOPIC):
            pass

        checkWantTopic(validate, noWant)
        checkWantTopic(validate, want1, msgTopic)

        validator = ListenerValidator(['a'], ['b'])
        validate = validator.validate

        def noWant2(a, b=1):
            pass

        def want2(a, auto=Listener.AUTO_TOPIC, b=1):
            pass

        checkWantTopic(validate, noWant2)
        checkWantTopic(validate, want2, msgTopic)

        # topic that has Listener.AUTO_TOPIC as an arg rather than kwarg
        validator = ListenerValidator([msgTopic], ['b'])
        validate = validator.validate

        def noWant3(auto, b=1):
            pass

        checkWantTopic(validate, noWant3)
    def test4_WantTopic(self):
        # Test the correct determination of whether want topic
        # auto-passed during sendMessage() calls.
    
        # first check proper breakdown of listener args:
        def listener(a, b=1):
            pass
        argsInfo = CallArgsInfo(listener, 0)
        self.assertEqual(None, argsInfo.autoTopicArgName )
    
        msgTopic = 'auto'
        class MyListener:
            def method(self, a, b=1, auto=Listener.AUTO_TOPIC):
                pass
        listener = MyListener()
        argsInfo = getArgs(listener.method)
        self.assertEqual(msgTopic, argsInfo.autoTopicArgName )
        self.assertEqual(['a','b'], argsInfo.allParams )
    
        # now some white box testing of validator that makes use of args info:
        def checkWantTopic(validate, listener, wantTopicAsArg=None):
            argsInfo = getArgs(listener)
            self.assertEqual(argsInfo.autoTopicArgName, wantTopicAsArg)
            validate(listener)
                    
        validator = ListenerValidator([], ['a'])
        validate = validator.validate
        def noWant(a=1):
            pass
        def want1(a=1, auto=Listener.AUTO_TOPIC):
            pass
        checkWantTopic(validate, noWant)
        checkWantTopic(validate, want1, msgTopic)
        
        validator = ListenerValidator(['a'], ['b'])
        validate = validator.validate

        def noWant2(a, b=1):
            pass
        def want2(a, auto=Listener.AUTO_TOPIC, b=1):
            pass
        checkWantTopic(validate, noWant2)
        checkWantTopic(validate, want2, msgTopic)
    
        # topic that has Listener.AUTO_TOPIC as an arg rather than kwarg
        validator = ListenerValidator([msgTopic], ['b'])
        validate = validator.validate
        def noWant3(auto, b=1):
            pass
        checkWantTopic(validate, noWant3)
 def checkWantTopic(validate, listener, wantTopicAsArg=None):
     argsInfo = getArgs(listener)
     self.assertEqual(argsInfo.autoTopicArgName, wantTopicAsArg)
     validate(listener)
 def checkWantTopic(validate, listener, wantTopicAsArg=None):
     argsInfo = getArgs(listener)
     self.assertEqual(argsInfo.autoTopicArgName, wantTopicAsArg)
     validate(listener)