/
ApacheLuceneSupportZSpec.scala
140 lines (88 loc) · 4.89 KB
/
ApacheLuceneSupportZSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package org.knora.webapi.util
import zio.Scope
import zio.test.Spec
import zio.test.TestEnvironment
import zio.test.ZIOSpecDefault
import zio.test.assertTrue
object ApacheLuceneSupportZSpec extends ZIOSpecDefault {
def spec: Spec[TestEnvironment with Scope, Any] =
suite("The ApacheLuceneSupport class")(
test("leave a Lucene query unchanged") {
val searchString = "Reise Land"
val searchExpression: String = ApacheLuceneSupport.LuceneQueryString(searchString).getQueryString
assertTrue(searchExpression == "Reise Land")
} +
test("leave a Lucene query unchanged (2)") {
val searchString = "Reise ins Land"
val searchExpression: String = ApacheLuceneSupport.LuceneQueryString(searchString).getQueryString
assertTrue(searchExpression == "Reise ins Land")
} +
test("leave a Lucene query containing phrases and terms unchanged") {
val searchString = "\"Leonhard Euler\" Bernoulli"
val searchExpression: String = ApacheLuceneSupport.LuceneQueryString(searchString).getQueryString
assertTrue(searchExpression == "\"Leonhard Euler\" Bernoulli")
} +
test("leave a Lucene query containing two phrases and one term unchanged") {
val searchString = "\"Leonhard Euler\" \"Daniel Bernoulli\" formula"
val searchExpression: String = ApacheLuceneSupport.LuceneQueryString(searchString).getQueryString
assertTrue(searchExpression == "\"Leonhard Euler\" \"Daniel Bernoulli\" formula")
} +
test("leave a Lucene query containing two phrases and two terms unchanged") {
val searchString = "\"Leonhard Euler\" \"Daniel Bernoulli\" formula geometria"
val searchExpression: String = ApacheLuceneSupport.LuceneQueryString(searchString).getQueryString
assertTrue(searchExpression == "\"Leonhard Euler\" \"Daniel Bernoulli\" formula geometria")
} +
test("get terms contained in a Lucene query") {
val searchString = "Reise Land"
val singleTerms: Seq[String] = ApacheLuceneSupport.LuceneQueryString(searchString).getSingleTerms
assertTrue(singleTerms.size == 2)
} +
test("handle one phrase correctly") {
val searchString = "\"Leonhard Euler\""
val searchExpression: String = ApacheLuceneSupport.LuceneQueryString(searchString).getQueryString
assertTrue(searchExpression == "\"Leonhard Euler\"")
} +
test(
"combine space separated words with a logical AND and add a wildcard to the last word (non exact sequence)"
) {
val searchString = "Reise ins Heilige Lan"
val searchExpression =
ApacheLuceneSupport.MatchStringWhileTyping(searchString).generateLiteralForLuceneIndexWithoutExactSequence
assertTrue(searchExpression == "Reise AND ins AND Heilige AND Lan*")
} +
test("add a wildcard to the word if the search string only contains one word (non exact sequence)") {
val searchString = "Reis"
val searchExpression =
ApacheLuceneSupport.MatchStringWhileTyping(searchString).generateLiteralForLuceneIndexWithoutExactSequence
assertTrue(searchExpression == "Reis*")
} +
test(
"combine all space separated words to a phrase but the last one and add a wildcard to it (exact sequence)"
) {
val searchString = "Reise ins Heilige Lan"
val searchExpression =
ApacheLuceneSupport.MatchStringWhileTyping(searchString).generateLiteralForLuceneIndexWithExactSequence
assertTrue(searchExpression == """"Reise ins Heilige" AND Lan*""")
} +
test("add a wildcard to the word if the search string only contains one word (exact sequence)") {
val searchString = "Reis"
val searchExpression =
ApacheLuceneSupport.MatchStringWhileTyping(searchString).generateLiteralForLuceneIndexWithExactSequence
assertTrue(searchExpression == "Reis*")
} +
test("create a regex FILTER expression for an exact match") {
val searchString = "Reise ins Heilige Lan"
val searchExpression = ApacheLuceneSupport
.MatchStringWhileTyping(searchString)
.generateRegexFilterStatementForExactSequenceMatch("firstProp")
assertTrue(searchExpression == "FILTER regex(?firstProp, 'Reise ins Heilige Lan*', 'i')")
} +
test("not create a regex FILTER expression for an exact match when only one word is provided") {
val searchString = "Reise"
val searchExpression = ApacheLuceneSupport
.MatchStringWhileTyping(searchString)
.generateRegexFilterStatementForExactSequenceMatch("firstProp")
assertTrue(searchExpression == "")
}
)
}