Package com.clarkparsia.pellet.test.query

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

// 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 junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import junit.framework.Assert;

import org.mindswap.pellet.test.AbstractKBTests;
import org.mindswap.pellet.utils.ATermUtils;

import aterm.ATermAppl;

import com.clarkparsia.pellet.sparqldl.engine.QueryEngine;
import com.clarkparsia.pellet.sparqldl.model.Query;
import com.clarkparsia.pellet.sparqldl.model.Query.VarType;
import com.clarkparsia.pellet.sparqldl.model.QueryAtom;
import com.clarkparsia.pellet.sparqldl.model.QueryImpl;
import com.clarkparsia.pellet.sparqldl.model.QueryResult;
import com.clarkparsia.pellet.sparqldl.model.ResultBinding;

/**
* <p>
* Title:
* </p>
* <p>
* Description:
* </p>
* <p>
* Copyright: Copyright (c) 2009
* </p>
* <p>
* Company: Clark & Parsia, LLC. <http://www.clarkparsia.com>
* </p>
*
* @author Evren Sirin
*/
public abstract class AbstractQueryTest extends AbstractKBTests {
  protected static final ATermAppl  x  = ATermUtils.makeVar( "x" );
  protected static final ATermAppl  y  = ATermUtils.makeVar( "y" );
  protected static final ATermAppl  z  = ATermUtils.makeVar( "z" );
 
  protected ATermAppl[] select(ATermAppl... vars) {
    return vars;
  }
 
  protected QueryAtom[] where(QueryAtom... atoms) {
    return atoms;
  }

  protected Query ask(QueryAtom... atoms) {
    return query( new ATermAppl[0], atoms );
  }

  protected Query query(ATermAppl[] vars, QueryAtom[] atoms) {
    Query q = new QueryImpl( kb, true );
    for( ATermAppl var : vars ) {     
      q.addResultVar( var );
    }
   
    for( QueryAtom atom : atoms ) {
      q.add( atom );
    }
   
    for( ATermAppl var : q.getUndistVars() ) {
      q.addDistVar( var, VarType.INDIVIDUAL );
    }
   
    return q;
  }

  protected void testQuery(Query query, boolean expected) {
    QueryResult result = QueryEngine.exec( query );

    assertEquals( expected, !result.isEmpty() );
  }

  protected void testQuery(Query query, ATermAppl[]... values) {
    List<ATermAppl> resultVars = query.getResultVars();

    Map<List<ATermAppl>, Integer> answers = new HashMap<List<ATermAppl>, Integer>();
    for( int i = 0; i < values.length; i++ ) {
      List<ATermAppl> answer = Arrays.asList( values[i] );
      Integer count = answers.get( answer );
      if( count == null ) {
        answers.put( answer, 1 );
      }
      else {
        answers.put( answer, count + 1 );
      }

    }

    QueryResult result = QueryEngine.exec( query );
    for( ResultBinding binding : result ) {
      List<ATermAppl> list = new ArrayList<ATermAppl>( resultVars.size() );
      for( ATermAppl var : resultVars ) {
        list.add( binding.getValue( var ) );
      }

      Integer count = answers.get( list );
      if( count == null ) {
        Assert.fail( "Unexpected binding in the result: " + list );
      }
      else if( count == 1 ) {
        answers.remove( list );
      }
      else {
        answers.put( list, count - 1 );
      }
    }

    assertTrue( "Unfound bindings: " + answers.keySet(), answers.isEmpty() );
  }

}
TOP

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

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.