/*
* Copyright 2008 Fedora Commons, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mulgara.protocol;
// JUnit
import junit.framework.*;
// Java 2 standard packages
import java.io.ByteArrayOutputStream;
import java.net.URI;
import java.util.Arrays;
import java.util.List;
// Locally written packages
import org.mulgara.query.AnswerImpl;
import org.mulgara.query.BooleanAnswer;
import org.mulgara.query.Variable;
import org.mulgara.query.rdf.BlankNodeImpl;
import org.mulgara.query.rdf.LiteralImpl;
import org.mulgara.query.rdf.URIReferenceImpl;
import org.mulgara.util.ResultSetRow;
import org.mulgara.util.MemoryResultSet;
/**
* Test case for {@link StreamedTqlXMLAnswer}.
*
* @created Jul 8, 2008
* @author Paula Gearon
* @copyright © 2008 <a href="http://www.fedora-commons.org/">Fedora Commons</a>
*/
public class StreamedTqlXMLAnswerUnitTest extends TestCase {
/**
* Test instance.
* <table>
* <thead>
* <tr><th>x</th> <th>y</th></tr>
* </thead>
* <tbody>
* <tr><td>X1</td><td>Y1</td></tr>
* <tr><td>X2</td><td>Y2</td></tr>
* </tbody>
* </table>
*/
private AnswerImpl answer;
private AnswerImpl empty;
private ByteArrayOutputStream output;
/**
* Constructs a new answer test with the given name.
* @param name the name of the test
*/
public StreamedTqlXMLAnswerUnitTest(String name) {
super(name);
}
/**
* Hook for test runner to obtain a test suite from.
* @return The test suite
*/
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new StreamedTqlXMLAnswerUnitTest("testEmptyConstructor"));
suite.addTest(new StreamedTqlXMLAnswerUnitTest("testEmptyConstructorPretty"));
suite.addTest(new StreamedTqlXMLAnswerUnitTest("testBooleanAnswer"));
suite.addTest(new StreamedTqlXMLAnswerUnitTest("testBooleanAnswerPretty"));
suite.addTest(new StreamedTqlXMLAnswerUnitTest("testPrettyPrint"));
suite.addTest(new StreamedTqlXMLAnswerUnitTest("testCompactPrint"));
return suite;
}
/**
* Default text runner.
* @param args The command line arguments
*/
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
/**
* Tests an empty answer.
* @throws Exception On error
*/
public void testEmptyConstructor() throws Exception {
StreamedTqlXMLAnswer a = new StreamedTqlXMLAnswer(empty, output);
a.emit();
assertEquals(EMPTY, output.toString());
}
/**
* Tests an empty answer.
* @throws Exception On error
*/
public void testEmptyConstructorPretty() throws Exception {
StreamedTqlXMLAnswer a = new StreamedTqlXMLAnswer(empty, output);
a.setPrettyPrint(true);
a.emit();
assertEquals(EMPTY_P, output.toString());
a.setPrettyPrint(false);
output.reset();
a.emit();
assertEquals(EMPTY, output.toString());
}
/**
* Tests a boolean answer.
* @throws Exception On error
*/
public void testBooleanAnswer() throws Exception {
StreamedTqlXMLAnswer a = new StreamedTqlXMLAnswer(new BooleanAnswer(true), output);
a.emit();
assertEquals(TRUE, output.toString());
}
/**
* Tests a boolean answer.
* @throws Exception On error
*/
public void testBooleanAnswerPretty() throws Exception {
StreamedTqlXMLAnswer a = new StreamedTqlXMLAnswer(new BooleanAnswer(true), output);
a.emit();
assertEquals(TRUE, output.toString());
a.setPrettyPrint(true);
output.reset();
a.emit();
assertEquals(TRUE_P, output.toString());
a.setPrettyPrint(false);
output.reset();
a.emit();
assertEquals(TRUE, output.toString());
}
/**
* Test main structure.
*/
public void testPrettyPrint() throws Exception {
StreamedTqlXMLAnswer a = new StreamedTqlXMLAnswer(answer, output);
a.setPrettyPrint(true);
a.emit();
assertEquals(ANSWER_P, output.toString());
}
/**
* Test main structure.
*/
public void testCompactPrint() throws Exception {
StreamedTqlXMLAnswer a = new StreamedTqlXMLAnswer(answer, output);
a.emit();
assertEquals(ANSWER, output.toString());
}
/**
* Populate the test answer.
* @throws Exception Error setting up the ResultSet
*/
protected void setUp() throws Exception {
MemoryResultSet trs1 = new MemoryResultSet(new String[] { "x", "y" });
ResultSetRow row;
row = new ResultSetRow(trs1);
row.setObject("x", new LiteralImpl("X1"));
row.setObject("y", new URIReferenceImpl(URI.create("urn:y1")));
trs1.addRow(row);
row = new ResultSetRow(trs1);
row.setObject("x", new LiteralImpl("X2", "en"));
row.setObject("y", new BlankNodeImpl(42));
trs1.addRow(row);
answer = new AnswerImpl(trs1);
List<Variable> variables = Arrays.asList(new Variable[] { new Variable("x") });
empty = new AnswerImpl(variables);
output = new ByteArrayOutputStream();
}
/**
* Clean up the test answer.
*/
public void tearDown() {
answer.close();
empty.close();
}
static final String EMPTY = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<answer xmlns=\"http://mulgara.org/tql#\"><query><variables></variables></query></answer>";
static final String EMPTY_P = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<answer xmlns=\"http://mulgara.org/tql#\">\n" +
" <query>\n" +
" <variables>\n" +
" </variables>\n" +
" </query>\n" +
"</answer>";
static final String TRUE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<answer xmlns=\"http://mulgara.org/tql#\">" +
"<query><variables><k0/></variables>" +
"<solution><k0 datatype=\"http://www.w3.org/2001/XMLSchema#boolean\">true</k0></solution>" +
"</query></answer>";
static final String TRUE_P = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<answer xmlns=\"http://mulgara.org/tql#\">\n" +
" <query>\n" +
" <variables>\n" +
" <k0/>\n" +
" </variables>\n" +
" <solution>\n" +
" <k0 datatype=\"http://www.w3.org/2001/XMLSchema#boolean\">true</k0>\n" +
" </solution>\n" +
" </query>\n" +
"</answer>";
static final String ANSWER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<answer xmlns=\"http://mulgara.org/tql#\">" +
"<query><variables><x/><y/></variables>" +
"<solution><x>X1</x><y resource=\"urn:y1\"/></solution>" +
"<solution><x language=\"en\">X2</x><y blank-node=\"_node42\"/></solution>" +
"</query>" +
"</answer>";
static final String ANSWER_P = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<answer xmlns=\"http://mulgara.org/tql#\">\n" +
" <query>\n" +
" <variables>\n" +
" <x/>\n" +
" <y/>\n" +
" </variables>\n" +
" <solution>\n" +
" <x>X1</x>\n" +
" <y resource=\"urn:y1\"/>\n" +
" </solution>\n" +
" <solution>\n" +
" <x language=\"en\">X2</x>\n" +
" <y blank-node=\"_node42\"/>\n" +
" </solution>\n" +
" </query>\n" +
"</answer>";
}