From 5dac8551b8f1c84563eafca60e8a851779f2158b Mon Sep 17 00:00:00 2001 From: David Wayne Smiley Date: Tue, 5 Aug 2014 17:04:55 +0000 Subject: [PATCH] SOLR-6103: Test mult-valued DateRangeField (thanks Varun Thacker) git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1615961 13f79535-47bb-0310-9956-ffa450edef68 --- .../solr/collection1/conf/schema.xml | 2 +- .../solr/schema/DateRangeFieldTest.java | 33 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/solr/core/src/test-files/solr/collection1/conf/schema.xml b/solr/core/src/test-files/solr/collection1/conf/schema.xml index 40d43d59414..14a70f41731 100644 --- a/solr/core/src/test-files/solr/collection1/conf/schema.xml +++ b/solr/core/src/test-files/solr/collection1/conf/schema.xml @@ -499,7 +499,7 @@ - + diff --git a/solr/core/src/test/org/apache/solr/schema/DateRangeFieldTest.java b/solr/core/src/test/org/apache/solr/schema/DateRangeFieldTest.java index 1e47de5e235..21cf7a06090 100644 --- a/solr/core/src/test/org/apache/solr/schema/DateRangeFieldTest.java +++ b/solr/core/src/test/org/apache/solr/schema/DateRangeFieldTest.java @@ -19,6 +19,7 @@ package org.apache.solr.schema; import org.apache.solr.SolrTestCaseJ4; import org.junit.BeforeClass; +import org.junit.Test; public class DateRangeFieldTest extends SolrTestCaseJ4 { @@ -28,13 +29,14 @@ public class DateRangeFieldTest extends SolrTestCaseJ4 { } public void test() { + assertU(delQ("*:*")); assertU(adoc("id", "0", "dateRange", "[* TO *]")); assertU(adoc("id", "1", "dateRange", "2014-05-21T12:00:00.000Z")); assertU(adoc("id", "2", "dateRange", "[2000 TO 2014-05-21]")); assertU(commit()); //ensure stored value is the same (not toString of Shape) - assertQ(req("q", "id:1", "fl", "dateRange"), "//result/doc/str[.='2014-05-21T12:00:00.000Z']"); + assertQ(req("q", "id:1", "fl", "dateRange"), "//result/doc/arr[@name='dateRange']/str[.='2014-05-21T12:00:00.000Z']"); String[] commonParams = {"q", "{!field f=dateRange op=$op v=$qq}", "sort", "id asc"}; assertQ(req(commonParams, "qq", "[* TO *]"), xpathMatches(0, 1, 2)); @@ -49,6 +51,35 @@ public class DateRangeFieldTest extends SolrTestCaseJ4 { assertQ(req("q", "dateRange:[1999 TO 2001]"), xpathMatches(0, 2)); } + @Test + public void testMultiValuedDateRanges() { + assertU(delQ("*:*")); + assertU(adoc("id", "0", "dateRange", "[2000 TO 2010]", "dateRange", "[2011 TO 2014]")); + assertU(adoc("id", "1", "dateRange", "[2000-01 TO 2010-10]", "dateRange", "[2010-11 TO 2014-12]")); + assertU(adoc("id", "2", "dateRange", "[2000-01-01 TO 2010-08-01]", "dateRange", "[2010-08-01 TO 2014-12-01]")); + assertU(adoc("id", "3", "dateRange", "[1990 TO 1995]", "dateRange", "[1997 TO 1999]")); + assertU(commit()); + + String[] commonParams = {"q", "{!field f=dateRange op=$op v=$qq}", "sort", "id asc"}; + + assertQ(req(commonParams, "qq", "[2000 TO 2014]", "op", "IsWithin"), xpathMatches(0, 1, 2)); + assertQ(req(commonParams, "qq", "[2000 TO 2013]", "op", "IsWithin"), xpathMatches()); + assertQ(req(commonParams, "qq", "[2000 TO 2014]", "op", "Contains"), xpathMatches(0, 1)); + assertQ(req(commonParams, "qq", "[2000 TO 2015]", "op", "Contains"), xpathMatches()); + + assertQ(req(commonParams, "qq", "[2000-01 TO 2014-12]", "op", "IsWithin"), xpathMatches(0, 1, 2)); + assertQ(req(commonParams, "qq", "[2000 TO 2014-11]", "op", "IsWithin"), xpathMatches()); + assertQ(req(commonParams, "qq", "[2000-01 TO 2014-12]", "op", "Contains"), xpathMatches(0, 1)); + + assertQ(req(commonParams, "qq", "[2000-01-01 TO 2014-12-31]", "op", "IsWithin"), xpathMatches(0, 1, 2)); + assertQ(req(commonParams, "qq", "[2000-01-01 TO 2014-12-01]", "op", "Contains"), xpathMatches(0, 1, 2)); + assertQ(req(commonParams, "qq", "[2000 TO 2000]", "op", "Contains"), xpathMatches(0, 1, 2)); + + assertQ(req(commonParams, "qq", "[2000 TO 2000]", "op", "Contains"), xpathMatches(0, 1, 2)); + + assertQ(req(commonParams, "qq", "[1996-01-01 TO 1996-12-31]", "op", "Contains"), xpathMatches()); + } + private String[] xpathMatches(int... docIds) { String[] tests = new String[docIds != null ? docIds.length + 1 : 1]; tests[0] = "*[count(//doc)=" + (tests.length-1) + "]";