/* * Copyright Aduna (http://www.aduna-software.com/) (c) 2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.query.parser.sparql; import java.io.File; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import java.util.Date; import junit.framework.AssertionFailedError; import junit.framework.Test; import junit.framework.TestListener; import junit.framework.TestResult; import org.openrdf.model.BNode; import org.openrdf.model.Resource; import org.openrdf.model.ValueFactory; import org.openrdf.model.vocabulary.RDF; import org.openrdf.model.vocabulary.XMLSchema; import org.openrdf.repository.Repository; import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; import org.openrdf.repository.sail.SailRepository; import org.openrdf.rio.RDFFormat; import org.openrdf.rio.RDFWriterFactory; import org.openrdf.rio.RDFWriterRegistry; import org.openrdf.sail.memory.MemoryStore; /** * @author Arjohn Kampman */ public class EarlReport { protected static Repository earlRepository; protected static ValueFactory vf; protected static RepositoryConnection con; protected static Resource projectNode; protected static Resource asserterNode; public static void main(String[] args) throws Exception { earlRepository = new SailRepository(new MemoryStore()); earlRepository.initialize(); vf = earlRepository.getValueFactory(); con = earlRepository.getConnection(); con.setAutoCommit(false); con.setNamespace("rdf", RDF.NAMESPACE); con.setNamespace("xsd", XMLSchema.NAMESPACE); con.setNamespace("doap", DOAP.NAMESPACE); con.setNamespace("earl", EARL.NAMESPACE); con.setNamespace("dc", DC.NAMESPACE); projectNode = vf.createBNode(); BNode releaseNode = vf.createBNode(); con.add(projectNode, RDF.TYPE, DOAP.PROJECT); con.add(projectNode, DOAP.NAME, vf.createLiteral("OpenRDF Sesame")); con.add(projectNode, DOAP.RELEASE, releaseNode); con.add(releaseNode, RDF.TYPE, DOAP.VERSION); con.add(releaseNode, DOAP.NAME, vf.createLiteral("Sesame 2.0-SNAPSHOT")); SimpleDateFormat xsdDataFormat = new SimpleDateFormat("yyyy-MM-dd"); String currentDate = xsdDataFormat.format(new Date()); con.add(releaseNode, DOAP.CREATED, vf.createLiteral(currentDate, XMLSchema.DATE)); asserterNode = vf.createBNode(); con.add(asserterNode, RDF.TYPE, EARL.SOFTWARE); con.add(asserterNode, DC.TITLE, vf.createLiteral("OpenRDF SPARQL compliance test")); TestResult testResult = new TestResult(); EarlTestListener listener = new EarlTestListener(); testResult.addListener(listener); ManifestTest.suite().run(testResult); SPARQLSyntaxTest.suite().run(testResult); con.setAutoCommit(true); RDFWriterFactory factory = RDFWriterRegistry.getInstance().get(RDFFormat.TURTLE); File outFile = File.createTempFile("sesame-sparql-compliance", "." + RDFFormat.TURTLE.getDefaultFileExtension()); FileOutputStream out = new FileOutputStream(outFile); try { con.export(factory.getWriter(out)); } finally { out.close(); } con.close(); earlRepository.shutDown(); System.out.println("EARL output written to " + outFile); } protected static class EarlTestListener implements TestListener { private int errorCount; private int failureCount; public void startTest(Test test) { errorCount = failureCount = 0; } public void endTest(Test test) { String testURI = null; ; if (test instanceof SPARQLQueryTest) { testURI = ((SPARQLQueryTest)test).testURI; } else if (test instanceof SPARQLSyntaxTest) { testURI = ((SPARQLSyntaxTest)test).testURI; } else { throw new RuntimeException("Unexpected test type: " + test.getClass()); } try { BNode testNode = vf.createBNode(); BNode resultNode = vf.createBNode(); con.add(testNode, RDF.TYPE, EARL.ASSERTION); con.add(testNode, EARL.ASSERTEDBY, asserterNode); con.add(testNode, EARL.MODE, EARL.AUTOMATIC); con.add(testNode, EARL.SUBJECT, projectNode); con.add(testNode, EARL.TEST, vf.createURI(testURI)); con.add(testNode, EARL.RESULT, resultNode); con.add(resultNode, RDF.TYPE, EARL.TESTRESULT); if (errorCount > 0) { con.add(resultNode, EARL.OUTCOME, EARL.FAIL); } else if (failureCount > 0) { con.add(resultNode, EARL.OUTCOME, EARL.FAIL); } else { con.add(resultNode, EARL.OUTCOME, EARL.PASS); } } catch (RepositoryException e) { throw new RuntimeException(e); } } public void addError(Test test, Throwable t) { errorCount++; } public void addFailure(Test test, AssertionFailedError error) { failureCount++; } } }