Package com.clarkparsia.pellet.test.query

Source Code of com.clarkparsia.pellet.test.query.TestParameterizedQuery

// Copyright (c) 2006 - 2008, Clark & Parsia, LLC. <http://www.clarkparsia.com>
// This source code is available under the terms of the Affero General Public
// License v3.
//
// Please see LICENSE.txt for full license terms, including the availability of
// proprietary exceptions.
// Questions, comments, or requests for clarification: licensing@clarkparsia.com

package com.clarkparsia.pellet.test.query;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.mindswap.pellet.jena.PelletReasonerFactory;

import com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory;
import com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.QueryEngineType;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.query.DatasetFactory;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.QuerySolutionMap;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;

/**
* <p>
* Title:
* </p>
* <p>
* Description:
* </p>
* <p>
* Copyright: Copyright (c) 2008
* </p>
* <p>
* Company: Clark & Parsia, LLC. <http://www.clarkparsia.com>
* </p>
*
* @author Markus Stocker
* @author Evren Sirin
*/
@RunWith(Parameterized.class)
public class TestParameterizedQuery {
  private static final String  NS    = "http://example.org#";
  private static final String  PREFIX  = "PREFIX : <" + NS + ">";

  private static Dataset    dataset;

  private static QuerySolutionMap binding(String var, RDFNode value) {
    QuerySolutionMap b = new QuerySolutionMap();
    b.add( var, value );

    return b;
  }

  private static QuerySolutionMap binding(String var1, RDFNode value1, String var2, RDFNode value2) {
    QuerySolutionMap b = new QuerySolutionMap();
    b.add( var1, value1 );
    b.add( var2, value2 );

    return b;
  }

  @Parameters
  public static List<Object[]> getParameters() {
    Property pred = ResourceFactory.createProperty( NS + "p" );
    Resource x1 = ResourceFactory.createResource( NS + "x1" );
    Resource y1 = ResourceFactory.createResource( NS + "y1" );
    Resource x2 = ResourceFactory.createResource( NS + "x2" );
    Resource y2 = ResourceFactory.createResource( NS + "y2" );

    OntModel m = ModelFactory.createOntologyModel( PelletReasonerFactory.THE_SPEC );
    m.add( x1, pred, y1 );
    m.add( x2, pred, y2 );

    dataset = DatasetFactory.create( m );

    Query q1 = QueryFactory.create( PREFIX + "SELECT ?x WHERE { ?x :p ?y }" );
    Query q2 = QueryFactory.create( PREFIX + "SELECT ?x ?y WHERE { ?x :p ?y }" );
    Query q3 = QueryFactory.create( PREFIX + "SELECT * WHERE { ?x :p ?y }" );
    Query q4 = QueryFactory.create( PREFIX + "SELECT * WHERE { :x1 :p ?y }" );

    QuerySolutionMap b1 = binding( "y", y1 );
    QuerySolutionMap b2 = binding( "x", x1 );
    QuerySolutionMap b3 = binding( "y", y1, "x", x1 );
    QuerySolutionMap b4 = null;

    List<Object[]> params = new ArrayList<Object[]>();

    for( QueryEngineType qe : QueryEngineType.values() ) {
      params.add( new Object[] { qe, q1, b1, b2 } );
      params.add( new Object[] { qe, q2, b2, b3 } );
      params.add( new Object[] { qe, q3, b1, b3 } );
      params.add( new Object[] { qe, q4, b4, b1 } );
    }

    return params;
  }

  private final QueryEngineType  queryEngine;
  private final Query      query;
  private final QuerySolution  initialBinding;
  private final QuerySolution  expected;

  public TestParameterizedQuery(QueryEngineType queryEngine, Query query,
      QuerySolutionMap initialBinding, QuerySolutionMap expectedResults) {
    this.queryEngine = queryEngine;
    this.query = query;
    this.initialBinding = initialBinding;
    this.expected = expectedResults;
  }

  @Test
  public void test() {
    QueryExecution qe = SparqlDLExecutionFactory.create( query, dataset, initialBinding,
        queryEngine );
    ResultSet rs = qe.execSelect();

    if( !rs.hasNext() )
      assertTrue( "No results found", rs.hasNext() );

    QuerySolution computed = rs.nextSolution();

    for( Iterator<?> i = rs.getResultVars().iterator(); i.hasNext(); ) {
      String var = i.next().toString();
      assertEquals( "Different result for " + var, expected.get( var ), computed.get( var ) );
    }

    assertFalse( "Extra results found", rs.hasNext() );
  }
}
TOP

Related Classes of com.clarkparsia.pellet.test.query.TestParameterizedQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.