! Copyright (C) 2005, 2009 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: xml io kernel math sequences strings xml.traversal tools.test math.parser xml.syntax xml.data xml.syntax.private accessors multiline locals inverse xml.writer splitting classes xml.private ; IN: xml.syntax.tests ! TAGS test TAGS: calculate ( tag -- n ) : calc-2children ( tag -- n n ) children-tags first2 [ calculate ] dip calculate ; TAG: number calculate children>string string>number ; TAG: add calculate calc-2children + ; TAG: minus calculate calc-2children - ; TAG: times calculate calc-2children * ; TAG: divide calculate calc-2children / ; TAG: neg calculate children-tags first calculate neg ; : calc-arith ( string -- n ) string>xml first-child-tag calculate ; { 32 } [ "13-8" calc-arith ] unit-test XML-NS: foo http://blah.com { T{ name { main "bling" } { url "http://blah.com" } } } [ "bling" foo ] unit-test ! XML literals { "a" "c" { "a" "c" f } } [ "<-a->/><->" string>doc [ second var>> ] [ fourth "val" attr var>> ] [ extract-variables ] tri ] unit-test { " one y " } [ let[ "one" :> a "two" :> c "y" :> x XML-CHUNK[[ <-x-> ]] :> d XML-DOC[[ <-a-> /> <-d-> ]] pprint-xml>string ] ] unit-test { " one two three " } [ "one two three" " " split [ XML-CHUNK[[ <-> ]] ] map XML-DOC[[ <-> ]] pprint-xml>string ] unit-test { " " } [ 3 f "http://factorcode.org/" "hello" \ drop XML-DOC[[ false=<-> url=<-> string=<-> word=<->/> ]] pprint-xml>string ] unit-test { "3" } [ 3 XML-CHUNK[[ <-> ]] xml>string ] unit-test { "" } [ f XML-CHUNK[[ <-> ]] xml>string ] unit-test [ XML-CHUNK[[ <-> ]] ] must-infer [ XML-CHUNK[[ <-> /> ]] ] must-infer { xml-chunk } [ [ XML-CHUNK[[ ]] ] first class-of ] unit-test { xml } [ [ XML-DOC[[ ]] ] first class-of ] unit-test { xml-chunk } [ [ XML-CHUNK[[ /> ]] ] third class-of ] unit-test { xml } [ [ XML-DOC[[ /> ]] ] third class-of ] unit-test { 1 } [ [ XML-CHUNK[[ ]] ] length ] unit-test { 1 } [ [ XML-DOC[[ ]] ] length ] unit-test { "" } [ XML-CHUNK[[ ]] concat ] unit-test { "foo" } [ XML-CHUNK[[ foo ]] [ XML-CHUNK[[ <-> ]] ] undo ] unit-test { "foo" } [ XML-CHUNK[[ ]] [ XML-CHUNK[[ /> ]] ] undo ] unit-test { "foo" "baz" } [ XML-CHUNK[[ baz ]] [ XML-CHUNK[[ ><-> ]] ] undo ] unit-test : dispatch ( xml -- string ) { { [ XML-CHUNK[[ <-> ]] ] [ "a" prepend ] } { [ XML-CHUNK[[ <-> ]] ] [ "b" prepend ] } { [ XML-CHUNK[[ ]] ] [ "byes" ] } { [ XML-CHUNK[[ /> ]] ] [ "bno" prepend ] } } switch ; { "apple" } [ XML-CHUNK[[ pple ]] dispatch ] unit-test { "banana" } [ XML-CHUNK[[ anana ]] dispatch ] unit-test { "byes" } [ XML-CHUNK[[ ]] dispatch ] unit-test { "bnowhere" } [ XML-CHUNK[[ ]] dispatch ] unit-test { "baboon" } [ XML-CHUNK[[ aboon ]] dispatch ] unit-test { "apple" } [ XML-DOC[[ pple ]] dispatch ] unit-test { "apple" } [ XML-DOC[[ pple ]] body>> dispatch ] unit-test : dispatch-doc ( xml -- string ) { { [ XML-DOC[[ <-> ]] ] [ "a" prepend ] } { [ XML-DOC[[ <-> ]] ] [ "b" prepend ] } { [ XML-DOC[[ ]] ] [ "byes" ] } { [ XML-DOC[[ /> ]] ] [ "bno" prepend ] } } switch ; { "apple" } [ XML-DOC[[ pple ]] dispatch-doc ] unit-test { "apple" } [ XML-CHUNK[[ pple ]] dispatch-doc ] unit-test { "apple" } [ XML-DOC[[ pple ]] body>> dispatch-doc ] unit-test ! Make sure nested XML documents interpolate correctly { "it's blue!" } [ "it's blue!" XML-DOC[[ <-> ]] XML-DOC[[ <-> ]] xml>string ] unit-test { "asdfasdf2" } [ default-prolog "asdf" "asdf" f f "asdf2" XML-DOC[[ <-> ]] xml>string ] unit-test