blob: f4ea2ce464e3a42ae5856750ca23ae2c5d95402c [file] [log] [blame]
Eliza Margarethaafe98122015-01-23 17:37:57 +00001package de.ids_mannheim.korap.query;
2
3import static de.ids_mannheim.korap.TestSimple.getJSONQuery;
4import static org.junit.Assert.assertEquals;
5
6import org.apache.lucene.search.spans.SpanQuery;
7import org.junit.Test;
8
9import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
10import de.ids_mannheim.korap.util.QueryException;
11
12/**
Nils Diewald6409a922015-01-29 20:50:42 +000013 * @author margaretha, diewald
Eliza Margarethaafe98122015-01-23 17:37:57 +000014 */
15public class TestSpanSubspanQueryJSON {
16
Nils Diewaldbb33da22015-03-04 16:24:25 +000017 @Test
18 public void testTermQuery () throws QueryException {
19 // subspan(tokens:tt/l:Haus, 0, 1)
Eliza Margaretha6f989202016-10-14 21:48:29 +020020 String filepath = getClass()
21 .getResource("/queries/submatch/termquery.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000022 SpanQueryWrapper sqwi = getJSONQuery(filepath);
23 SpanQuery sq = sqwi.toQuery();
24 assertEquals("tokens:tt/l:Haus", sq.toString());
25 }
Eliza Margaretha2dcde4f2015-02-10 12:02:18 +000026
27
Nils Diewaldbb33da22015-03-04 16:24:25 +000028 @Test
29 public void testTermStartOffset () throws QueryException {
30 // subspan(tokens:tt/l:Haus, -1, 0)
Eliza Margaretha6f989202016-10-14 21:48:29 +020031 String filepath = getClass()
32 .getResource("/queries/submatch/term-start-offset.jsonld")
33 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000034 SpanQueryWrapper sqwi = getJSONQuery(filepath);
35 SpanQuery sq = sqwi.toQuery();
36 assertEquals("tokens:tt/l:Haus", sq.toString());
37 }
Eliza Margaretha369e7562015-02-09 17:36:24 +000038
Nils Diewaldbb33da22015-03-04 16:24:25 +000039
margaretha7d89c052017-05-10 19:11:45 +020040 @Test (expected=NullPointerException.class)
Nils Diewaldbb33da22015-03-04 16:24:25 +000041 public void testTermNull () throws QueryException {
42 // subspan(tokens:tt/l:Haus, 1, 1)
Eliza Margaretha6f989202016-10-14 21:48:29 +020043 String filepath = getClass()
44 .getResource("/queries/submatch/term-null.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000045 SpanQueryWrapper sqwi = getJSONQuery(filepath);
46 SpanQuery sq = sqwi.toQuery();
47 assertEquals(null, sq);
48 }
49
50
51 @Test
52 public void testElementQuery () throws QueryException {
53 // submatch(1,4:<s>)
Eliza Margaretha6f989202016-10-14 21:48:29 +020054 String filepath = getClass()
55 .getResource("/queries/submatch/simpleElement.jsonld")
56 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000057 SpanQueryWrapper sqwi = getJSONQuery(filepath);
58 SpanQuery sq = sqwi.toQuery();
59 assertEquals(
60 "subspan(spanContain(<tokens:s />, tokens:tt/l:Haus), 1, 4)",
61 sq.toString());
62 }
63
64
65 @Test
66 public void testNoLength () throws QueryException {
67 // submatch(1,:<s>)
Eliza Margaretha6f989202016-10-14 21:48:29 +020068 String filepath = getClass()
69 .getResource("/queries/submatch/noLength.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000070 SpanQueryWrapper sqwi = getJSONQuery(filepath);
71 SpanQuery sq = sqwi.toQuery();
72 assertEquals("subspan(<tokens:s />, 1, 0)", sq.toString());
73 }
74
75
76 @Test
77 public void testMinusStartOffset () throws QueryException {
78 // submatch(-1,4:<s>)
Eliza Margaretha6f989202016-10-14 21:48:29 +020079 String filepath = getClass()
80 .getResource("/queries/submatch/minusStart.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000081 SpanQueryWrapper sqwi = getJSONQuery(filepath);
82 SpanQuery sq = sqwi.toQuery();
83 assertEquals("subspan(<tokens:s />, -1, 4)", sq.toString());
84 }
85
86
87 @Test
88 public void testEmptyMinusStartOffset () throws QueryException {
89 // no optimization
90 // submatch(-1,4:der []{1,8})
Eliza Margaretha6f989202016-10-14 21:48:29 +020091 String filepath = getClass()
92 .getResource("/queries/submatch/empty-minusStart.jsonld")
93 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +000094 SpanQueryWrapper sqwi = getJSONQuery(filepath);
95 SpanQuery sq = sqwi.toQuery();
96 assertEquals(
97 "subspan(spanExpansion(tokens:s:der, []{1, 8}, right), -1, 4)",
98 sq.toString());
99 }
100
101
102 @Test
103 public void testEmptyMax () throws QueryException {
104 // no optimization
105 // submatch(1,2:der []{1,8})
Eliza Margaretha6f989202016-10-14 21:48:29 +0200106 String filepath = getClass()
107 .getResource("/queries/submatch/empty-max.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000108 SpanQueryWrapper sqwi = getJSONQuery(filepath);
109 SpanQuery sq = sqwi.toQuery();
110 assertEquals(
111 "subspan(spanExpansion(tokens:s:der, []{1, 8}, right), 1, 2)",
112 sq.toString());
113 }
114
115
116 @Test
117 public void testCaseEmptyWrapped () throws QueryException {
Eliza Margaretha6f989202016-10-14 21:48:29 +0200118 String filepath = getClass()
119 .getResource("/queries/submatch/wrapped.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000120 SpanQueryWrapper sqwi = getJSONQuery(filepath);
121 SpanQuery sq = sqwi.toQuery();
122 assertEquals(
123 "focus(129: spanElementDistance({129: tokens:s:der}, {129: subspan"
Akron43cea662016-02-15 23:43:59 +0100124 + "(<tokens:s />, 0, 1)}, [(base/s:s[0:0], ordered, notExcluded)]))",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000125 sq.toString());
126 }
127
128
129 @Test
130 public void testCaseEmptyEmbedded () throws QueryException {
131 // die subspan(der []{1,}, 2,3)
Eliza Margaretha6f989202016-10-14 21:48:29 +0200132 String filepath = getClass()
133 .getResource("/queries/submatch/embedded.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000134 SpanQueryWrapper sqwi = getJSONQuery(filepath);
135 SpanQuery sq = sqwi.toQuery();
Eliza Margaretha6f989202016-10-14 21:48:29 +0200136 assertEquals(
137 "spanNext({1: tokens:s:die}, {1: subspan(spanExpansion("
138 + "tokens:s:der, []{1, 100}, right), 2, 3)})",
139 sq.toString());
Nils Diewaldbb33da22015-03-04 16:24:25 +0000140 }
141
142
143 @Test
144 public void testCaseEmptyEmbeddedNull () throws QueryException {
145 // die subspan([],5,6)
146 // start offset is bigger than the original span
Eliza Margaretha6f989202016-10-14 21:48:29 +0200147 String filepath = getClass()
148 .getResource("/queries/submatch/embedded-null.jsonld")
149 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000150 SpanQueryWrapper sqwi = getJSONQuery(filepath);
151 SpanQuery sq = sqwi.toQuery();
152 assertEquals("tokens:s:die", sq.toString());
153 }
154
155
156 @Test
157 public void testCaseEmptyEmbeddedValid () throws QueryException {
158 // die subspan([]{0,5},2)
Eliza Margaretha6f989202016-10-14 21:48:29 +0200159 String filepath = getClass()
160 .getResource("/queries/submatch/embedded-valid-empty.jsonld")
161 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000162 SpanQueryWrapper sqwi = getJSONQuery(filepath);
163 SpanQuery sq = sqwi.toQuery();
Akron6759b042016-04-28 01:25:00 +0200164 assertEquals(
165 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:die, []{2, 5}, right)}))",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000166 sq.toString());
167 }
168
169
170 @Test
171 public void testNegativeToken () throws QueryException {
172 // submatch(0,1:[base != Baum])
Eliza Margaretha6f989202016-10-14 21:48:29 +0200173 String filepath = getClass()
174 .getResource("/queries/submatch/negative-token.jsonld")
175 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000176 SpanQueryWrapper sqwi = getJSONQuery(filepath);
177 SpanQuery sq = sqwi.toQuery();
178 assertEquals("tokens:l:Baum", sq.toString());
179 }
180
181
182 @Test
183 public void testNegativeSequence () throws QueryException {
184 // das submatch(0,1:[base != Baum])
Eliza Margaretha6f989202016-10-14 21:48:29 +0200185 String filepath = getClass()
186 .getResource("/queries/submatch/negative-seq.jsonld").getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000187 SpanQueryWrapper sqwi = getJSONQuery(filepath);
188 SpanQuery sq = sqwi.toQuery();
189 assertEquals(
Akrona7b936d2016-03-04 13:40:54 +0100190 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:das, !tokens:l:Baum{1, 1}, right)}))",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000191 sq.toString());
192 }
193
194
195 @Test
196 public void testNegativeSequenceWithClass () throws QueryException {
197 // das {1:submatch(0,1:[base != Baum])}
Eliza Margaretha6f989202016-10-14 21:48:29 +0200198 String filepath = getClass()
199 .getResource("/queries/submatch/negative-sequence-class.jsonld")
200 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000201 SpanQueryWrapper sqwi = getJSONQuery(filepath);
202 SpanQuery sq = sqwi.toQuery();
203 assertEquals(
Akrona7b936d2016-03-04 13:40:54 +0100204 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:das, !tokens:l:Baum{1, 1}, right, class:1)}))",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000205 sq.toString());
206 }
207
208
209 @Test
210 public void testNegativeEmbeddedSequence () throws QueryException {
211 // submatch(1,1:das [base != Baum])
Eliza Margaretha6f989202016-10-14 21:48:29 +0200212 String filepath = getClass()
213 .getResource("/queries/submatch/embedded-negative-seq.jsonld")
214 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000215 SpanQueryWrapper sqwi = getJSONQuery(filepath);
216 SpanQuery sq = sqwi.toQuery();
217 assertEquals(
218 "subspan(spanExpansion(tokens:s:das, !tokens:l:Baum{1, 1}, right), 1, 1)",
219 sq.toString());
220 }
221
222
223 @Test
224 public void testNegativeEmbeddedSequenceWithClass () throws QueryException {
225 // submatch(0,1:{1:[base != Baum] dass})
Eliza Margaretha6f989202016-10-14 21:48:29 +0200226 String filepath = getClass()
227 .getResource(
228 "/queries/submatch/embedded-negative-class-seq.jsonld")
Nils Diewaldbb33da22015-03-04 16:24:25 +0000229 .getFile();
230 SpanQueryWrapper sqwi = getJSONQuery(filepath);
231 SpanQuery sq = sqwi.toQuery();
232 assertEquals(
233 "subspan({1: spanExpansion(tokens:s:dass, !tokens:l:Baum{1, 1}, left)}, 0, 1)",
234 sq.toString());
235 }
236
237
238 @Test
239 public void testEmbeddedNegativeRepetition () throws QueryException {
240 // submatch(1,1:das [base != Baum]{1,3})
Eliza Margaretha6f989202016-10-14 21:48:29 +0200241 String filepath = getClass()
242 .getResource(
243 "/queries/submatch/embedded-negative-repetition.jsonld")
Nils Diewaldbb33da22015-03-04 16:24:25 +0000244 .getFile();
245 SpanQueryWrapper sqwi = getJSONQuery(filepath);
246 SpanQuery sq = sqwi.toQuery();
247 assertEquals(
248 "subspan(spanExpansion(tokens:s:das, !tokens:l:Baum{1, 3}, right), 1, 1)",
249 sq.toString());
250 }
251
252
253 @Test
254 public void testNegativeRepetition () throws QueryException {
255 // das submatch(1,4:[base != Baum]{1,3})
Eliza Margaretha6f989202016-10-14 21:48:29 +0200256 String filepath = getClass()
257 .getResource("/queries/submatch/negative-repetition.jsonld")
258 .getFile();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000259 SpanQueryWrapper sqwi = getJSONQuery(filepath);
260 SpanQuery sq = sqwi.toQuery();
261 assertEquals(
Akrona7b936d2016-03-04 13:40:54 +0100262 "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:das, !tokens:l:Baum{2, 2}, right)}))",
Nils Diewaldbb33da22015-03-04 16:24:25 +0000263 sq.toString());
264 }
Eliza Margarethaafe98122015-01-23 17:37:57 +0000265}