Skip to content
This repository has been archived by the owner on May 4, 2023. It is now read-only.

Commit

Permalink
Make CustomQueryParserTest timezone-insensitive.
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert Newson committed Feb 4, 2010
1 parent b7c592f commit 8e81244
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 13 deletions.
Expand Up @@ -30,8 +30,6 @@
public enum FieldType {

DATE(8, SortField.LONG) {
private final String[] patterns = new String[] { "yyyy-MM-dd'T'HH:mm:ssZZ", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-ddZZ",
"yyyy-MM-dd" };

@Override
public NumericField toField(final String name, final String value, final ViewSettings settings) throws ParseException {
Expand All @@ -44,13 +42,6 @@ public Query toRangeQuery(final String name, final String lower, final String up
return NumericRangeQuery.newLongRange(name, precisionStep, toDate(lower), toDate(upper), inclusive, inclusive);
}

private long toDate(final String str) throws ParseException {
try {
return DateUtils.parseDate(str.toUpperCase(), patterns).getTime();
} catch (final java.text.ParseException e) {
throw new ParseException(e.getMessage());
}
}
},
DOUBLE(8, SortField.DOUBLE) {
@Override
Expand Down Expand Up @@ -133,6 +124,9 @@ private static NumericField field(final String name, final int precisionStep, fi
return new NumericField(name, precisionStep, settings.getStore(), settings.getIndex().isIndexed());
}

public static final String[] DATE_PATTERNS = new String[] { "yyyy-MM-dd'T'HH:mm:ssZZ", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-ddZZ",
"yyyy-MM-dd" };

private final int sortField;

protected final int precisionStep;
Expand All @@ -151,4 +145,12 @@ public final int toSortField() {
return sortField;
}

public static long toDate(final String str) throws ParseException {
try {
return DateUtils.parseDate(str.toUpperCase(), DATE_PATTERNS).getTime();
} catch (final java.text.ParseException e) {
throw new ParseException(e.getMessage());
}
}

}
Expand Up @@ -4,12 +4,15 @@
import static org.junit.Assert.assertThat;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.NumericRangeQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.util.Version;
import org.junit.Before;
import org.junit.Test;

import com.github.rnewson.couchdb.lucene.couchdb.FieldType;

public class CustomQueryParserTest {

private CustomQueryParser parser;
Expand Down Expand Up @@ -46,25 +49,29 @@ public void doubleRangeQuery() throws Exception {
@Test
public void dateRangeQuery() throws Exception {
final Query q = parser.parse("blah<date>:[2000-01-01 TO 2010-02-04]");
assertRange(q, Long.class, 946684800000L, 1265241600000L);
assertRange(q, Long.class, time("2000-01-01"), time("2010-02-04"));
}

@Test
public void dateTimeRangeQuery() throws Exception {
final Query q = parser.parse("blah<date>:[2000-01-01T00:00:01 TO 2010-02-04T00:00:01]");
assertRange(q, Long.class, 946684801000L, 1265241601000L);
assertRange(q, Long.class, time("2000-01-01T00:00:01"), time("2010-02-04T00:00:01"));
}

@Test
public void dateTimeZoneRangeQuery() throws Exception {
final Query q = parser.parse("blah<date>:[2000-01-01-0100 TO 2010-02-04-0100]");
assertRange(q, Long.class, 946688400000L, 1265245200000L);
assertRange(q, Long.class, time("2000-01-01-0100"), time("2010-02-04-0100"));
}

@Test
public void dateTimeTimeZoneRangeQuery() throws Exception {
final Query q = parser.parse("blah<date>:[2000-01-01T00:00:00-0100 TO 2010-02-04T00:00:00-0100]");
assertRange(q, Long.class, 946688400000L, 1265245200000L);
assertRange(q, Long.class, time("2000-01-01T00:00:00-0100"), time("2010-02-04T00:00:00-0100"));
}

private long time(final String str) throws ParseException {
return FieldType.toDate(str);
}

private void assertRange(final Query q, final Class<?> type, final Number min, final Number max) {
Expand Down

0 comments on commit 8e81244

Please sign in to comment.