/**
* Copyright (C) 2012 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.processor.XQuery;
import org.junit.Test;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
import java.io.IOException;
import java.io.StringReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Vector;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public class ObjectReceiverTest extends ObjectReceiver {
public String publicString;
public int intValue = -1;
public boolean booleanValue = false;
public URI uri;
class Foo extends ObjectReceiver {
public String string;
public boolean booleanValue = false;
public Vector<String> repeatableString;
public Vector<Integer> repeatableInt;
public Vector<Bar> repeatableBar;
public Bar bar;
public Foo() {}
class Bar extends ObjectReceiver {
public String string;
public Bar() {}
}
}
public Foo foo;
@Test
public void publicSimpleElement() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<publicString>a public string</publicString>")));
assertEquals("a public string", publicString);
}
@Test
public void simpleElement() throws IOException, SAXException, ClassNotFoundException {
/*
Fields that are not declared public cannot be used
*/
Exception caught = null;
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
try {
reader.parse(new InputSource(new StringReader("<string>a string</string>")));
} catch (SAXException e) {
assertEquals(Class.forName("java.lang.NoSuchFieldException"), e.getException().getClass());
caught = e;
}
assertNotNull(caught);
}
@Test
public void privateSimpleElement() throws IOException, SAXException, ClassNotFoundException {
/*
Private fields cannot be used
*/
Exception caught = null;
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
try {
reader.parse(new InputSource(new StringReader("<privateString>a private string</privateString>")));
} catch (SAXException e) {
assertEquals(Class.forName("java.lang.NoSuchFieldException"), e.getException().getClass());
caught = e;
}
assertNotNull(caught);
}
@Test
public void intValue() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<intValue>5</intValue>")));
assertEquals(5, intValue);
}
@Test
public void booleanValue() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<booleanValue>true</booleanValue>")));
assertEquals(true, booleanValue);
reader.parse(new InputSource(new StringReader("<booleanValue>false</booleanValue>")));
assertEquals(false, booleanValue);
}
@Test
public void uri() throws IOException, SAXException, URISyntaxException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<uri>http://example.com</uri>")));
assertEquals(new URI("http://example.com"), uri);
}
@Test
public void foo() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<foo><string>A string</string><booleanValue>true</booleanValue></foo>")));
assertNotNull(foo);
assertEquals("A string", foo.string);
assertEquals(true, foo.booleanValue);
reader.parse(new InputSource(new StringReader("<foo><string>Another string</string><booleanValue>false</booleanValue></foo>")));
assertNotNull(foo);
assertEquals("Another string", foo.string);
assertEquals(false, foo.booleanValue);
}
@Test
public void bar() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<foo><bar><string>bar</string></bar><string>A string</string><booleanValue>true</booleanValue></foo>")));
assertNotNull(foo.bar);
assertEquals("bar", foo.bar.string);
}
@Test
public void comment() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<publicString>a public<!-- comment--> string</publicString>")));
assertEquals("a public string", publicString);
}
@Test
public void emptyString() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<publicString/>")));
assertEquals("", publicString);
}
@Test
public void repeatableString() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<foo><repeatableString>String 1</repeatableString><repeatableString>String 2</repeatableString></foo>")));
assertNotNull(foo.repeatableString);
assertEquals(2, foo.repeatableString.size());
String string = foo.repeatableString.get(0);
assertEquals(string, "String 1");
string = foo.repeatableString.get(1);
assertEquals(string, "String 2");
}
@Test
public void repeatableInt() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<foo><repeatableInt>10</repeatableInt><repeatableInt>-3</repeatableInt></foo>")));
assertNotNull(foo.repeatableInt);
assertEquals(2, foo.repeatableInt.size());
Integer integer = foo.repeatableInt.get(0);
assertEquals(integer, new Integer(10));
integer = foo.repeatableInt.get(1);
assertEquals(integer, new Integer(-3));
}
@Test
public void repeatableBar() throws IOException, SAXException {
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(this);
reader.parse(new InputSource(new StringReader("<foo><repeatableBar><string>A string</string></repeatableBar><repeatableBar/></foo>")));
assertNotNull(foo.repeatableBar);
assertEquals(2, foo.repeatableBar.size());
Foo.Bar bar = foo.repeatableBar.get(0);
assertEquals(bar.string, "A string");
bar = foo.repeatableBar.get(1);
assertNull(bar.string);
}
}