import java.io.StringReader;
import org.xml.sax.InputSource;
import scala.testing.UnitTest._ ;
import scala.xml.{Node, NodeSeq, Elem, Text, XML};
object Test {
/** returns true if exception was thrown */
def catcher(att:Function1[Unit,scala.xml.MetaData]): Boolean = {
var ex = false;
try {
val x = att.apply({});
} catch {
case scala.xml.MalformedAttributeException(msg) =>
Console.println(msg);
ex = true;
}
return ex;
}
def main(args:Array[String]) = {
//val e: scala.xml.MetaData = null; //Node.NoAttributes;
//val sc: scala.xml.NamespaceBinding = null;
// ------------------------------------------ tests for class NodeSeq
/**
Console.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
*/
Console.println("NodeSeq");
import scala.xml.Utility.view ;
val p =
;
val pelems_1 = for( val x <- p \ "bar"; val y <- p \ "baz" ) yield {
Text(x.attribute("value").toString() + y.attribute("bazValue").toString()+ "!")
};
val pelems_2 = new NodeSeq { val theSeq = List(Text("38!"),Text("58!")) };
assertSameElements(pelems_1, pelems_2);
assertSameElements(
p \\ "@value", new NodeSeq { val theSeq = List(Text("3"), Text("5")) }
);
/* // more test cases !!!
val test = ;
Console.println(test \ "@name");
val x = test.attributes.nodes;
Console.println("trying to print");
val it = x.elements;
while(it.hasNext) {
val c = it.next;
Console.println(c);
Console.println("c.label == @name? "+(c.label == "@name"));
}
*/
/*
for(val c <- x) {
Console.println(x);
}
*/
val books =
Blabla
Blubabla
Baaaaaaalabla
;
val reviews =
Blabla
Hallo Welt.
Blubabla
Hello Blu
Blubabla
rem 2
;
Console.println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
for( val t <- books \\ "title";
val r <- reviews \\ "entry";
r \ "title" == t) yield
{ t }
{ r \ "remarks" }
));
// example
Console.println(
for( val t @ Blabla <- new NodeSeq { val theSeq = books.child }.asList)
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
;
Console.println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
for( val t <- addrBook \\ "entry";
val r <- phoneBook \\ "entry";
t \ "name" == r \ "name") yield
{ t.child }
{ r \ "phone" }
));
/* patterns */
Console.println("patterns");
assertEquals( match { case => true; case _ => false; },
true);
assertEquals(
match { case x @
if x.attribute("foo") == "bar" => true;
case _ => false; },
true);
assertEquals(
crazy text world
match { case
crazy text world
=> true;
case _ => false; },
true);
/* namespaces */
// begin tmp
Console.println("namespaces");
val cuckoo =
;
assertEquals( cuckoo.namespace, "http://cuckoo.com");
for( val n <- cuckoo.child ) {
assertEquals( n.namespace, "http://cuckoo.com");
}
// end tmp
/*
DEPRECATED, don't support namespaces in pattern match anymore
*/
/*
assertEquals( true, cuckoo match {
case
=> true;
case _ => false; });
*/
/*
// begin tmp
assertEquals( false, cuckoo match {
case
=> true;
case _ => false; });
// end tmp
*/
Console.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 );
Console.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 );
}
}