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!")) };
assertSameElements(pelems_1, pelems_2)
assertEquals(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" == 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" == 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 )
}
}