/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.rio;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Collection;
import junit.framework.TestCase;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.ValueFactoryImpl;
import org.openrdf.rio.helpers.StatementCollector;
/**
* @author Arjohn Kampman
*/
public abstract class RDFWriterTest extends TestCase {
protected RDFWriterFactory rdfWriterFactory;
protected RDFParserFactory rdfParserFactory;
protected RDFWriterTest(RDFWriterFactory writerF, RDFParserFactory parserF) {
rdfWriterFactory = writerF;
rdfParserFactory = parserF;
}
public void testPrefixRedefinition()
throws RDFHandlerException, RDFParseException, IOException
{
String ns1 = "a:";
String ns2 = "b:";
String ns3 = "c:";
ValueFactory vf = new ValueFactoryImpl();
URI uri1 = vf.createURI(ns1, "r1");
URI uri2 = vf.createURI(ns2, "r2");
URI uri3 = vf.createURI(ns3, "r3");
Statement st = vf.createStatement(uri1, uri2, uri3);
StringWriter writer = new StringWriter();
RDFWriter rdfWriter = rdfWriterFactory.getWriter(writer);
rdfWriter.handleNamespace("", ns1);
rdfWriter.handleNamespace("", ns2);
rdfWriter.handleNamespace("", ns3);
rdfWriter.startRDF();
rdfWriter.handleStatement(st);
rdfWriter.endRDF();
StringReader reader = new StringReader(writer.toString());
RDFParser rdfParser = rdfParserFactory.getParser();
rdfParser.setValueFactory(vf);
StatementCollector stCollector = new StatementCollector();
rdfParser.setRDFHandler(stCollector);
try {
rdfParser.parse(reader, "foo:bar");
}
catch (RDFParseException e) {
System.err.println("Failed to parse generated RDF document:");
System.err.println(writer.toString());
throw e;
}
Collection<Statement> statements = stCollector.getStatements();
assertEquals("Unexpected number of statements", 1, statements.size());
Statement parsedSt = statements.iterator().next();
assertEquals("Written and parsed statements are not equal", st, parsedSt);
}
public void testIllegalPrefix()
throws RDFHandlerException, RDFParseException, IOException
{
String ns1 = "a:";
String ns2 = "b:";
String ns3 = "c:";
ValueFactory vf = new ValueFactoryImpl();
URI uri1 = vf.createURI(ns1, "r1");
URI uri2 = vf.createURI(ns2, "r2");
URI uri3 = vf.createURI(ns3, "r3");
Statement st = vf.createStatement(uri1, uri2, uri3);
StringWriter writer = new StringWriter();
RDFWriter rdfWriter = rdfWriterFactory.getWriter(writer);
rdfWriter.handleNamespace("1", ns1);
rdfWriter.handleNamespace("_", ns2);
rdfWriter.handleNamespace("a%", ns3);
rdfWriter.startRDF();
rdfWriter.handleStatement(st);
rdfWriter.endRDF();
StringReader reader = new StringReader(writer.toString());
RDFParser rdfParser = rdfParserFactory.getParser();
rdfParser.setValueFactory(vf);
StatementCollector stCollector = new StatementCollector();
rdfParser.setRDFHandler(stCollector);
try {
rdfParser.parse(reader, "foo:bar");
}
catch (RDFParseException e) {
System.err.println("Failed to parse generated RDF document:");
System.err.println(writer.toString());
throw e;
}
Collection<Statement> statements = stCollector.getStatements();
assertEquals("Unexpected number of statements", 1, statements.size());
Statement parsedSt = statements.iterator().next();
assertEquals("Written and parsed statements are not equal", st, parsedSt);
}
}