Skip to content

Commit 574dc7f

Browse files
committed
Add date math test coverage for issue #101
The Lucene parser correctly handles date math expressions like now/d+30d/d in range queries. Strengthened the existing CanHandleDateRange test with round-trip and node-level assertions, and added date math variations to the ValidQueries theory. Closes #101 Made-with: Cursor
1 parent f70d583 commit 574dc7f

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

tests/Foundatio.Parsers.LuceneQueries.Tests/QueryParserTests.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public void DataBackslashShouldBeValidBeginningOfString()
146146
}
147147

148148
[Fact]
149-
public void CanHandleDateRange()
149+
public async Task CanHandleDateRange()
150150
{
151151
#if FALSE
152152
var tracer = new LoggingTracer(_logger, reportPerformance: true);
@@ -160,6 +160,19 @@ public void CanHandleDateRange()
160160
string query = "mydate:[now/d TO now/d+30d/d]";
161161
var result = sut.Parse(query);
162162
_logger.LogInformation(DebugQueryVisitor.Run(result));
163+
164+
string generatedQuery = await GenerateQueryVisitor.RunAsync(result);
165+
Assert.Equal(query, generatedQuery);
166+
167+
var groupNode = result as GroupNode;
168+
Assert.NotNull(groupNode);
169+
var rangeNode = groupNode.Left as TermRangeNode;
170+
Assert.NotNull(rangeNode);
171+
Assert.Equal("mydate", rangeNode.Field);
172+
Assert.Equal("now/d", rangeNode.Min);
173+
Assert.Equal("now/d+30d/d", rangeNode.Max);
174+
Assert.True(rangeNode.MinInclusive);
175+
Assert.True(rangeNode.MaxInclusive);
163176
}
164177

165178
[Fact]

tests/Foundatio.Parsers.LuceneQueries.Tests/QueryParserValidationTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public QueryParserValidationTests(ITestOutputHelper output) : base(output)
5050
[InlineData("book.\\*:(quick brown)")]
5151
[InlineData("date:[now/d-4d TO now/d+1d}")]
5252
[InlineData("(date:[now/d-4d TO now/d+1d})")]
53+
[InlineData("date:[now/d TO now/d+30d/d]")]
54+
[InlineData("date:[now/d TO now+30d/d]")]
55+
[InlineData("date:>now+1h")]
56+
[InlineData("date:<now-1d/d")]
5357
[InlineData("data.date:>now")]
5458
[InlineData("data.date:[now/d-4d TO now/d+1d}")]
5559
[InlineData("data.date:[2012-01-01 TO 2012-12-31]")]

0 commit comments

Comments
 (0)