38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#!/usr/bin/python -u
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport sys
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncimport libxml2
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.debugMemory(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Testing XML Node comparison and Node hash-value
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync#
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc = libxml2.parseDoc("""<root><foo/></root>""")
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncroot = doc.getRootElement()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Create two different objects which point to foo
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncfoonode1 = root.children
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncfoonode2 = root.children
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Now check that [in]equality tests work ok
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif not ( foonode1 == foonode2 ):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error comparing nodes with ==, nodes should be equal but are unequal"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif not ( foonode1 != root ):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error comparing nodes with ==, nodes should not be equal but are equal"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif not ( foonode1 != root ):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error comparing nodes with !=, nodes should not be equal but are equal"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif ( foonode1 != foonode2 ):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error comparing nodes with !=, nodes should be equal but are unequal"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Next check that the hash function for the objects also works ok
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif not (hash(foonode1) == hash(foonode2)):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error hash values for two equal nodes are different"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif not (hash(foonode1) != hash(root)):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error hash values for two unequal nodes are not different"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif hash(foonode1) == hash(root):
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Error hash values for two unequal nodes are equal"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync sys.exit(1)
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Basic tests successful
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncdoc.freeDoc()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync# Memory debug specific
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsynclibxml2.cleanupParser()
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncif libxml2.debugMemory(1) == 0:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "OK"
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsyncelse:
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync print "Memory leak %d bytes" % (libxml2.debugMemory(1))
38ae7e4efe803ea78b6499cd05a394db32623e41vboxsync libxml2.dumpMemory()