123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699 |
- (define-module (test-suite sxml-xpath)
- #:use-module (test-suite lib)
- #:use-module (sxml xpath))
- (define tree1
- '(html
- (head (title "Slides"))
- (body
- (p (@ (align "center"))
- (table (@ (style "font-size: x-large"))
- (tr
- (td (@ (align "right")) "Talks ")
- (td (@ (align "center")) " = ")
- (td " slides + transition"))
- (tr (td)
- (td (@ (align "center")) " = ")
- (td " data + control"))
- (tr (td)
- (td (@ (align "center")) " = ")
- (td " programs"))))
- (ul
- (li (a (@ (href "slides/slide0001.gif")) "Introduction"))
- (li (a (@ (href "slides/slide0010.gif")) "Summary")))
- )))
- (define tree3
- '(poem (@ (title "The Lovesong of J. Alfred Prufrock")
- (poet "T. S. Eliot"))
- (stanza
- (line "Let us go then, you and I,")
- (line "When the evening is spread out against the sky")
- (line "Like a patient etherized upon a table:"))
- (stanza
- (line "In the room the women come and go")
- (line "Talking of Michaelangelo."))))
- (define (run-test selector node expected)
- (pass-if expected
- (equal? expected (selector node))))
- (with-test-prefix "test-all"
-
-
-
- (let ((tree
- '(elem (@) (para (@) "para") (br (@)) "cdata" (para (@) "second par"))
- )
- (expected '((para (@) "para") (para (@) "second par")))
- )
- (run-test (select-kids (node-typeof? 'para)) tree expected)
- (run-test (sxpath '(para)) tree expected))
-
-
-
- (let ((tree
- '(elem (@) (para (@) "para") (br (@)) "cdata" (para "second par"))
- )
- (expected
- '((para (@) "para") (br (@)) (para "second par")))
- )
- (run-test (select-kids (node-typeof? '*)) tree expected)
- (run-test (sxpath '(*)) tree expected))
-
-
-
- (let ((tree
- '(elem (@) (para (@) "para") (br (@)) "cdata" (para "second par"))
- )
- (expected
- '("cdata"))
- )
- (run-test (select-kids (node-typeof? '*text*)) tree expected)
- (run-test (sxpath '(*text*)) tree expected))
-
-
-
- (let* ((tree
- '(elem (@) (para (@) "para") (br (@)) "cdata" (para "second par"))
- )
- (expected (cdr tree))
- )
- (run-test (select-kids (node-typeof? '*any*)) tree expected)
- (run-test (sxpath '(*any*)) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@) (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para "third para")))
- )
- (expected
- '((para "third para")))
- )
- (run-test
- (node-join (select-kids (node-typeof? '*))
- (select-kids (node-typeof? 'para)))
- tree expected)
- (run-test (sxpath '(* para)) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para (@) "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (expected
- '((name "elem")))
- )
- (run-test
- (node-join (select-kids (node-typeof? '@))
- (select-kids (node-typeof? 'name)))
- tree expected)
- (run-test (sxpath '(@ name)) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (expected
- '((name "elem") (id "idz")))
- )
- (run-test
- (node-join (select-kids (node-typeof? '@))
- (select-kids (node-typeof? '*)))
- tree expected)
- (run-test (sxpath '(@ *)) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (expected
- '((para (@) "para") (para "second par") (para (@) "third para")))
- )
- (run-test
- (node-closure (node-typeof? 'para))
- tree expected)
- (run-test (sxpath '(// para)) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- )
- (run-test (node-self (node-typeof? 'para)) tree '())
- (run-test (node-self (node-typeof? 'elem)) tree (list tree))
- )
-
-
-
-
-
-
- (let* ((tree
- '(para (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (expected
- (cons tree
- (append (cdr tree)
- '((@) "para" (@) "second par"
- (@ (name "aa")) (para (@) "third para")
- (@) "third para"))))
- )
- (run-test
- (node-or
- (node-self (node-typeof? '*any*))
- (node-closure (node-typeof? '*any*)))
- tree expected)
- (run-test (sxpath '(//)) tree expected)
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- (let*
- ((root
- '(div (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para (@) "second par")
- (div (@ (name "aa")) (para (@) "third para"))))
- (context-node
- (car
- ((node-closure
- (select-kids
- (node-equal? "third para")))
- root)))
- (pred
- (node-reduce (node-self (node-typeof? 'div))
- (node-closure (node-eq? context-node))
- ))
- )
- (run-test
- (node-or
- (node-self pred)
- (node-closure pred))
- root
- (cons root
- '((div (@ (name "aa")) (para (@) "third para")))))
- )
-
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")
- (div (para "fourth para"))))
- )
- (expected
- '((para (@) "third para") (para "fourth para")))
- )
- (run-test
- (node-join
- (select-kids (node-typeof? 'div))
- (node-closure (node-typeof? 'para)))
- tree expected)
- (run-test (sxpath '(div // para)) tree expected)
- )
-
-
-
-
-
-
-
-
- (let ((tree tree1)
- (expected
- '((align "right") (align "center") (align "center") (align "center"))
- ))
- (run-test
- (node-join
- (node-closure (node-typeof? 'td))
- (select-kids (node-typeof? '@))
- (select-kids (node-typeof? 'align)))
- tree expected)
- (run-test (sxpath '(// td @ align)) tree expected)
- )
-
-
-
- (let ((tree tree1)
- (expected
- '((td (@ (align "right")) "Talks ") (td (@ (align "center")) " = ")
- (td (@ (align "center")) " = ") (td (@ (align "center")) " = "))
- ))
- (run-test
- (node-reduce
- (node-closure (node-typeof? 'td))
- (filter
- (node-join
- (select-kids (node-typeof? '@))
- (select-kids (node-typeof? 'align)))))
- tree expected)
- (run-test (sxpath `(// td ,(node-self (sxpath '(@ align))))) tree expected)
- (run-test (sxpath '(// (td (@ align)))) tree expected)
- (run-test (sxpath '(// ((td) (@ align)))) tree expected)
-
-
-
- (run-test
- (node-reduce
- (node-closure (node-typeof? 'td))
- (filter
- (sxpath '(@ align))))
- tree expected)
- )
-
-
-
- (let ((tree tree1)
- (expected
- '((td (@ (align "right")) "Talks "))
- ))
- (run-test
- (node-reduce
- (node-closure (node-typeof? 'td))
- (filter
- (node-join
- (select-kids (node-typeof? '@))
- (select-kids (node-equal? '(align "right"))))))
- tree expected)
- (run-test (sxpath '(// (td (@ (equal? (align "right")))))) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (expected
- '((para (@) "para"))
- ))
- (run-test
- (node-reduce
- (select-kids (node-typeof? 'para))
- (node-pos 1))
- tree expected)
- (run-test (sxpath '((para 1))) tree expected)
- )
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (expected
- '((para "second par"))
- ))
- (run-test
- (node-reduce
- (select-kids (node-typeof? 'para))
- (node-pos -1))
- tree expected)
- (run-test (sxpath '((para -1))) tree expected)
- )
-
-
-
-
-
- (let ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- )
- (run-test
- (node-reduce
- (node-closure (node-typeof? 'para))
- (node-pos 1))
- tree '((para (@) "para")))
- (run-test (sxpath '(// (para 1))) tree
- '((para (@) "para") (para (@) "third para")))
- )
-
-
-
-
-
-
-
-
- (let* ((tree
- '(elem (@ (name "elem") (id "idz"))
- (para (@) "para") (br (@)) "cdata" (para "second par")
- (div (@ (name "aa")) (para (@) "third para")))
- )
- (para1
- (car ((sxpath '(para)) tree)))
- (para3
- (car ((sxpath '(div para)) tree)))
- (div
- (car ((sxpath '(// div)) tree)))
- )
- (run-test
- (node-parent tree)
- para1 (list tree))
- (run-test
- (node-parent tree)
- para3 (list div))
- (run-test
- (node-parent tree)
- ((sxpath '(@ name)) div) (list div))
- (run-test
- (node-join
- (node-parent tree)
- (select-kids (node-typeof? '@))
- (select-kids (node-typeof? 'name)))
- para3 '((name "aa")))
- (run-test
- (sxpath `(,(node-parent tree) @ name))
- para3 '((name "aa")))
- )
-
-
-
-
-
-
-
-
- (let* ((tree
- '(document
- (preface "preface")
- (chapter (@ (id "one")) "Chap 1 text")
- (chapter (@ (id "two")) "Chap 2 text")
- (chapter (@ (id "three")) "Chap 3 text")
- (chapter (@ (id "four")) "Chap 4 text")
- (epilogue "Epilogue text")
- (appendix (@ (id "A")) "App A text")
- (References "References"))
- )
- (a-node
- (car ((sxpath '(// (chapter (@ (equal? (id "two")))))) tree)))
- (expected
- '((chapter (@ (id "three")) "Chap 3 text")))
- )
- (run-test
- (node-reduce
- (node-join
- (node-parent tree)
- (select-kids (node-typeof? 'chapter)))
- (take-after (node-eq? a-node))
- (node-pos 1)
- )
- a-node expected)
- )
-
-
-
-
-
-
-
- (let* ((tree
- '(document
- (preface "preface")
- (chapter (@ (id "one")) "Chap 1 text")
- (chapter (@ (id "two")) "Chap 2 text")
- (chapter (@ (id "three")) "Chap 3 text")
- (chapter (@ (id "four")) "Chap 4 text")
- (epilogue "Epilogue text")
- (appendix (@ (id "A")) "App A text")
- (References "References"))
- )
- (a-node
- (car ((sxpath '(// (chapter (@ (equal? (id "three")))))) tree)))
- (expected
- '((chapter (@ (id "two")) "Chap 2 text")))
- )
- (run-test
- (node-reduce
- (node-join
- (node-parent tree)
- (select-kids (node-typeof? 'chapter)))
- (take-until (node-eq? a-node))
- (node-pos -1)
- )
- a-node expected)
- )
-
-
-
-
-
-
-
- (let ((tree ((node-closure (node-typeof? 'p)) tree1))
- (expected
- '((td " data + control"))
- ))
- (run-test
- (node-join
- (select-kids (node-typeof? 'table))
- (node-reduce (select-kids (node-typeof? 'tr))
- (node-pos 2))
- (node-reduce (select-kids (node-typeof? 'td))
- (node-pos 3)))
- tree expected)
- (run-test (sxpath '(table (tr 2) (td 3))) tree expected)
- )
-
-
-
-
-
- (let ((tree
- '(chapter
- (para "para1")
- (para (@ (type "warning")) "para 2")
- (para (@ (type "warning")) "para 3")
- (para (@ (type "warning")) "para 4")
- (para (@ (type "warning")) "para 5")
- (para (@ (type "warning")) "para 6"))
- )
- (expected
- '((para (@ (type "warning")) "para 6"))
- ))
- (run-test
- (node-reduce
- (select-kids (node-typeof? 'para))
- (filter
- (node-join
- (select-kids (node-typeof? '@))
- (select-kids (node-equal? '(type "warning")))))
- (node-pos 5))
- tree expected)
- (run-test (sxpath '( (((para (@ (equal? (type "warning"))))) 5 ) ))
- tree expected)
- (run-test (sxpath '( (para (@ (equal? (type "warning"))) 5 ) ))
- tree expected)
- )
-
-
-
-
-
- (let ((tree
- '(chapter
- (para "para1")
- (para (@ (type "warning")) "para 2")
- (para (@ (type "warning")) "para 3")
- (para (@ (type "warning")) "para 4")
- (para (@ (type "warning")) "para 5")
- (para (@ (type "warning")) "para 6"))
- )
- (expected
- '((para (@ (type "warning")) "para 5"))
- ))
- (run-test
- (node-reduce
- (select-kids (node-typeof? 'para))
- (node-pos 5)
- (filter
- (node-join
- (select-kids (node-typeof? '@))
- (select-kids (node-equal? '(type "warning"))))))
- tree expected)
- (run-test (sxpath '( (( (para 5)) (@ (equal? (type "warning"))))))
- tree expected)
- (run-test (sxpath '( (para 5 (@ (equal? (type "warning")))) ))
- tree expected)
- )
-
-
-
-
- (let ((tree
- '(document
- (preface "preface")
- (chapter (@ (id "one")) "Chap 1 text")
- (chapter (@ (id "two")) "Chap 2 text")
- (chapter (@ (id "three")) "Chap 3 text")
- (epilogue "Epilogue text")
- (appendix (@ (id "A")) "App A text")
- (References "References"))
- )
- (expected
- '((chapter (@ (id "one")) "Chap 1 text")
- (chapter (@ (id "two")) "Chap 2 text")
- (chapter (@ (id "three")) "Chap 3 text")
- (appendix (@ (id "A")) "App A text"))
- ))
- (run-test
- (node-join
- (select-kids (node-typeof? '*))
- (filter
- (node-or
- (node-self (node-typeof? 'chapter))
- (node-self (node-typeof? 'appendix)))))
- tree expected)
- (run-test (sxpath `(* ,(node-or (node-self (node-typeof? 'chapter))
- (node-self (node-typeof? 'appendix)))))
- tree expected)
- )
-
-
-
-
-
-
-
-
-
-
- (let ((tree tree3)
- (expected
- '("Let us go then, you and I," "In the room the women come and go")
- ))
- (run-test
- (node-join
- (node-closure (node-typeof? 'stanza))
- (node-reduce
- (select-kids (node-typeof? 'line)) (node-pos 1))
- (select-kids (node-typeof? '*text*)))
- tree expected)
- (run-test (sxpath '(// stanza (line 1) *text*)) tree expected)
- )
- )
|