Initial commit of newLISP.
[newlisp.git] / qa-xml
blob435bd3f41953f9d932573446db17a356c14b3f8f
1 #!/usr/bin/newlisp
3 # qa-xml - test newLISP xml-parse, xml-type-tags functions
5 (set 'example-xml
6 [text]
8 <DATABASE name="example.xml">
9 <!--This is a database of fruits-->
10     <FRUIT>
11         <NAME>apple</NAME>
12         <COLOR>red</COLOR>
13         <PRICE>0.80</PRICE>
14     </FRUIT>
16     <FRUIT>
17         <NAME>orange</NAME>
18         <COLOR>orange</COLOR>
19         <PRICE>1.00</PRICE>
20     </FRUIT>
22     <FRUIT>
23        <NAME>banana</NAME>
24        <COLOR>yellow</COLOR>
25        <PRICE>0.60</PRICE>
26     </FRUIT>
27 </DATABASE>
28 [/text])
31 (set 'result1 '(
32   ("ELEMENT" "DATABASE" (("name" "example.xml")) (("TEXT" "\n") (
33      "COMMENT" "This is a database of fruits") 
34     ("TEXT" "\n    ") 
35     ("ELEMENT" "FRUIT" () (("TEXT" "\n        ") ("ELEMENT" "NAME" 
36        () 
37        (("TEXT" "apple"))) 
38       ("TEXT" "\n        ") 
39       ("ELEMENT" "COLOR" () (("TEXT" "red"))) 
40       ("TEXT" "\n        ") 
41       ("ELEMENT" "PRICE" () (("TEXT" "0.80"))) 
42       ("TEXT" "\n    "))) 
43     ("TEXT" "\n\n    ") 
44     ("ELEMENT" "FRUIT" () (("TEXT" "\n        ") ("ELEMENT" "NAME" 
45        () 
46        (("TEXT" "orange"))) 
47       ("TEXT" "\n        ") 
48       ("ELEMENT" "COLOR" () (("TEXT" "orange"))) 
49       ("TEXT" "\n        ") 
50       ("ELEMENT" "PRICE" () (("TEXT" "1.00"))) 
51       ("TEXT" "\n    "))) 
52     ("TEXT" "\n\n    ") 
53     ("ELEMENT" "FRUIT" () (("TEXT" "\n       ") ("ELEMENT" "NAME" 
54        () 
55        (("TEXT" "banana"))) 
56       ("TEXT" "\n       ") 
57       ("ELEMENT" "COLOR" () (("TEXT" "yellow"))) 
58       ("TEXT" "\n       ") 
59       ("ELEMENT" "PRICE" () (("TEXT" "0.60"))) 
60       ("TEXT" "\n    "))) 
61     ("TEXT" "\n")))))
64 (set 'result2 '(
65   ("ELEMENT" "DATABASE" (("name" "example.xml")) (("ELEMENT" "FRUIT" 
66      (("ELEMENT" "NAME" (("TEXT" "apple"))) ("ELEMENT" "COLOR" ((
67          "TEXT" "red"))) 
68       ("ELEMENT" "PRICE" (("TEXT" "0.80"))))) 
69     ("ELEMENT" "FRUIT" (("ELEMENT" "NAME" (("TEXT" "orange"))) ("ELEMENT" 
70        "COLOR" 
71        (("TEXT" "orange"))) 
72       ("ELEMENT" "PRICE" (("TEXT" "1.00"))))) 
73     ("ELEMENT" "FRUIT" (("ELEMENT" "NAME" (("TEXT" "banana"))) ("ELEMENT" 
74        "COLOR" 
75        (("TEXT" "yellow"))) 
76       ("ELEMENT" "PRICE" (("TEXT" "0.60")))))))))
79 (set 'result3 '(
80   (DATABASE ((name "example.xml")) (!-- "This is a database of fruits") 
81    (FRUIT (NAME "apple") (COLOR "red") (PRICE "0.80")) 
82    (FRUIT (NAME "orange") (COLOR "orange") (PRICE "1.00")) 
83    (FRUIT (NAME "banana") (COLOR "yellow") (PRICE "0.60")))))
85 ;(define CTX:msg)
87 (define (test-xml-parse)
88   (begin
89         (= (xml-type-tags "TEXT" "CDATA" "COMMENT" "ELEMENT")
90                 '("TEXT" "CDATA" "COMMENT" "ELEMENT"))
91         (print (= result1 (xml-parse example-xml)) " ")
92         (print (= result2 (xml-parse example-xml (+ 1 2 4))) " ")
93         (xml-type-tags nil 'cdata '!-- nil) 
94         (print (= result3 (xml-parse example-xml (+ 1 2 8))) " ")
95         (xml-type-tags nil nil nil nil)
96         (print (= (xml-parse "<msg>Hello World</msg>" (+ 1 2 4 8 16) 'CTX)
97                 '((CTX:msg "Hello World"))) " -> ")
100 (println)
101 (if (test-xml-parse)
102         (println "xml-parse and xml-type-tags OK")
103     (println "ERROR with xml-parse or xml-type-tags"))
104 (println)
108 ;; test callback feature
109 (define (xml-callback s-expr start size)
110         (if (or (= (s-expr 0) 'NAME) (= (s-expr 0) 'COLOR) (= (s-expr 0) 'PRICE))
111                 (begin
112                         (print "parsed expresson:" s-expr)
113                         (println ", source:" (start size example-xml))
114                 )
115         )
118 (println "Testing xml-parse with callback feature")
119 (xml-type-tags nil 'cdata '!-- nil) 
120 (xml-parse example-xml (+ 1 2 8) MAIN xml-callback)
122 ; produces this output:
123 [text]
124 parsed expresson:(NAME "apple"), source:<NAME>apple</NAME>
125 parsed expresson:(COLOR "red"), source:<COLOR>red</COLOR>
126 parsed expresson:(PRICE "0.80"), source:<PRICE>0.80</PRICE>
127 parsed expresson:(NAME "orange"), source:<NAME>orange</NAME>
128 parsed expresson:(COLOR "orange"), source:<COLOR>orange</COLOR>
129 parsed expresson:(PRICE "1.00"), source:<PRICE>1.00</PRICE>
130 parsed expresson:(NAME "banana"), source:<NAME>banana</NAME>
131 parsed expresson:(COLOR "yellow"), source:<COLOR>yellow</COLOR>
132 parsed expresson:(PRICE "0.60"), source:<PRICE>0.60</PRICE>
133 [/text]
135 (exit)
137 ;; eof
138