#!/usr/bin/newlisp
# qa-xml - test newLISP xml-parse, xml-type-tags functions
(set 'example-xml
[text]
apple
red
0.80
orange
orange
1.00
banana
yellow
0.60
[/text])
(set 'result1 '(
("ELEMENT" "DATABASE" (("name" "example.xml")) (("TEXT" "\n") (
"COMMENT" "This is a database of fruits")
("TEXT" "\n ")
("ELEMENT" "FRUIT" () (("TEXT" "\n ") ("ELEMENT" "NAME"
()
(("TEXT" "apple")))
("TEXT" "\n ")
("ELEMENT" "COLOR" () (("TEXT" "red")))
("TEXT" "\n ")
("ELEMENT" "PRICE" () (("TEXT" "0.80")))
("TEXT" "\n ")))
("TEXT" "\n\n ")
("ELEMENT" "FRUIT" () (("TEXT" "\n ") ("ELEMENT" "NAME"
()
(("TEXT" "orange")))
("TEXT" "\n ")
("ELEMENT" "COLOR" () (("TEXT" "orange")))
("TEXT" "\n ")
("ELEMENT" "PRICE" () (("TEXT" "1.00")))
("TEXT" "\n ")))
("TEXT" "\n\n ")
("ELEMENT" "FRUIT" () (("TEXT" "\n ") ("ELEMENT" "NAME"
()
(("TEXT" "banana")))
("TEXT" "\n ")
("ELEMENT" "COLOR" () (("TEXT" "yellow")))
("TEXT" "\n ")
("ELEMENT" "PRICE" () (("TEXT" "0.60")))
("TEXT" "\n ")))
("TEXT" "\n")))))
(set 'result2 '(
("ELEMENT" "DATABASE" (("name" "example.xml")) (("ELEMENT" "FRUIT"
(("ELEMENT" "NAME" (("TEXT" "apple"))) ("ELEMENT" "COLOR" ((
"TEXT" "red")))
("ELEMENT" "PRICE" (("TEXT" "0.80")))))
("ELEMENT" "FRUIT" (("ELEMENT" "NAME" (("TEXT" "orange"))) ("ELEMENT"
"COLOR"
(("TEXT" "orange")))
("ELEMENT" "PRICE" (("TEXT" "1.00")))))
("ELEMENT" "FRUIT" (("ELEMENT" "NAME" (("TEXT" "banana"))) ("ELEMENT"
"COLOR"
(("TEXT" "yellow")))
("ELEMENT" "PRICE" (("TEXT" "0.60")))))))))
(set 'result3 '(
(DATABASE ((name "example.xml")) (!-- "This is a database of fruits")
(FRUIT (NAME "apple") (COLOR "red") (PRICE "0.80"))
(FRUIT (NAME "orange") (COLOR "orange") (PRICE "1.00"))
(FRUIT (NAME "banana") (COLOR "yellow") (PRICE "0.60")))))
;(define CTX:msg)
(define (test-xml-parse)
(begin
(= (xml-type-tags "TEXT" "CDATA" "COMMENT" "ELEMENT")
'("TEXT" "CDATA" "COMMENT" "ELEMENT"))
(print (= result1 (xml-parse example-xml)) " ")
(print (= result2 (xml-parse example-xml (+ 1 2 4))) " ")
(xml-type-tags nil 'cdata '!-- nil)
(print (= result3 (xml-parse example-xml (+ 1 2 8))) " ")
(xml-type-tags nil nil nil nil)
(print (= (xml-parse "Hello World" (+ 1 2 4 8 16) 'CTX)
'((CTX:msg "Hello World"))) " -> ")
))
(println)
(if (test-xml-parse)
(println "xml-parse and xml-type-tags OK")
(println "ERROR with xml-parse or xml-type-tags"))
(println)
;; test callback feature
(define (xml-callback s-expr start size)
(if (or (= (s-expr 0) 'NAME) (= (s-expr 0) 'COLOR) (= (s-expr 0) 'PRICE))
(begin
(print "parsed expresson:" s-expr)
(println ", source:" (start size example-xml))
)
)
)
(println "Testing xml-parse with callback feature")
(xml-type-tags nil 'cdata '!-- nil)
(xml-parse example-xml (+ 1 2 8) MAIN xml-callback)
; produces this output:
[text]
parsed expresson:(NAME "apple"), source:apple
parsed expresson:(COLOR "red"), source:red
parsed expresson:(PRICE "0.80"), source:0.80
parsed expresson:(NAME "orange"), source:orange
parsed expresson:(COLOR "orange"), source:orange
parsed expresson:(PRICE "1.00"), source:1.00
parsed expresson:(NAME "banana"), source:banana
parsed expresson:(COLOR "yellow"), source:yellow
parsed expresson:(PRICE "0.60"), source:0.60
[/text]
(exit)
;; eof