Exemplo n.º 1
0
    def setUp(self):
        registry.clear()
        session_registry.clear()
        self._create_simple_plugins()
        self._create_session_plugins()
        self.resolver = PluginResolver()

        self.jid = '[email protected]/Adium1234'
        self.conn_data = {'message': {'from': self.jid}}
        self._redis.hdel(self.jid, 'plugin')
Exemplo n.º 2
0
 def setUp(self):
     # unregister the original plugin
     self.stackoverflow_regex, self.stackoverflow_function = registry.plugins['stackoverflow']
     registry.unregister('stackoverflow')
     
     # register a mock, just to verify if the regex is working
     self.called = False
     self.tag = None
     self.limit = 50
     
     def stackoverflow_mock(conn, limit=None, tag=None, **kw):
         self.called = True
         self.tag = tag
         self.limit = int(limit) if limit else 50
     
     registry.register('stackoverflow', self.stackoverflow_regex, stackoverflow_mock)
     
     self.resolver = PluginResolver()
Exemplo n.º 3
0
class RegexTestCase(unittest.TestCase):
    
    def setUp(self):
        # unregister the original plugin
        self.stackoverflow_regex, self.stackoverflow_function = registry.plugins['stackoverflow']
        registry.unregister('stackoverflow')
        
        # register a mock, just to verify if the regex is working
        self.called = False
        self.tag = None
        self.limit = 50
        
        def stackoverflow_mock(conn, limit=None, tag=None, **kw):
            self.called = True
            self.tag = tag
            self.limit = int(limit) if limit else 50
        
        registry.register('stackoverflow', self.stackoverflow_regex, stackoverflow_mock)
        
        self.resolver = PluginResolver()

    def tearDown(self):
        # undo de mock
        registry.unregister('stackoverflow')
        registry.register('stackoverflow', self.stackoverflow_regex, self.stackoverflow_function)
    
    def test_simple(self):
        self.resolver.resolve('stackoverflow', {})
        
        assert self.called
        assert self.tag is None
        assert 50 == self.limit
    
    def test_tagged(self):
        self.resolver.resolve('stackoverflow python', {})
        
        assert self.called
        assert 'python' == self.tag
        assert 50 == self.limit
        
    def test_limit(self):
        self.resolver.resolve('stackoverflow 10', {})
        
        assert self.called
        assert self.tag is None
        assert 10 == self.limit
    
    def test_tagged_limit(self):
        self.resolver.resolve('stackoverflow 15 python', {})
        
        assert self.called
        assert 'python' == self.tag
        assert 15 == self.limit
    
    def test_different_tags(self):
        tags = ('c++', 'c#', 'regular-language', 'asp.net', '.net', 'actionscript-3')
        
        for tag in tags:
            self.resolver.resolve('stackoverflow ' + tag, {})
            
            assert self.called
            assert tag == self.tag
            
            self.called, self.tag = False, None
Exemplo n.º 4
0
class PluginResolverTest(unittest.TestCase):

    def __init__(self, *args, **kwargs):
        unittest.TestCase.__init__(self, *args, **kwargs)
        self._redis = redis.Redis(host=config.REDIS_HOST, port=config.REDIS_PORT, db=config.REDIS_DB)
        self.session = SessionPersistence()

    def setUp(self):
        registry.clear()
        session_registry.clear()
        self._create_simple_plugins()
        self._create_session_plugins()
        self.resolver = PluginResolver()

        self.jid = '[email protected]/Adium1234'
        self.conn_data = {'message': {'from': self.jid}}
        self._redis.hdel(self.jid, 'plugin')
    
    def _create_simple_plugins(self):
        @plugin(r"age (\d+)")
        def age(conn, num):
            return "you're %d" % int(num)
        
        @plugin(r"aged ?(\d+)?")
        def age_default(conn, num=0):
            return "you're %s" % num
        
        @plugin(r"hello ?(?P<name>\w+)?")
        def hello(conn, name='stranger'):
            return "hello %s" % name
    
    def _create_session_plugins(self):
        @session_plugin
        class Translate(object):
            name = 'translate'
            regex = '^translate (?P<from_lang>[\w-]+) (?P<to_lang>[\w-]+)$'

            def begin(self, conn, from_lang, to_lang):
                return u"translating from %s to %s" % (from_lang, to_lang)
            
            def handle(self, conn, msg):
                return u"qual o seu nome?"
    
        @session_plugin
        class Twitter(object):
            name = 'twitter'
            regex = '^twitter (\w+)$'

            def begin(self, conn, account):
                return u"twitter account @%s" % account
            
            def handle(self, conn, msg):
                return u"message: '%s'" % msg
        
        @session_plugin
        class DummyPlugin(object):
            name = 'dummy'
            regex = r'^dummy$'

            def begin(self, conn):
                return u"I'm dummy"
            
            def handle(self, conn, msg):
                return "message: '%s'" % msg

    # tests for simple plugins

    def test_dont_find_plugin(self):
        try:
            self.resolver.resolve("no plugin", self.conn_data)
            assert 0, u"Shouldn't find any plugin"
        except LookupError:
            pass
    
    def test_call_plugin_with_args(self):
        result = self.resolver.resolve('age 22', self.conn_data)
        
        assert u"you're 22" == result

    def test_call_plugin_with_kwargs(self):
        result = self.resolver.resolve('hello igor', self.conn_data)
        
        assert u"hello igor" == result
    
    def test_call_plugin_with_kwargs_and_default_argument(self):
        result = self.resolver.resolve('hello', self.conn_data)
        
        assert u"hello stranger" == result

    def test_call_plugin_with_args_and_default_argument(self):
        result = self.resolver.resolve('aged', self.conn_data)

        assert "you're 0"
   
    # tests for session plugins

    def test_session_plugin_with_kwargs(self):
        result = self.resolver.resolve('twitter igorsobreira', self.conn_data)

        assert u"twitter account @igorsobreira" == result

    def test_session_plugin_with_kwargs(self):
        result = self.resolver.resolve('translate en pt-br', self.conn_data)

        assert u"translating from en to pt-br" == result
   
    def test_session_plugin_with_no_arguments(self):
        result = self.resolver.resolve('dummy', self.conn_data)

        assert u"I'm dummy" == result
    
    def test_session_plugin_starts_session(self):
        result = self.resolver.resolve('translate en pt-br', self.conn_data)

        assert u"translating from en to pt-br" == result
        assert u"translate" == self._redis.hget(self.jid, 'plugin')
    
    def test_trying_to_start_two_sessions_closes_the_first_one(self):
        result = self.resolver.resolve('translate en pt-br', self.conn_data)
        
        assert u"translating from en to pt-br" == result
        assert u"translate" == self._redis.hget(self.jid, 'plugin')
        
        result = self.resolver.resolve('twitter igorsobreira', self.conn_data)
        
        assert u"twitter account @igorsobreira" == result
        assert u"twitter" == self._redis.hget(self.jid, 'plugin')
    
    def test_handle_session_plugin_should_call_handle_method_of_the_plugin(self):
        self.resolver.resolve('translate en pt-br', self.conn_data)
        result = self.resolver.handle_session_plugin("what's your name?", self.conn_data)

        assert u"qual o seu nome?" == result