220 lines
6.3 KiB
Python
220 lines
6.3 KiB
Python
# tests for the miscellaneous functions scattered throughout src/gajim.py
|
|
import unittest
|
|
|
|
import lib
|
|
lib.setup_env()
|
|
|
|
from common import gajim
|
|
from gajim import Interface
|
|
|
|
from mocks import *
|
|
gajim.logger = MockLogger()
|
|
|
|
Interface()
|
|
|
|
class TestMiscInterface(unittest.TestCase):
|
|
|
|
def test_links_regexp_entire(self):
|
|
def assert_matches_all(str):
|
|
m = gajim.interface.basic_pattern_re.match(str)
|
|
|
|
# the match should equal the string
|
|
str_span = (0, len(str))
|
|
self.assertEqual(m.span(), str_span)
|
|
|
|
# these entire strings should be parsed as links
|
|
assert_matches_all('http://google.com/')
|
|
assert_matches_all('http://google.com')
|
|
assert_matches_all('http://www.google.ca/search?q=xmpp')
|
|
|
|
assert_matches_all('http://tools.ietf.org/html/draft-saintandre-rfc3920bis-05#section-12.3')
|
|
|
|
assert_matches_all('http://en.wikipedia.org/wiki/Protocol_(computing)')
|
|
assert_matches_all('http://en.wikipedia.org/wiki/Protocol_%28computing%29')
|
|
|
|
assert_matches_all('mailto:test@example.org')
|
|
|
|
assert_matches_all('xmpp:example-node@example.com')
|
|
assert_matches_all('xmpp:example-node@example.com/some-resource')
|
|
assert_matches_all('xmpp:example-node@example.com?message')
|
|
assert_matches_all('xmpp://guest@example.com/support@example.com?message')
|
|
|
|
import time
|
|
from data import *
|
|
|
|
import roster_window
|
|
|
|
import notify
|
|
|
|
class TestStatusChange(unittest.TestCase):
|
|
'''tests gajim.py's incredibly complex handle_event_notify'''
|
|
|
|
def setUp(self):
|
|
gajim.interface.roster = roster_window.RosterWindow()
|
|
|
|
for acc in contacts:
|
|
gajim.connections[acc] = MockConnection(acc)
|
|
|
|
gajim.interface.roster.fill_contacts_and_groups_dicts(contacts[acc], acc)
|
|
gajim.interface.roster.add_account(acc)
|
|
gajim.interface.roster.add_account_contacts(acc)
|
|
|
|
self.assertEqual(0, len(notify.notifications))
|
|
|
|
def tearDown(self):
|
|
gajim.interface.roster.model.clear()
|
|
|
|
for acc in contacts:
|
|
gajim.contacts.clear_contacts(acc)
|
|
|
|
del gajim.interface.roster
|
|
|
|
notify.notifications = []
|
|
|
|
def contact_comes_online(self, account, jid, resource, prio):
|
|
'''a remote contact comes online'''
|
|
gajim.interface.handle_event_notify(account, (jid, 'online', "I'm back!",
|
|
resource, prio, None, time.time(), None))
|
|
|
|
contact = None
|
|
for c in gajim.contacts.get_contacts(account, jid):
|
|
if c.resource == resource:
|
|
contact = c
|
|
break
|
|
|
|
self.assertEqual('online', contact.show)
|
|
self.assertEqual("I'm back!", contact.status)
|
|
self.assertEqual(prio, contact.priority)
|
|
|
|
# the most recent notification is that the contact connected
|
|
self.assertEqual('contact_connected', notify.notifications[-1][0])
|
|
|
|
def contact_goes_offline(self, account, jid, resource, prio,
|
|
still_exists = True):
|
|
'''a remote contact goes offline.'''
|
|
gajim.interface.handle_event_notify(account, (jid, 'offline', 'Goodbye!',
|
|
resource, prio, None, time.time(), None))
|
|
|
|
contact = None
|
|
for c in gajim.contacts.get_contacts(account, jid):
|
|
if c.resource == resource:
|
|
contact = c
|
|
break
|
|
|
|
if not still_exists:
|
|
self.assert_(contact is None)
|
|
return
|
|
|
|
self.assertEqual('offline', contact.show)
|
|
self.assertEqual('Goodbye!', contact.status)
|
|
self.assertEqual(prio, contact.priority)
|
|
|
|
self.assertEqual('contact_disconnected', notify.notifications[-1][0])
|
|
|
|
def user_starts_chatting(self, jid, account, resource=None):
|
|
'''the user opens a chat window and starts talking'''
|
|
ctrl = MockChatControl(jid, account)
|
|
win = MockWindow()
|
|
win.new_tab(ctrl)
|
|
gajim.interface.msg_win_mgr._windows['test'] = win
|
|
|
|
if resource:
|
|
jid = jid + '/' + resource
|
|
|
|
# a basic session is started
|
|
session = gajim.connections[account1].make_new_session(jid,
|
|
'01234567890abcdef', cls=MockSession)
|
|
ctrl.set_session(session)
|
|
|
|
return ctrl
|
|
|
|
def user_starts_esession(self, jid, resource, account):
|
|
'''the user opens a chat window and starts an encrypted session'''
|
|
ctrl = self.user_starts_chatting(jid, account, resource)
|
|
ctrl.session.status = 'active'
|
|
ctrl.session.enable_encryption = True
|
|
|
|
return ctrl
|
|
|
|
def test_contact_comes_online(self):
|
|
jid = 'default1@gajim.org'
|
|
|
|
# contact is offline initially
|
|
contacts = gajim.contacts.get_contacts(account1, jid)
|
|
self.assertEqual(1, len(contacts))
|
|
self.assertEqual('offline', contacts[0].show)
|
|
self.assertEqual('', contacts[0].status)
|
|
|
|
self.contact_comes_online(account1, jid, 'lowprio', 1)
|
|
|
|
def test_contact_goes_offline(self):
|
|
jid = 'default1@gajim.org'
|
|
|
|
self.contact_comes_online(account1, jid, 'lowprio', 1)
|
|
|
|
ctrl = self.user_starts_chatting(jid, account1)
|
|
orig_sess = ctrl.session
|
|
|
|
self.contact_goes_offline(account1, jid, 'lowprio', 1)
|
|
|
|
# session hasn't changed since we were talking to the bare jid
|
|
self.assertEqual(orig_sess, ctrl.session)
|
|
|
|
def test_two_resources_higher_comes_online(self):
|
|
jid = 'default1@gajim.org'
|
|
|
|
self.contact_comes_online(account1, jid, 'lowprio', 1)
|
|
|
|
ctrl = self.user_starts_chatting(jid, account1)
|
|
|
|
self.contact_comes_online(account1, jid, 'highprio', 50)
|
|
|
|
# old session was dropped
|
|
self.assertEqual(None, ctrl.session)
|
|
|
|
def test_two_resources_higher_goes_offline(self):
|
|
jid = 'default1@gajim.org'
|
|
|
|
self.contact_comes_online(account1, jid, 'lowprio', 1)
|
|
self.contact_comes_online(account1, jid, 'highprio', 50)
|
|
|
|
ctrl = self.user_starts_chatting(jid, account1)
|
|
|
|
self.contact_goes_offline(account1, jid, 'highprio', 50, still_exists = False)
|
|
|
|
# old session was dropped
|
|
self.assertEqual(None, ctrl.session)
|
|
|
|
def test_two_resources_higher_comes_online_with_esession(self):
|
|
jid = 'default1@gajim.org'
|
|
|
|
self.contact_comes_online(account1, jid, 'lowprio', 1)
|
|
|
|
ctrl = self.user_starts_esession(jid, 'lowprio', account1)
|
|
|
|
self.contact_comes_online(account1, jid, 'highprio', 50)
|
|
|
|
# session was associated with the low priority full jid, so it should
|
|
# have been removed from the control
|
|
self.assertEqual(None, ctrl.session)
|
|
|
|
def test_two_resources_higher_goes_offline_with_esession(self):
|
|
jid = 'default1@gajim.org'
|
|
|
|
self.contact_comes_online(account1, jid, 'lowprio', 1)
|
|
self.contact_comes_online(account1, jid, 'highprio', 50)
|
|
|
|
ctrl = self.user_starts_esession(jid, 'highprio', account1)
|
|
|
|
self.contact_goes_offline(account1, jid, 'highprio', 50,
|
|
still_exists=False)
|
|
|
|
# session was associated with the high priority full jid, so it should
|
|
# have been removed from the control
|
|
self.assertEqual(None, ctrl.session)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|
|
|
|
# vim: se ts=3:
|