/* * ModeShape (http://www.modeshape.org) * * 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.modeshape.jcr.index.lucene; import javax.jcr.query.Query; import javax.jcr.query.QueryResult; import org.junit.BeforeClass; import org.junit.Test; import org.modeshape.common.util.FileUtil; import org.modeshape.jcr.JcrQueryManagerTest; /** * Extension of {@link JcrQueryManagerTest} which runs queries against Lucene indexes. */ @SuppressWarnings("deprecation") public class LuceneIndexProviderQueryTest extends JcrQueryManagerTest { @BeforeClass public static void beforeAll() throws Exception { // Clean up the indexes and storage ... FileUtil.delete("target/LuceneIndexProviderQueryTest"); String configFileName = LuceneIndexProviderQueryTest.class.getSimpleName() + ".json"; JcrQueryManagerTest.beforeAll(configFileName); } @Override @Test public void shouldBeAbleToExecuteXPathQueryWithCompoundCriteria() throws Exception { //overrides the default to add explicit property name in FTS @car:engine, otherwise the 'textFromCarMaker' index would be used //and no results would be returned String xpath = "/jcr:root/Cars//element(*,car:Car)[@car:year='2008' and jcr:contains(@car:engine, '\"liters V 12\"')]"; Query query = getSession().getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH); QueryResult result = query.execute(); String[] columnNames = {"jcr:primaryType", "jcr:mixinTypes", "jcr:path", "jcr:score", "jcr:created", "jcr:createdBy", "jcr:name", "mode:localName", "mode:depth", "mode:id", "car:mpgCity", "car:userRating", "car:mpgHighway", "car:engine", "car:model", "car:year", "car:maker", "car:lengthInInches", "car:valueRating", "car:wheelbaseInInches", "car:msrp", "car:alternateModels"}; validateQuery().rowCount(1).hasColumns(columnNames).validate(query, result); // Query again with a different criteria that should return no nodes ... xpath = "/jcr:root/Cars//element(*,car:Car)[@car:year='2007' and jcr:contains(@car:engine, '\"liter V 12\"')]"; query = getSession().getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH); result = query.execute(); validateQuery().rowCount(0).hasColumns(columnNames).validate(query, result); } }