Index: third_party/libxml/src/xstc/fixup-tests.py |
diff --git a/third_party/libxml/src/xstc/fixup-tests.py b/third_party/libxml/src/xstc/fixup-tests.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..6e33d1c4cea6ba6e8d7a221a906294fb3fc4b2f7 |
--- /dev/null |
+++ b/third_party/libxml/src/xstc/fixup-tests.py |
@@ -0,0 +1,99 @@ |
+#!/usr/bin/python -u |
+ |
+import sys, os |
+import libxml2 |
+ |
+ |
+libxml2.debugMemory(1) |
+baseDir = os.path.join('msxsdtest', 'Particles') |
+filenames = os.listdir(baseDir) |
+mainXSD = str() |
+signature = str() |
+dictXSD = dict() |
+ |
+def gatherFiles(): |
+ for file in filenames: |
+ if (file[-5] in ["a", "b", "c"]) and (file[-3:] == 'xsd'): |
+ # newfilename = string.replace(filename, ' ', '_') |
+ signature = file[:-5] |
+ mainXSD = signature + ".xsd" |
+ imports = [] |
+ for sub in filenames: |
+ if (mainXSD != sub) and (sub[-3:] == 'xsd') and sub.startswith(signature): |
+ imports.append(sub) |
+ if len(imports) != 0: |
+ dictXSD[mainXSD] = imports |
+ |
+def debugMsg(text): |
+ #pass |
+ print "DEBUG:", text |
+ |
+ |
+def fixup(): |
+ for mainXSD in dictXSD: |
+ debugMsg("fixing '%s'..." % mainXSD) |
+ schemaDoc = None |
+ xpmainCtx = None |
+ # Load the schema document. |
+ schemaFile = os.path.join(baseDir, mainXSD) |
+ schemaDoc = libxml2.parseFile(schemaFile) |
+ if (schemaDoc is None): |
+ print "ERROR: doc '%s' not found" % mainXSD |
+ sys.exit(1) |
+ try: |
+ xpmainCtx = schemaDoc.xpathNewContext() |
+ xpmainCtx.xpathRegisterNs("xs", "http://www.w3.org/2001/XMLSchema"); |
+ xpres = xpmainCtx.xpathEval("/xs:schema") |
+ if len(xpres) == 0: |
+ print "ERROR: doc '%s' has no <schema> element" % mainXSD |
+ sys.exit(1) |
+ schemaElem = xpres[0] |
+ schemaNs = schemaElem.ns() |
+ # Select all <import>s. |
+ xpres = xpmainCtx.xpathEval("/xs:schema/xs:import") |
+ if len(xpres) != 0: |
+ for elem in xpres: |
+ loc = elem.noNsProp("schemaLocation") |
+ if (loc is not None): |
+ debugMsg(" imports '%s'" % loc) |
+ if loc in dictXSD[mainXSD]: |
+ dictXSD[mainXSD].remove(loc) |
+ for loc in dictXSD[mainXSD]: |
+ # Read out the targetNamespace. |
+ impTargetNs = None |
+ impFile = os.path.join(baseDir, loc) |
+ impDoc = libxml2.parseFile(impFile) |
+ try: |
+ xpimpCtx = impDoc.xpathNewContext() |
+ try: |
+ xpimpCtx.setContextDoc(impDoc) |
+ xpimpCtx.xpathRegisterNs("xs", "http://www.w3.org/2001/XMLSchema"); |
+ xpres = xpimpCtx.xpathEval("/xs:schema") |
+ impTargetNs = xpres[0].noNsProp("targetNamespace") |
+ finally: |
+ xpimpCtx.xpathFreeContext() |
+ finally: |
+ impDoc.freeDoc() |
+ |
+ # Add the <import>. |
+ debugMsg(" adding <import namespace='%s' schemaLocation='%s'/>" % (impTargetNs, loc)) |
+ newElem = schemaDoc.newDocNode(schemaNs, "import", None) |
+ if (impTargetNs is not None): |
+ newElem.newProp("namespace", impTargetNs) |
+ newElem.newProp("schemaLocation", loc) |
+ if schemaElem.children is not None: |
+ schemaElem.children.addPrevSibling(newElem) |
+ schemaDoc.saveFile(schemaFile) |
+ finally: |
+ xpmainCtx.xpathFreeContext() |
+ schemaDoc.freeDoc() |
+ |
+try: |
+ gatherFiles() |
+ fixup() |
+finally: |
+ libxml2.cleanupParser() |
+ if libxml2.debugMemory(1) != 0: |
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1)) |
+ libxml2.dumpMemory() |
+ |