summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
Diffstat (limited to 'test/files')
-rw-r--r--test/files/jvm/xmlstuff.check36
-rw-r--r--test/files/jvm/xmlstuff.scala258
2 files changed, 294 insertions, 0 deletions
diff --git a/test/files/jvm/xmlstuff.check b/test/files/jvm/xmlstuff.check
new file mode 100644
index 0000000000..1963498001
--- /dev/null
+++ b/test/files/jvm/xmlstuff.check
@@ -0,0 +1,36 @@
+NodeSeq
+passed ok
+passed ok
+<result>
+ <title>Blabla</title>
+ <remarks> Hallo Welt. </remarks>
+</result><result>
+ <title>Blubabla</title>
+ <remarks> Hello Blu </remarks>
+</result><result>
+ <title>Blubabla</title>
+ <remarks> rem 2 </remarks>
+</result>
+List(<book><title>Blabla</title></book>)
+<result>
+ <name>John</name>
+ <street> Elm Street</street>
+ <city>Dolphin City</city>
+ <phone where="work"> +41 21 693 68 67</phone>
+ <phone where="mobile">+41 79 602 23 23</phone>
+</result>
+namespaces
+passed ok
+passed ok
+passed ok
+validation - elements
+passed ok
+passed ok
+passed ok
+passed ok
+validation - attributes
+passed ok
+passed ok
+passed ok
+passed ok
+passed ok
diff --git a/test/files/jvm/xmlstuff.scala b/test/files/jvm/xmlstuff.scala
new file mode 100644
index 0000000000..0d1aad5fac
--- /dev/null
+++ b/test/files/jvm/xmlstuff.scala
@@ -0,0 +1,258 @@
+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; &lt;&lt;", 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 = <foo>
+ <bar gt='ga' value="3"/>
+ <baz bazValue="8"/>
+ <bar value="5" gi='go'/>
+ </foo>;
+
+ 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 = <a name="bar"/>;
+
+ 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 =
+ <bks>
+ <book><title>Blabla</title></book>
+ <book><title>Blubabla</title></book>
+ <book><title>Baaaaaaalabla</title></book>
+ </bks>;
+
+ val reviews =
+ <reviews>
+ <entry><title>Blabla</title>
+ <remarks>
+ Hallo Welt.
+ </remarks>
+ </entry>
+ <entry><title>Blubabla</title>
+ <remarks>
+ Hello Blu
+ </remarks>
+ </entry>
+ <entry><title>Blubabla</title>
+ <remarks>
+ rem 2
+ </remarks>
+ </entry>
+ </reviews>;
+
+ Console.println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
+ for( val t <- books \\ "title";
+ val r <- reviews \\ "entry";
+ r \ "title" == t) yield
+ <result>
+ { t }
+ { r \ "remarks" }
+ </result>
+ ));
+
+ // example
+ Console.println(
+ for( val t @ <book><title>Blabla</title></book> <- new NodeSeq { val theSeq = books.child }.toList)
+ yield t
+ );
+val phoneBook =
+ <phonebook>
+ <descr>
+ This is the <b>phonebook</b> of the
+ <a href="http://acme.org">ACME</a> corporation.
+ </descr>
+ <entry>
+ <name>John</name>
+ <phone where="work"> +41 21 693 68 67</phone>
+ <phone where="mobile">+41 79 602 23 23</phone>
+ </entry>
+ </phonebook>;
+
+
+val addrBook =
+ <addrbook>
+ <descr>
+ This is the <b>addressbook</b> of the
+ <a href="http://acme.org">ACME</a> corporation.
+ </descr>
+ <entry>
+ <name>John</name>
+ <street> Elm Street</street>
+ <city>Dolphin City</city>
+ </entry>
+ </addrbook>;
+
+ Console.println( new scala.xml.PrettyPrinter(80, 5).formatNodes (
+ for( val t <- addrBook \\ "entry";
+ val r <- phoneBook \\ "entry";
+ t \ "name" == r \ "name") yield
+ <result>
+ { t.child }
+ { r \ "phone" }
+ </result>
+ ));
+
+
+ /* namespaces */
+ // begin tmp
+ Console.println("namespaces");
+ val cuckoo = <cuckoo xmlns="http://cuckoo.com">
+ <foo/>
+ <bar/>
+ </cuckoo>;
+ assertEquals( cuckoo.namespace, "http://cuckoo.com");
+ for( val n <- cuckoo \ "_" ) {
+ //Console.println("n = "+n);
+ //Console.println("n.prefix = "+n.prefix);
+ //Console.println("n.scope = "+n.scope);
+ assertEquals( n.namespace, "http://cuckoo.com");
+ }
+ // end tmp
+ /*
+
+DEPRECATED, don't support namespaces in pattern match anymore
+*/
+ /*
+ assertEquals( true, cuckoo match {
+ case <cuckoo xmlns="http://cuckoo.com">
+ <foo/>
+ <bar/>
+ </cuckoo> => true;
+ case _ => false; });
+*/
+ /*
+ // begin tmp
+ assertEquals( false, cuckoo match {
+ case <cuckoo>
+ <foo/>
+ <bar/>
+ </cuckoo> => 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( <foo><bar/><baz/><baz/></foo> ), 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( <foo><bar/><baz/><baz/></foo> ), true );
+ assertEquals( vtor( <foo>ab<bar/>cd<baz/>ed<baz/>gh</foo> ), true );
+ assertEquals( vtor( <foo> <ugha/> <bugha/> </foo> ), false );
+
+ Console.println("validation - attributes");
+ vtor.setContentModel(null);
+ vtor.setMetaData(List());
+ assertEquals( vtor( <foo bar="hello"/> ), false );
+
+ {
+ import scala.xml.dtd._ ;
+ vtor.setMetaData(List(AttrDecl("bar","CDATA",IMPLIED)));
+ }
+ assertEquals( vtor( <foo href="http://foo.com" bar="hello"/> ), false );
+ assertEquals( vtor( <foo bar="hello"/> ), true );
+
+ {
+ import scala.xml.dtd._ ;
+ vtor.setMetaData(List(AttrDecl("bar","CDATA",REQUIRED)));
+ }
+ assertEquals( vtor( <foo href="http://foo.com" /> ), false );
+ assertEquals( vtor( <foo bar="http://foo.com" /> ), true );
+
+ }
+}