/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.testsupport.readerprovider;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import org.apache.lucene.index.StoredFieldVisitor.Status;
import org.hibernate.search.query.engine.impl.ReusableDocumentStoredFieldVisitor;
import org.hibernate.search.testsupport.TestForIssue;
import org.junit.Assert;
import org.junit.Test;
import static org.hibernate.search.testsupport.readerprovider.FieldSelectorLeakingReaderProvider.forgeFieldInfo;
/**
* ReaderProvider to inspect the type of FieldSelector being applied.
*
* @author Sanne Grinovero (C) 2014 Red Hat Inc.
*/
@TestForIssue(jiraKey = "HSEARCH-1738")
public class FieldSelectorTest {
@Test
public void testEagerStop() throws IOException {
HashSet<String> acceptedFieldNames = new HashSet<>();
acceptedFieldNames.add( "field one" );
acceptedFieldNames.add( "field two" );
ReusableDocumentStoredFieldVisitor fieldVisitor = new ReusableDocumentStoredFieldVisitor( acceptedFieldNames );
Assert.assertEquals( Status.NO, fieldVisitor.needsField( forgeFieldInfo( "made up field one" ) ) );
Assert.assertEquals( Status.YES, fieldVisitor.needsField( forgeFieldInfo( "field one" ) ) );
consumeField( fieldVisitor );
Assert.assertEquals( Status.NO, fieldVisitor.needsField( forgeFieldInfo( "made up field two" ) ) );
Assert.assertEquals( Status.NO, fieldVisitor.needsField( forgeFieldInfo( "made up field three" ) ) );
Assert.assertEquals( Status.YES, fieldVisitor.needsField( forgeFieldInfo( "field two" ) ) );
consumeField( fieldVisitor );
Assert.assertEquals( Status.STOP, fieldVisitor.needsField( forgeFieldInfo( "made up field four" ) ) );
//Fetch Document, prepare for processing next one:
fieldVisitor.getDocumentAndReset();
Assert.assertEquals( Status.NO, fieldVisitor.needsField( forgeFieldInfo( "made up field one" ) ) );
Assert.assertEquals( Status.YES, fieldVisitor.needsField( forgeFieldInfo( "field one" ) ) );
}
private void consumeField(ReusableDocumentStoredFieldVisitor fieldVisitor) throws IOException {
fieldVisitor.stringField( forgeFieldInfo( "anything" ), "anything".getBytes( StandardCharsets.UTF_8 ) );
}
}