import java.io.StringReader import org.xml.sax.InputSource import scala.testing.SUnit.Assert import scala.xml.{Node, NodeSeq, Elem, Text, XML} object Test extends AnyRef with Assert { /** returns true if exception was thrown */ def catcher(att: Function1[Unit, scala.xml.MetaData]): Boolean = { var ex = false try { att.apply({}) } catch { case scala.xml.MalformedAttributeException(msg) => println(msg) ex = true } ex } def main(args: Array[String]) { //val e: scala.xml.MetaData = null; //Node.NoAttributes; //val sc: scala.xml.NamespaceBinding = null; // ------------------------------------------ tests for class NodeSeq /** println("checking wellformed attributes"); { import scala.xml.{ UnprefixedAttribute, Null } assertTrue(catcher {x:Unit => new UnprefixedAttribute("key", "<", Null)}); // < illegal assertTrue(catcher(x:Unit => new UnprefixedAttribute("key", "&", Null))); // & illegal assertTrue(catcher(x:Unit => new UnprefixedAttribute("key", "a&a", Null))); // & illegal assertTrue(catcher(x:Unit => new UnprefixedAttribute("key", "a&a;&", Null))); // 2nd & assertFalse(catcher(x:Unit => new UnprefixedAttribute("key", "a&a; <<", Null))); } */ /* checking wellformed attributes < not allowed in attribute value passed ok malformed entity reference in attribute value [&] passed ok malformed entity reference in attribute value [a&a] passed ok malformed entity reference in attribute value [a&a;&] passed ok passed ok */ println("NodeSeq") val p = ; val pelems_1 = for( val x <- p \ "bar"; val y <- p \ "baz" ) yield { Text(x.attributes("value").toString + y.attributes("bazValue").toString+ "!") }; val pelems_2 = new NodeSeq { val theSeq = List(Text("38!"),Text("58!")) }; assertSameElementsXML(pelems_1, pelems_2) assertEqualsXML(p \\ "@bazValue", Text("8")) val books = Blabla Blubabla Baaaaaaalabla ; val reviews = Blabla Hallo Welt. Blubabla Hello Blu Blubabla rem 2 ; println( new scala.xml.PrettyPrinter(80, 5).formatNodes ( for (t <- books \\ "title"; r <- reviews \\ "entry" if (r \ "title") xml_== t) yield { t } { r \ "remarks" } )); // example println( for (t @ Blabla <- new NodeSeq { val theSeq = books.child }.toList) yield t ); val phoneBook = This is the phonebook of the ACME corporation. John +41 21 693 68 67 +41 79 602 23 23 ; val addrBook = This is the addressbook of the ACME corporation. John Elm Street Dolphin City ; println( new scala.xml.PrettyPrinter(80, 5).formatNodes ( for (t <- addrBook \\ "entry"; r <- phoneBook \\ "entry" if (t \ "name") xml_== (r \ "name")) yield { t.child } { r \ "phone" } )); /* namespaces */ // begin tmp println("namespaces") val cuckoo = ; assertEquals(cuckoo.namespace, "http://cuckoo.com") for (n <- cuckoo \ "_" ) { //println("n = "+n); //println("n.prefix = "+n.prefix); //.println("n.scope = "+n.scope); assertEquals( n.namespace, "http://cuckoo.com") } println("validation - elements") val vtor = new scala.xml.dtd.ElementValidator(); { import scala.xml.dtd.ELEMENTS import scala.xml.dtd.ContentModel._ vtor.setContentModel( ELEMENTS( Sequ( Letter(ElemName("bar")), Star(Letter(ElemName("baz"))) ))); } assertEquals(vtor( ), true); { import scala.xml.dtd.MIXED import scala.xml.dtd.ContentModel._ vtor.setContentModel( MIXED( Alt(Letter(ElemName("bar")), Letter(ElemName("baz")), Letter(ElemName("bal"))))); } assertEquals(vtor( ), true) assertEquals(vtor(abcdedgh ), true) assertEquals(vtor( ), false) println("validation - attributes") vtor.setContentModel(null) vtor.setMetaData(List()) assertEquals(vtor( ), false) { import scala.xml.dtd._ vtor setMetaData List(AttrDecl("bar", "CDATA", IMPLIED)) } assertEquals(vtor(), false) assertEquals(vtor(), true) { import scala.xml.dtd._ vtor.setMetaData(List(AttrDecl("bar","CDATA",REQUIRED))) } assertEquals( vtor( ), false ) assertEquals( vtor( ), true ) } }