]> code.delx.au - pymsnt/blobdiff - src/tlib/msn/test_msnw.py
New msnw can send messages
[pymsnt] / src / tlib / msn / test_msnw.py
index 165e93285fca820d660e4c8e737c2eb488d5ed6c..0dfd652049c9f88cfcc7e28fa918cbfa5f67d4c6 100644 (file)
@@ -20,7 +20,7 @@ import msnw
 
 # Settings
 TIMEOUT = 30.0 # Connection timeout in seconds
-LOGGING = True
+LOGGING = False
 USER1 = "messengertest1@hotmail.com"
 PASS1 = "hellohello"
 USER2 = "messengertest2@hotmail.com"
@@ -66,6 +66,8 @@ class MSNConnection(msnw.MSNConnection):
        def __init__(self, username, password, ident, testCase):
                msnw.MSNConnection.__init__(self, username, password, ident)
                self.testCase = testCase
+               self.message = None
+               self.contactAdded = None
 
        def listSynchronized(self):
                # Now we're fully connected
@@ -76,46 +78,41 @@ class MSNConnection(msnw.MSNConnection):
                self.message = (userHandle, text)
        
        def contactAddedMe(self, userHandle):
-               print "CONTACT ADDED ME"
                self.contactAdded = userHandle
        
 
-class BasicConnection(unittest.TestCase):
-       def failed(self, why):
-               self.done = True
-       
-       def testConnect(self):
-               self.done = False
-               self.timeout = reactor.callLater(TIMEOUT, self.failed)
-               self.user = MSNConnection(USER1, PASS1, "user", self)
-               while not self.done:
-                       reactor.iterate(0.1)
-               self.failUnless((self.done == "SYNCED"), "Failed to connect to MSN servers.")
-               self.user.logOut()
-               reactor.iterate(0.1)
-               try:
-                       self.timeout.cancel()
-               except (error.AlreadyCancelled, error.AlreadyCalled):
-                       pass
-
-class BasicTests(unittest.TestCase):
+class TestsUtil:
        def setUp(self):
                self.failure = None
                self.timeout = None
                self.done = False
-               
-               # Login both accounts
+               self.user1 = None
+               self.user2 = None
+
+       def tearDown(self):
+               if self.user1:
+                       self.user1.logOut()
+                       reactor.iterate(0.1)
+               if self.user2:
+                       self.user2.logOut()
+                       reactor.iterate(0.1)
+       
+       def doLogins(self, both=True):
+               # Connect two accounts
                self.user1 = MSNConnection(USER1, PASS1, "user1", self)
-               self.loop("Logging in.", cond="SYNCED")
-               self.user2 = MSNConnection(USER2, PASS2, "user2", self)
-               self.loop("Logging in.", cond="SYNCED")
+               self.loop("Logging in user1.", cond="SYNCED")
+               if both:
+                       self.user2 = MSNConnection(USER2, PASS2, "user2", self)
+                       self.loop("Logging in user2.", cond="SYNCED")
 
+       def doPurgeContacts(self):
                # Purge both contact lists
                clearAccount(self.user1).addCallback(self.cb)
                self.loop("Purging user1 contact list.")
                clearAccount(self.user2).addCallback(self.cb)
                self.loop("Purging user2 contact list.")
 
+       def doAddContacts(self):
                # Adding users to each other's lists
                self.user1.addContact(msnw.FORWARD_LIST, USER2).addCallback(self.cb)
                self.loop("Adding user2 to user1's forward list.")
@@ -127,15 +124,9 @@ class BasicTests(unittest.TestCase):
                self.loop("Adding user1 to user2's allow list.")
 
                # Check the contacts have seen each other
-               self.loop("Waiting...")
+               reactor.iterate(0.1) # One last chance to notice each other
                self.failUnless((self.user1.contactAdded == USER2 and self.user2.contactAdded == USER1), "Contacts can't see each other.")
 
-
-       def tearDown(self):
-               self.user1.logOut()
-               self.user2.logOut()
-               reactor.iterate(0.1)
-       
        def cb(self, ignored=None):
                self.done = True
 
@@ -158,10 +149,33 @@ class BasicTests(unittest.TestCase):
                self.failure = why
                self.done = True
 
-       # The tests!
+# The tests!
+
+class BasicTests(unittest.TestCase, TestsUtil):
+       def setUp(self):
+               TestsUtil.setUp(self)
+
+       def tearDown(self):
+               TestsUtil.tearDown(self)
+
+       def testConnect(self):
+               self.doLogins(both=False)
+       
+       def testPurgeContacts(self):
+               self.doLogins()
+               self.doPurgeContacts()
+       
+       def testAddContacts(self):
+               self.doLogins()
+               self.doPurgeContacts()
+               self.doAddContacts()
+
        def testMessageExchange(self):
+               self.doLogins()
+               self.doPurgeContacts()
+               self.doAddContacts()
                self.user1.sendMessage(USER2, "Hi user2")
-               self.loop("Timeout exchanging message 1.", cond="GOTMESSAGE")
-               self.failUnless((self.user1.message == (USER2, "Hi user1")), "Failed to transfer message 1.")
+               self.loop("Timeout exchanging message.", cond="GOTMESSAGE")
+               self.failUnless((self.user2.message == (USER1, "Hi user2")), "Failed to transfer message.")