/*
* 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.test.bridge.util;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;
import org.hibernate.search.bridge.util.impl.NumericFieldUtils;
import org.hibernate.search.exception.SearchException;
import org.hibernate.search.testsupport.TestForIssue;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* @author Gregory Fouquet
*/
@TestForIssue(jiraKey = "HSEARCH-2188")
public class NumericFieldUtilsTest {
@Test
public void testShouldRequireNumericRangeQuery() {
for ( Object val : getNumericTestValues() ) {
assertTrue(
"Value of type " + val.getClass() + " should require numeric range query",
NumericFieldUtils.requiresNumericRangeQuery( val )
);
}
}
@Test
public void testShouldNotRequireNumericRangeQuery() {
assertFalse(
"null value should not require numeric range query",
NumericFieldUtils.requiresNumericRangeQuery( null )
);
for ( Object val : getNonNumericTestValues() ) {
assertFalse(
"Value of type '" + val.getClass() + "' should not require numeric range query",
NumericFieldUtils.requiresNumericRangeQuery( val )
);
}
}
@Test
public void testShouldCreateExactMatchQuery() {
for ( Object val : getNumericTestValues() ) {
try {
NumericFieldUtils.createExactMatchQuery( "numField", val );
}
catch (SearchException e) {
fail( "Should create exact match query for value of type " + val.getClass() );
}
}
}
@Test
public void testShouldNotCreateExactMatchQuery() {
SearchException nullEx = null;
try {
NumericFieldUtils.createExactMatchQuery( "nonNumField", null );
}
catch (SearchException e) {
nullEx = e;
}
assertNotNull( "Should not create exact match query for null value", nullEx );
for ( Object val : getNonNumericTestValues() ) {
SearchException caught = null;
try {
NumericFieldUtils.createExactMatchQuery( "nonNumField", val );
}
catch (SearchException e) {
caught = e;
}
assertNotNull( "Should not create exact match query for value of type " + val.getClass(), caught );
}
}
private Object[] getNumericTestValues() {
Object[] numericValues = {
40.5d,
Byte.valueOf( "100" ),
Short.valueOf( (short) 4 ),
20L,
10,
30.5f,
new Date(),
nowCalendar()
};
return numericValues;
}
private Object[] getNonNumericTestValues() {
Object[] nonNumericValues = { "", BigDecimal.ONE };
return nonNumericValues;
}
private Calendar nowCalendar() {
return GregorianCalendar.getInstance( TimeZone.getTimeZone( "UTC" ), Locale.ENGLISH );
}
}