first passed component tests

Make the first component tests pass by correcting XMLDummyServer and xmldiff (in tests/utils.py)

darcs-hash:20051127155735-684f5-82dc72186ef66c59ac9671f83d1ec90ea66ee5b1.gz
This commit is contained in:
dax
2005-11-27 16:57:35 +01:00
parent 9fa2df5563
commit 9f15a1a0d6
7 changed files with 207 additions and 206 deletions

View File

@@ -123,12 +123,12 @@ class DBMStorage(Storage):
print >>sys.stderr, e print >>sys.stderr, e
def __setitem__(self, pk_tuple, obj): def __setitem__(self, pk_tuple, obj):
print "Adding " + "#".join(pk_tuple) + " = " + str(obj) # print "Adding " + "#".join(pk_tuple) + " = " + str(obj)
self.__str_registered["#".join(pk_tuple)] = str(obj) self.__str_registered["#".join(pk_tuple)] = str(obj)
self.sync() self.sync()
def __getitem__(self, pk_tuple): def __getitem__(self, pk_tuple):
print "Getting " + "#".join(pk_tuple) # print "Getting " + "#".join(pk_tuple)
if len(pk_tuple) == self.nb_pk_fields: if len(pk_tuple) == self.nb_pk_fields:
return mailconnection_factory.str_to_mail_connection(self.__str_registered["#".join(pk_tuple)]) return mailconnection_factory.str_to_mail_connection(self.__str_registered["#".join(pk_tuple)])
else: else:
@@ -139,7 +139,7 @@ class DBMStorage(Storage):
if regexp.search(key)] if regexp.search(key)]
def __delitem__(self, pk_tuple): def __delitem__(self, pk_tuple):
print "Deleting " + "#".join(pk_tuple) # print "Deleting " + "#".join(pk_tuple)
del self.__str_registered["#".join(pk_tuple)] del self.__str_registered["#".join(pk_tuple)]
self.sync() self.sync()

View File

@@ -59,7 +59,7 @@ if __name__ == '__main__':
component2_suite, \ component2_suite, \
storage_suite, \ storage_suite, \
dbmstorage_suite)) dbmstorage_suite))
test_support.run_suite(component_suite) test_support.run_suite(component2_suite)
# coverage.stop() # coverage.stop()
# coverage.analysis(jabber.mailconnection_factory) # coverage.analysis(jabber.mailconnection_factory)

View File

@@ -24,6 +24,7 @@ import sys
import time import time
import traceback import traceback
import re import re
import os
import socket import socket
import types import types
import select import select
@@ -114,7 +115,7 @@ class XMLDummyServer(DummyServer):
# received size is based on the expected size in self.queries # received size is based on the expected size in self.queries
data = conn.recv(1024 + len(self.queries[idx])) data = conn.recv(1024 + len(self.queries[idx]))
if data: if data:
print "-----------RECEIVE " + data # print "-----------RECEIVE " + data
r = self._reader.feed(data) r = self._reader.feed(data)
except: except:
type, value, stack = sys.exc_info() type, value, stack = sys.exc_info()
@@ -131,7 +132,7 @@ class XMLDummyServer(DummyServer):
else: else:
response = self.responses[idx] response = self.responses[idx]
if response is not None: if response is not None:
print >>sys.stderr, '---------SENDING : ', response # print >>sys.stderr, '---------SENDING : ', response
conn.send(response) conn.send(response)
conn.close() conn.close()
except: except:
@@ -144,14 +145,20 @@ class XMLDummyServer(DummyServer):
result = True result = True
queries_len = len(self.queries) queries_len = len(self.queries)
if queries_len == len(self.real_queries): if queries_len == len(self.real_queries):
full_real_queries = ""
full_recv_queries = ""
for idx in range(queries_len): for idx in range(queries_len):
real_query = xml.dom.minidom.parseString(self.real_queries[idx]) full_real_queries += self.real_queries[idx].rstrip(os.linesep)
recv_query = xml.dom.minidom.parseString(self.queries[idx]) full_recv_queries += self.queries[idx].rstrip(os.linesep)
if not utils.xmldiff(real_query, recv_query): # Do not receive it but add it so that xml parsing can succeed
result = False full_real_queries += "</stream:stream>"
print >>sys.stderr, "Unexpected query :\n" + \ real_query = xml.dom.minidom.parseString(full_real_queries)
"Expected query : _" + self.queries[idx] + "_\n" + \ recv_query = xml.dom.minidom.parseString(full_recv_queries)
"Receive query : _" + self.real_queries[idx] + "_\n" try:
utils.xmldiff(real_query, recv_query)
except Exception, msg:
result = False
print >>sys.stderr, msg
else: else:
result = False result = False
print >>sys.stderr, "Expected " + str(queries_len) + \ print >>sys.stderr, "Expected " + str(queries_len) + \

View File

@@ -70,11 +70,8 @@ class MailComponent_TestCase_Basic(unittest.TestCase):
def test_run(self): def test_run(self):
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \ self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
"<handshake/></stream:stream>"] "<handshake/></stream:stream>"]
# TODO : concatenate all queries to parse xml
self.server.queries = ["<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' to='jmc.localhost' version='1.0'>", \ self.server.queries = ["<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' to='jmc.localhost' version='1.0'>", \
"<handshake></handshake>"] "<handshake>[0-9abcdef]*</handshake></stream:stream>"]
# self.server.queries = ["<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\s<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
# "<handshake>\s*</handshake>"]
self.mail_component.run(1) self.mail_component.run(1)
self.failUnless(self.server.verify_queries()) self.failUnless(self.server.verify_queries())
# TODO : more assertion # TODO : more assertion
@@ -82,9 +79,9 @@ class MailComponent_TestCase_Basic(unittest.TestCase):
class MailComponent_TestCase_NoReg(unittest.TestCase): class MailComponent_TestCase_NoReg(unittest.TestCase):
def setUp(self): def setUp(self):
self.handler = TestStreamHandler() self.handler = TestStreamHandler()
logger = logging.getLogger() # logger = logging.getLogger()
logger.addHandler(logging.StreamHandler()) # logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG) # logger.setLevel(logging.DEBUG)
self.mail_component = MailComponent(Config("tests/jmc-test.xml")) self.mail_component = MailComponent(Config("tests/jmc-test.xml"))
self.server = dummy_server.XMLDummyServer("localhost", 55555, None, self.handler) self.server = dummy_server.XMLDummyServer("localhost", 55555, None, self.handler)
thread.start_new_thread(self.server.serve, ()) thread.start_new_thread(self.server.serve, ())
@@ -97,10 +94,10 @@ class MailComponent_TestCase_NoReg(unittest.TestCase):
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \ self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
"<handshake/><iq type='get' to='jmc.localhost' id='aabca'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>", \ "<handshake/><iq type='get' to='jmc.localhost' id='aabca'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>", \
"</stream:stream>"] "</stream:stream>"]
self.server.queries = ["<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\s?" + \ self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \ "<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
"<handshake>\s*</handshake>", \ "<handshake>[0-9abcdef]*</handshake>", \
"<iq from=\"jmc.localhost\" type=\"result\" id=\"aabca\"><query xmlns=\"http://jabber.org/protocol/disco\#info\"><feature var=\"jabber:iq:version\"/><feature var=\"jabber:iq:register\"/><identity name=\"Jabber Mail Component\" category=\"headline\" type=\"mail\"/></query></iq>"] "<iq from=\"jmc.localhost\" type=\"result\" id=\"aabca\"><query xmlns=\"http://jabber.org/protocol/disco#info\"><feature var=\"jabber:iq:version\"/><feature var=\"jabber:iq:register\"/><identity name=\"Jabber Mail Component\" category=\"headline\" type=\"mail\"/></query></iq></stream:stream>"]
self.mail_component.run(1) self.mail_component.run(1)
self.failUnless(self.server.verify_queries()) self.failUnless(self.server.verify_queries())
@@ -109,102 +106,103 @@ class MailComponent_TestCase_NoReg(unittest.TestCase):
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \ self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
"<handshake/><iq type='get' to='jmc.localhost' from='test@localhost/test' id='aad9a'><query xmlns='jabber:iq:register'/></iq>", \ "<handshake/><iq type='get' to='jmc.localhost' from='test@localhost/test' id='aad9a'><query xmlns='jabber:iq:register'/></iq>", \
"</stream:stream>"] "</stream:stream>"]
self.server.queries = ["<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\s?" + \ self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \ "<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
"<handshake>\s*</handshake>", \ "<handshake>[0-9abcdef]*</handshake>", \
"<iq from=\"jmc.localhost\" to=\"test@localhost/test\" type=\"result\" id=\"aad9a\">\s?" + \ "<iq from=\"jmc.localhost\" to=\"test@localhost/test\" type=\"result\" id=\"aad9a\">" + \
"<query xmlns=\"jabber:iq:register\">\s?" + \ "<query xmlns=\"jabber:iq:register\">" + \
"<x xmlns=\"jabber:x:data\">\s?" + \ "<x xmlns=\"jabber:x:data\">" + \
"<title>Jabber Mail connection registration</title>\s?" + \ "<title>Jabber Mail connection registration</title>" + \
"<instructions>Enter anything below</instructions>\s?" + \ "<instructions>Enter anything below</instructions>" + \
"<field type=\"text-single\" label=\"Connection name\" var=\"name\"/>\s?" + \ "<field type=\"text-single\" label=\"Connection name\" var=\"name\"/>" + \
"<field type=\"text-single\" label=\"Login\" var=\"login\"/>\s?" + \ "<field type=\"text-single\" label=\"Login\" var=\"login\"/>" + \
"<field type=\"text-private\" label=\"Password\" var=\"password\"/>\s?" + \ "<field type=\"text-private\" label=\"Password\" var=\"password\"/>" + \
"<field type=\"text-single\" label=\"Host\" var=\"host\"/>\s?" + \ "<field type=\"text-single\" label=\"Host\" var=\"host\"/>" + \
"<field type=\"text-single\" label=\"Port\" var=\"port\"/>\s?" + \ "<field type=\"text-single\" label=\"Port\" var=\"port\"/>" + \
"<field type=\"list-single\" label=\"Mailbox type\" var=\"type\">\s?" + \ "<field type=\"list-single\" label=\"Mailbox type\" var=\"type\">" + \
"<option label=\"POP3\">\s?" + \ "<option label=\"POP3\">" + \
"<value>pop3</value>\s?" + \ "<value>pop3</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"POP3S\">\s?" + \ "<option label=\"POP3S\">" + \
"<value>pop3s</value>\s?" + \ "<value>pop3s</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"IMAP\">\s?" + \ "<option label=\"IMAP\">" + \
"<value>imap</value>\s?" + \ "<value>imap</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"IMAPS\">\s?" + \ "<option label=\"IMAPS\">" + \
"<value>imaps</value>\s?" + \ "<value>imaps</value>" + \
"</option>\s?" + \ "</option>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"text-single\" label=\"Mailbox (IMAP)\" var=\"mailbox\">\s?" + \ "<field type=\"text-single\" label=\"Mailbox (IMAP)\" var=\"mailbox\">" + \
"<value>INBOX</value>\s?" + \ "<value>INBOX</value>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"list-single\" label=\"Action when state is 'Free For Chat'\" var=\"ffc_action\">\s?" + \ "<field type=\"list-single\" label=\"Action when state is 'Free For Chat'\" var=\"ffc_action\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"<option label=\"Do nothing\">\s?" + \ "<option label=\"Do nothing\">" + \
"<value>0</value>\s?" + \ "<value>0</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Send mail digest\">\s?" + \ "<option label=\"Send mail digest\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Retrieve mail\">\s?" + \ "<option label=\"Retrieve mail\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"</option>\s?" + \ "</option>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"list-single\" label=\"Action when state is 'Online'\" var=\"online_action\">\s?" + \ "<field type=\"list-single\" label=\"Action when state is 'Online'\" var=\"online_action\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"<option label=\"Do nothing\">\s?" + \ "<option label=\"Do nothing\">" + \
"<value>0</value>\s?" + \ "<value>0</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Send mail digest\">\s?" + \ "<option label=\"Send mail digest\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Retrieve mail\">\s?" + \ "<option label=\"Retrieve mail\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"</option>\s?" + \ "</option>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"list-single\" label=\"Action when state is 'Away'\" var=\"away_action\">\s?" + \ "<field type=\"list-single\" label=\"Action when state is 'Away'\" var=\"away_action\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"<option label=\"Do nothing\">\s?" + \ "<option label=\"Do nothing\">" + \
"<value>0</value>\s?" + \ "<value>0</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Send mail digest\">\s?" + \ "<option label=\"Send mail digest\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Retrieve mail\">\s?" + \ "<option label=\"Retrieve mail\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"</option>\s?" + \ "</option>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"list-single\" label=\"Action when state is 'Extended Away'\" var=\"ea_action\">\s?" + \ "<field type=\"list-single\" label=\"Action when state is 'Extended Away'\" var=\"ea_action\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"<option label=\"Do nothing\">\s?" + \ "<option label=\"Do nothing\">" + \
"<value>0</value>\s?" + \ "<value>0</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Send mail digest\">\s?" + \ "<option label=\"Send mail digest\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Retrieve mail\">\s?" + \ "<option label=\"Retrieve mail\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"</option>\s?" + \ "</option>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"list-single\" label=\"Action when state is 'Offline'\" var=\"offline_action\">\s?" + \ "<field type=\"list-single\" label=\"Action when state is 'Offline'\" var=\"offline_action\">" + \
"<value>0</value>\s?" + \ "<value>0</value>" + \
"<option label=\"Do nothing\">\s?" + \ "<option label=\"Do nothing\">" + \
"<value>0</value>\s?" + \ "<value>0</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Send mail digest\">\s?" + \ "<option label=\"Send mail digest\">" + \
"<value>1</value>\s?" + \ "<value>1</value>" + \
"</option>\s?" + \ "</option>" + \
"<option label=\"Retrieve mail\">\s?" + \ "<option label=\"Retrieve mail\">" + \
"<value>2</value>\s?" + \ "<value>2</value>" + \
"</option>\s?" + \ "</option>" + \
"</field>\s?" + \ "</field>" + \
"<field type=\"text-single\" label=\"Mail check interval (in minutes)\" var=\"interval\">\s?" + \ "<field type=\"text-single\" label=\"Mail check interval (in minutes)\" var=\"interval\">" + \
"<value>5</value>\s?" + \ "<value>5</value>" + \
"</field>\s?" + \ "</field>" + \
"</x>\s?" + \ "</x>" + \
"</query>\s?" + \ "</query>" + \
"</iq>"] "</iq>" + \
"</stream:stream>"]
self.mail_component.run(1) self.mail_component.run(1)
self.failUnless(self.server.verify_queries()) self.failUnless(self.server.verify_queries())

View File

@@ -213,7 +213,7 @@ class IMAPConnection_TestCase(unittest.TestCase):
if core: if core:
core(self) core(self)
self.imap_connection.disconnect() self.imap_connection.disconnect()
self.failUnless(self.server.verify_queries("Sended queries does not match expected queries.")) self.failUnless(self.server.verify_queries())
return inner return inner
test_connection = make_test() test_connection = make_test()

View File

@@ -22,6 +22,7 @@
import unittest import unittest
from jabber.mailconnection_factory import * from jabber.mailconnection_factory import *
from jabber import mailconnection
class MailConnectionFactory_TestCase(unittest.TestCase): class MailConnectionFactory_TestCase(unittest.TestCase):
def test_new_mail_connection_imap(self): def test_new_mail_connection_imap(self):
@@ -41,56 +42,56 @@ class MailConnectionFactory_TestCase(unittest.TestCase):
self.assertEquals(mc, mc) self.assertEquals(mc, mc)
def test_str_to_mail_connection_imap(self): def test_str_to_mail_connection_imap(self):
mc = str_to_mail_connection("imap#login#passwd#host#193#nothing#nothing#nothing#nothing#retrieve#INBOX") mc = str_to_mail_connection("imap#login#passwd#host#193#0#0#0#1#2#INBOX")
self.assertEquals(mc.get_type(), "imap") self.assertEquals(mc.get_type(), "imap")
self.assertEquals(mc.login, "login") self.assertEquals(mc.login, "login")
self.assertEquals(mc.password, "passwd") self.assertEquals(mc.password, "passwd")
self.assertEquals(mc.host, "host") self.assertEquals(mc.host, "host")
self.assertEquals(mc.port, 193) self.assertEquals(mc.port, 193)
self.assertEquals(mc.mailbox, "INBOX") self.assertEquals(mc.mailbox, "INBOX")
self.assertEquals(mc.ffc_action, "nothing") self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.online_action, "nothing") self.assertEquals(mc.online_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.away_action, "nothing") self.assertEquals(mc.away_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.ea_action, "nothing") self.assertEquals(mc.ea_action, mailconnection.DIGEST)
self.assertEquals(mc.offline_action, "retrieve") self.assertEquals(mc.offline_action, mailconnection.RETRIEVE)
def test_str_to_mail_connection_imaps(self): def test_str_to_mail_connection_imaps(self):
mc = str_to_mail_connection("imaps#login#passwd#host#993#nothing#nothing#nothing#nothing#retrieve#INBOX.SubDir") mc = str_to_mail_connection("imaps#login#passwd#host#993#0#0#0#1#2#INBOX.SubDir")
self.assertEquals(mc.get_type(), "imaps") self.assertEquals(mc.get_type(), "imaps")
self.assertEquals(mc.login, "login") self.assertEquals(mc.login, "login")
self.assertEquals(mc.password, "passwd") self.assertEquals(mc.password, "passwd")
self.assertEquals(mc.host, "host") self.assertEquals(mc.host, "host")
self.assertEquals(mc.port, 993) self.assertEquals(mc.port, 993)
self.assertEquals(mc.mailbox, "INBOX.SubDir") self.assertEquals(mc.mailbox, "INBOX.SubDir")
self.assertEquals(mc.ffc_action, "nothing") self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.online_action, "nothing") self.assertEquals(mc.online_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.away_action, "nothing") self.assertEquals(mc.away_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.ea_action, "nothing") self.assertEquals(mc.ea_action, mailconnection.DIGEST)
self.assertEquals(mc.offline_action, "retrieve") self.assertEquals(mc.offline_action, mailconnection.RETRIEVE)
def test_str_to_mail_connection_pop3(self): def test_str_to_mail_connection_pop3(self):
mc = str_to_mail_connection("pop3#login#passwd#host#110#nothing#nothing#nothing#nothing#retrieve") mc = str_to_mail_connection("pop3#login#passwd#host#110#0#0#0#1#2")
self.assertEquals(mc.get_type(), "pop3") self.assertEquals(mc.get_type(), "pop3")
self.assertEquals(mc.login, "login") self.assertEquals(mc.login, "login")
self.assertEquals(mc.password, "passwd") self.assertEquals(mc.password, "passwd")
self.assertEquals(mc.host, "host") self.assertEquals(mc.host, "host")
self.assertEquals(mc.port, 110) self.assertEquals(mc.port, 110)
self.assertEquals(mc.ffc_action, "nothing") self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.online_action, "nothing") self.assertEquals(mc.online_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.away_action, "nothing") self.assertEquals(mc.away_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.ea_action, "nothing") self.assertEquals(mc.ea_action, mailconnection.DIGEST)
self.assertEquals(mc.offline_action, "retrieve") self.assertEquals(mc.offline_action, mailconnection.RETRIEVE)
def test_str_to_mail_connection_pop3s(self): def test_str_to_mail_connection_pop3s(self):
mc = str_to_mail_connection("pop3s#login#passwd#host#995#nothing#nothing#nothing#nothing#retrieve") mc = str_to_mail_connection("pop3s#login#passwd#host#995#0#0#0#1#2")
self.assertEquals(mc.get_type(), "pop3s") self.assertEquals(mc.get_type(), "pop3s")
self.assertEquals(mc.login, "login") self.assertEquals(mc.login, "login")
self.assertEquals(mc.password, "passwd") self.assertEquals(mc.password, "passwd")
self.assertEquals(mc.host, "host") self.assertEquals(mc.host, "host")
self.assertEquals(mc.port, 995) self.assertEquals(mc.port, 995)
self.assertEquals(mc.ffc_action, "nothing") self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.online_action, "nothing") self.assertEquals(mc.online_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.away_action, "nothing") self.assertEquals(mc.away_action, mailconnection.DO_NOTHING)
self.assertEquals(mc.ea_action, "nothing") self.assertEquals(mc.ea_action, mailconnection.DIGEST)
self.assertEquals(mc.offline_action, "retrieve") self.assertEquals(mc.offline_action, mailconnection.RETRIEVE)

View File

@@ -21,80 +21,75 @@
## ##
import xml.dom.minidom import xml.dom.minidom
import re
#document = "<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>"
# document = """\
# <slideshow attr='value'>
# <title>Demo slideshow</title>
# <slide><title>Slide title</title>
# <point>This is a demo</point>
# <point>Of a program for processing slides</point>
# </slide>
# <slide><title>Another demo slide</title>
# <point>It is important</point>
# <point>To have more than</point>
# <point>one slide</point>
# </slide>
# </slideshow>
# """
# document1 = """\
# <slideshow attr='value'>
# <title>Demo slideshow</title>
# <slide><title>Slide title</title>
# <point>This is a demo</point>
# <point>Of a program for processing slides</point>
# </slide>
# <slide><title>Another demo slide</title>
# <point>It is important1</point>
# <point>To have more than</point>
# <point>one slide</point>
# </slide>
# </slideshow>
# """
#dom = xml.dom.minidom.parseString(document)
#dom1 = xml.dom.minidom.parseString(document)
# def getText(nodelist):
# rc = ""
# for node in nodelist:
# if node.nodeType == node.TEXT_NODE:
# rc = rc + node.data
# return rc
def xmldiff(node1, node2): def xmldiff(node1, node2):
if node1.nodeType == node1.TEXT_NODE: if node1.nodeType == node1.TEXT_NODE:
if not node2.nodeType == node2.TEXT_NODE \ if not node2.nodeType == node2.TEXT_NODE \
or node1.data != node2.data: or re.compile(node2.data + "$").match(node1.data) is None:
return False raise Exception("data in text node " + node1.data + " does not match " + node2.data)
elif node1.nodeType == node1.DOCUMENT_NODE: elif node1.nodeType == node1.DOCUMENT_NODE:
if not node2.nodeType == node2.DOCUMENT_NODE: if not node2.nodeType == node2.DOCUMENT_NODE:
return False raise Exception("node1 is Document but not node2 (" + node2.nodeType + ")")
elif node1.tagName != node2.tagName: elif node1.tagName != node2.tagName:
return False raise Exception("Different tag name : " + node1.tagName + " != " + node2.tagName)
else: else:
for attr in node1._get_attributes().keys(): for attr in node1._get_attributes().keys():
if not node2.hasAttribute(attr) \ if not node2.hasAttribute(attr) \
or node1.getAttribute(attr) != node2.getAttribute(attr): or node1.getAttribute(attr) != node2.getAttribute(attr):
return False raise Exception("(" + node1.tagName + ") Different attributes : " + node1.getAttribute(attr) + " != " + node2.getAttribute(attr))
if len(node1.childNodes) != len(node2.childNodes):
raise Exception("(" + node1.tagName + ") Different children number : " + str(len(node1.childNodes)) + " != " + str(len(node2.childNodes)))
for i in range(len(node1.childNodes)): for i in range(len(node1.childNodes)):
if not xmldiff(node1.childNodes[i], node2.childNodes[i]): xmldiff(node1.childNodes[i], node2.childNodes[i])
return False
return True
#print xmldiff(dom, dom1) # def xmldiff(events1, events2):
# for (event1, node1) in events1:
# (event2, node2) = events2.next()
# print event1 + " " + str(node1)
# if not (event1 == event2) or not xml_diff_nodes(node1, node2):
# return False
# return True
# def nodediff(node1, node2): if __name__ == "__main__":
# if not node1.name == node2.name: document1 = """\
# return False <slideshow attr='value'>
# for properties in node1.properties: <title>Demo slideshow</title>
# if node2.hasAttribute(attr): <slide><title>Slide title</title>
<point>This is a demo</point>
<point>Of a program for processing slides</point>
</slide>
<slide><title>Another demo slide</title>
<point>It is important</point>
<point>To have more than</point>
<point>one slide</point>
</slide>
</slideshow>
"""
document2 = """\
<slideshow attr='value'>
<title>Demo slideshow</title>
<slide><title>Slide title</title>
<point>This is a demo</point>
<point>Of a program for processing slides</point>
</slide>
<slide><title>Another demo slide</title>
<point>It is important</point>
<point>To have more than</point>
<point>one slide</point>
</slide>
</slideshow>
"""
dom1 = xml.dom.minidom.parseString(document1)
dom2 = xml.dom.minidom.parseString(document2)
try:
xmldiff(dom1, dom2)
except Exception, msg:
print msg
# def xmldiff(xpath, node1, node2):
# if not nodediff(node1, node2):
# return False
# for child in node1.children: