1 USING: accessors assocs combinators continuations fry generalizations
2 io.pathnames kernel macros sequences stack-checker tools.test xml
3 xml.traversal xml.writer arrays xml.data ;
6 TUPLE: xml-test id uri sections description type ;
8 : >xml-test ( tag -- test )
10 [ "TYPE" attr >>type ]
13 [ "SECTIONS" attr >>sections ]
14 [ children>> xml>string >>description ]
17 : parse-tests ( xml -- tests )
18 "TEST" tags-named [ >xml-test ] map ;
20 : base "resource:basis/xml/tests/xmltest/" ;
22 MACRO: drop-output ( quot -- newquot )
23 dup infer out>> '[ @ _ ndrop ] ;
25 MACRO: drop-input ( quot -- newquot )
26 infer in>> '[ _ ndrop ] ;
28 : fails? ( quot -- ? )
29 [ drop-output f ] [ nip drop-input t ] bi-curry recover ; inline
31 : well-formed? ( uri -- answer )
32 [ file>xml ] fails? "not-wf" "valid" ? ;
34 : test-quots ( test -- result quot )
36 [ '[ _ uri>> base swap append-path well-formed? ] ] bi ;
38 : xml-tests ( -- tests )
39 base "xmltest.xml" append-path file>xml
40 parse-tests [ test-quots 2array ] map ;
42 : run-xml-tests ( -- )
43 xml-tests [ unit-test ] assoc-each ;
45 : works? ( result quot -- ? )
46 [ first ] [ call ] bi* = ;
48 : partition-xml-tests ( -- successes failures )
49 xml-tests [ first2 works? ] partition ;
51 : failing-valids ( -- tests )
52 partition-xml-tests nip [ second first ] map [ type>> "valid" = ] filter ;
54 [ ] [ partition-xml-tests 2drop ] unit-test