paulb@49 | 1 | #!/usr/bin/env python |
paulb@49 | 2 | |
paulb@49 | 3 | "A test of macros." |
paulb@49 | 4 | |
paulb@58 | 5 | import libxml2macro as x2_ |
paulb@49 | 6 | import xml.dom |
paulb@49 | 7 | |
paulb@49 | 8 | class Container: |
paulb@49 | 9 | pass |
paulb@49 | 10 | |
paulb@49 | 11 | doc = """<?xml version="1.0"?> |
paulb@49 | 12 | <doc> |
paulb@49 | 13 | <element attr="value"> |
paulb@49 | 14 | <subelement/> |
paulb@49 | 15 | </element> |
paulb@49 | 16 | </doc> |
paulb@49 | 17 | """ |
paulb@49 | 18 | |
paulb@49 | 19 | def find_root(x2_d): |
paulb@49 | 20 | x2_root = None |
paulb@49 | 21 | |
paulb@49 | 22 | # Property access should be transformed. |
paulb@49 | 23 | |
paulb@49 | 24 | for x2_n in x2_d.childNodes: |
paulb@49 | 25 | if x2_n.nodeType == xml.dom.Node.ELEMENT_NODE: |
paulb@49 | 26 | x2_root = x2_n |
paulb@49 | 27 | break |
paulb@49 | 28 | |
paulb@49 | 29 | return x2_root |
paulb@49 | 30 | |
paulb@49 | 31 | def test(): |
paulb@49 | 32 | global doc |
paulb@49 | 33 | |
paulb@49 | 34 | # Assignment should not be transformed. |
paulb@49 | 35 | |
paulb@49 | 36 | x2_d = parseString(doc) |
paulb@49 | 37 | return process(x2_d) |
paulb@49 | 38 | |
paulb@49 | 39 | def test_file(filename): |
paulb@49 | 40 | |
paulb@49 | 41 | # Assignment should not be transformed. |
paulb@49 | 42 | |
paulb@49 | 43 | x2_d = parseFile(filename) |
paulb@49 | 44 | return process(x2_d) |
paulb@49 | 45 | |
paulb@49 | 46 | def process(x2_d): |
paulb@49 | 47 | |
paulb@49 | 48 | # Not even within containers, and not special names alone. |
paulb@49 | 49 | |
paulb@49 | 50 | c = Container() |
paulb@49 | 51 | c.x2_d = x2_d |
paulb@49 | 52 | |
paulb@49 | 53 | # Find the root element. |
paulb@49 | 54 | |
paulb@49 | 55 | x2_root = find_root(x2_d) |
paulb@49 | 56 | c.x2_root = x2_root |
paulb@49 | 57 | |
paulb@49 | 58 | # Create new attributes. |
paulb@49 | 59 | # Method access should be transformed. |
paulb@49 | 60 | |
paulb@49 | 61 | x2_root.setAttributeNS("ns", "xxx:yyy", "zzz") |
paulb@49 | 62 | c.x2_root.setAttributeNS("ns", "XXX:YYY", "ZZZ") |
paulb@49 | 63 | |
paulb@49 | 64 | # Create new elements. |
paulb@49 | 65 | # Method access should be transformed. |
paulb@49 | 66 | |
paulb@49 | 67 | x2_new = x2_d.createElementNS("ns2", "ppp:qqq") |
paulb@49 | 68 | x2_root.appendChild(x2_new) |
paulb@49 | 69 | x2_new2 = c.x2_d.createElementNS("ns2", "PPP:QQQ") |
paulb@49 | 70 | c.x2_root.appendChild(x2_new2) |
paulb@49 | 71 | |
paulb@49 | 72 | # Create new elements using ownerDocument. |
paulb@49 | 73 | # Chaining properties is not |
paulb@49 | 74 | |
paulb@49 | 75 | x2_new3 = x2_new.ownerDocument.createElement("fff") |
paulb@49 | 76 | x2_new.appendChild(x2_new3) |
paulb@49 | 77 | x2_new4 = x2_new2.ownerDocument.createElement("FFF") |
paulb@49 | 78 | x2_new2.appendChild(x2_new4) |
paulb@49 | 79 | |
paulb@49 | 80 | return x2_d |
paulb@49 | 81 | |
paulb@49 | 82 | def test_import(x2_d): |
paulb@49 | 83 | |
paulb@58 | 84 | # Change the prefix. |
paulb@58 | 85 | |
paulb@58 | 86 | import libxml2macro as node_ |
paulb@58 | 87 | node_d = x2_d |
paulb@58 | 88 | |
paulb@58 | 89 | node_root = find_root(node_d) |
paulb@49 | 90 | |
paulb@49 | 91 | # Create a new document. |
paulb@49 | 92 | |
paulb@58 | 93 | node_d2 = createDocument("nsD", "newdoc", None) |
paulb@58 | 94 | node_root2 = find_root(node_d2) |
paulb@49 | 95 | |
paulb@49 | 96 | # Attempt to import nodes from the original document. |
paulb@49 | 97 | |
paulb@58 | 98 | node_imported = node_d2.importNode(node_root, 1) |
paulb@58 | 99 | node_d2.replaceChild(node_imported, node_root2) |
paulb@49 | 100 | |
paulb@58 | 101 | return node_d, node_d2 |
paulb@49 | 102 | |
paulb@60 | 103 | if __name__ == "__main__": |
paulb@60 | 104 | import sys |
paulb@60 | 105 | if len(sys.argv) > 1: |
paulb@60 | 106 | test_file(sys.argv[1]) |
paulb@60 | 107 | else: |
paulb@60 | 108 | test() |
paulb@60 | 109 | |
paulb@49 | 110 | # vim: tabstop=4 expandtab shiftwidth=4 |