Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Jajcus/pyxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJacek Konieczny <jajcus@jajcus.net>2005-02-26 23:40:39 +0300
committerJacek Konieczny <jajcus@jajcus.net>2005-02-26 23:40:39 +0300
commitd4d274a696e2a78693acaf8c14d3edcc3fcf2fcf (patch)
tree8e4b8ee996f344aa4e91bde1a2981bd7ebaffc50 /tests
parent4f4fdbe3f78f9b89c13947da9c732e3be3238be7 (diff)
- better XML comparision
Diffstat (limited to 'tests')
-rwxr-xr-xtests/stream_reader.py70
1 files changed, 62 insertions, 8 deletions
diff --git a/tests/stream_reader.py b/tests/stream_reader.py
index 9608823..a3ea3bf 100755
--- a/tests/stream_reader.py
+++ b/tests/stream_reader.py
@@ -1,27 +1,83 @@
-#!/usr/bin/python
+#!/usr/bin/python -u
# -*- coding: UTF-8 -*-
import unittest
+import libxml2
from pyxmpp import xmlextra
from pyxmpp.jid import JID,JIDError
from pyxmpp import xmppstringprep
+def xml_elements_equal(a,b):
+ if a.name!=b.name:
+ return False
+ try:
+ ns1 = a.ns()
+ except libxml2.treeError:
+ ns1 = None
+ try:
+ ns2 = b.ns()
+ except libxml2.treeError:
+ ns2 = None
+ if ns1 or ns2:
+ if None in (ns1,ns2):
+ return False
+ if ns1.content != ns2.content:
+ return False
+
+ ap = a.properties
+ bp = b.properties
+ while 1:
+ if (ap, bp) == (None, None):
+ break
+ if None in (ap, bp):
+ return False
+ if ap.name != bp.name:
+ return False
+ if ap.content != bp.content:
+ return False
+ ap = ap.next
+ bp = bp.next
+
+ ac = a.children
+ bc = b.children
+ while 1:
+ if (ac, bc) == (None, None):
+ return True
+ if None in (ac, bc):
+ return False
+ if ac.type != bc.type:
+ return False
+ if ac.type == 'element':
+ if not xml_elements_equal(ac, bc):
+ return False
+ elif ac.content != bc.content:
+ return False
+ ac = ac.next
+ bc = bc.next
+ return True
+
class EventTemplate:
def __init__(self, template):
- self.event, self.offset, self.xml = template.split(None,2)
- self.offset = int(self.offset)
+ self.event, offset, xml = template.split(None,2)
+ self.offset = int(offset)
+ self.xml = libxml2.parseDoc(eval(xml))
+
+ def __del__(self):
+ self.xml.freeDoc()
def match(self, event, node):
if self.event!=event:
return False
+ if event=="end":
+ return True
if node.type!='element':
return False
- if self.xml!=`node.serialize()`:
+ if not xml_elements_equal(self.xml.getRootElement(),node):
return False
return True
def __repr__(self):
- return "<EventTemplate %r at %r: %s>" % (self.event, self.offset, self.xml)
+ return "<EventTemplate %r at %r: %r>" % (self.event, self.offset, self.xml.getRootElement().serialize())
class StreamHandler(xmlextra.StreamHandler):
def __init__(self, test_case):
@@ -29,11 +85,9 @@ class StreamHandler(xmlextra.StreamHandler):
def stream_start(self, doc):
self.test_case.event("start", doc.getRootElement())
def stream_end(self, doc):
- self.test_case.event("end", doc.getRootElement())
+ self.test_case.event("end", None)
def stanza(self, doc, node):
self.test_case.event("node", node)
- def stanza_end(self, doc, node):
- self.test_case.event("node", node)
expected_events = []