| Eliza Margaretha | afe9812 | 2015-01-23 17:37:57 +0000 | [diff] [blame] | 1 | package de.ids_mannheim.korap.query; |
| 2 | |
| 3 | import static de.ids_mannheim.korap.TestSimple.getJSONQuery; |
| 4 | import static org.junit.Assert.assertEquals; |
| 5 | |
| 6 | import org.apache.lucene.search.spans.SpanQuery; |
| 7 | import org.junit.Test; |
| 8 | |
| 9 | import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper; |
| 10 | import de.ids_mannheim.korap.util.QueryException; |
| 11 | |
| 12 | /** |
| Nils Diewald | 6409a92 | 2015-01-29 20:50:42 +0000 | [diff] [blame] | 13 | * @author margaretha, diewald |
| Eliza Margaretha | afe9812 | 2015-01-23 17:37:57 +0000 | [diff] [blame] | 14 | */ |
| 15 | public class TestSpanSubspanQueryJSON { |
| 16 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 17 | @Test |
| 18 | public void testTermQuery () throws QueryException { |
| 19 | // subspan(tokens:tt/l:Haus, 0, 1) |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 20 | String filepath = getClass() |
| 21 | .getResource("/queries/submatch/termquery.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 22 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 23 | SpanQuery sq = sqwi.toQuery(); |
| 24 | assertEquals("tokens:tt/l:Haus", sq.toString()); |
| 25 | } |
| Eliza Margaretha | 2dcde4f | 2015-02-10 12:02:18 +0000 | [diff] [blame] | 26 | |
| 27 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 28 | @Test |
| 29 | public void testTermStartOffset () throws QueryException { |
| 30 | // subspan(tokens:tt/l:Haus, -1, 0) |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 31 | String filepath = getClass() |
| 32 | .getResource("/queries/submatch/term-start-offset.jsonld") |
| 33 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 34 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 35 | SpanQuery sq = sqwi.toQuery(); |
| 36 | assertEquals("tokens:tt/l:Haus", sq.toString()); |
| 37 | } |
| Eliza Margaretha | 369e756 | 2015-02-09 17:36:24 +0000 | [diff] [blame] | 38 | |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 39 | |
| margaretha | 7d89c05 | 2017-05-10 19:11:45 +0200 | [diff] [blame] | 40 | @Test (expected=NullPointerException.class) |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 41 | public void testTermNull () throws QueryException { |
| 42 | // subspan(tokens:tt/l:Haus, 1, 1) |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 43 | String filepath = getClass() |
| 44 | .getResource("/queries/submatch/term-null.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 45 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 54 | String filepath = getClass() |
| 55 | .getResource("/queries/submatch/simpleElement.jsonld") |
| 56 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 57 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 68 | String filepath = getClass() |
| 69 | .getResource("/queries/submatch/noLength.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 70 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 79 | String filepath = getClass() |
| 80 | .getResource("/queries/submatch/minusStart.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 81 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 91 | String filepath = getClass() |
| 92 | .getResource("/queries/submatch/empty-minusStart.jsonld") |
| 93 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 94 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 106 | String filepath = getClass() |
| 107 | .getResource("/queries/submatch/empty-max.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 108 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 118 | String filepath = getClass() |
| 119 | .getResource("/queries/submatch/wrapped.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 120 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 121 | SpanQuery sq = sqwi.toQuery(); |
| 122 | assertEquals( |
| 123 | "focus(129: spanElementDistance({129: tokens:s:der}, {129: subspan" |
| Akron | 43cea66 | 2016-02-15 23:43:59 +0100 | [diff] [blame] | 124 | + "(<tokens:s />, 0, 1)}, [(base/s:s[0:0], ordered, notExcluded)]))", |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 125 | sq.toString()); |
| 126 | } |
| 127 | |
| 128 | |
| 129 | @Test |
| 130 | public void testCaseEmptyEmbedded () throws QueryException { |
| 131 | // die subspan(der []{1,}, 2,3) |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 132 | String filepath = getClass() |
| 133 | .getResource("/queries/submatch/embedded.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 134 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 135 | SpanQuery sq = sqwi.toQuery(); |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 136 | assertEquals( |
| 137 | "spanNext({1: tokens:s:die}, {1: subspan(spanExpansion(" |
| 138 | + "tokens:s:der, []{1, 100}, right), 2, 3)})", |
| 139 | sq.toString()); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 140 | } |
| 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 147 | String filepath = getClass() |
| 148 | .getResource("/queries/submatch/embedded-null.jsonld") |
| 149 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 150 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 159 | String filepath = getClass() |
| 160 | .getResource("/queries/submatch/embedded-valid-empty.jsonld") |
| 161 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 162 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 163 | SpanQuery sq = sqwi.toQuery(); |
| Akron | 6759b04 | 2016-04-28 01:25:00 +0200 | [diff] [blame] | 164 | assertEquals( |
| 165 | "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:die, []{2, 5}, right)}))", |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 166 | sq.toString()); |
| 167 | } |
| 168 | |
| 169 | |
| 170 | @Test |
| 171 | public void testNegativeToken () throws QueryException { |
| 172 | // submatch(0,1:[base != Baum]) |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 173 | String filepath = getClass() |
| 174 | .getResource("/queries/submatch/negative-token.jsonld") |
| 175 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 176 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 185 | String filepath = getClass() |
| 186 | .getResource("/queries/submatch/negative-seq.jsonld").getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 187 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 188 | SpanQuery sq = sqwi.toQuery(); |
| 189 | assertEquals( |
| Akron | a7b936d | 2016-03-04 13:40:54 +0100 | [diff] [blame] | 190 | "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:das, !tokens:l:Baum{1, 1}, right)}))", |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 191 | sq.toString()); |
| 192 | } |
| 193 | |
| 194 | |
| 195 | @Test |
| 196 | public void testNegativeSequenceWithClass () throws QueryException { |
| 197 | // das {1:submatch(0,1:[base != Baum])} |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 198 | String filepath = getClass() |
| 199 | .getResource("/queries/submatch/negative-sequence-class.jsonld") |
| 200 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 201 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 202 | SpanQuery sq = sqwi.toQuery(); |
| 203 | assertEquals( |
| Akron | a7b936d | 2016-03-04 13:40:54 +0100 | [diff] [blame] | 204 | "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:das, !tokens:l:Baum{1, 1}, right, class:1)}))", |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 205 | sq.toString()); |
| 206 | } |
| 207 | |
| 208 | |
| 209 | @Test |
| 210 | public void testNegativeEmbeddedSequence () throws QueryException { |
| 211 | // submatch(1,1:das [base != Baum]) |
| Eliza Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 212 | String filepath = getClass() |
| 213 | .getResource("/queries/submatch/embedded-negative-seq.jsonld") |
| 214 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 215 | 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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 226 | String filepath = getClass() |
| 227 | .getResource( |
| 228 | "/queries/submatch/embedded-negative-class-seq.jsonld") |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 229 | .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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 241 | String filepath = getClass() |
| 242 | .getResource( |
| 243 | "/queries/submatch/embedded-negative-repetition.jsonld") |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 244 | .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 Margaretha | 6f98920 | 2016-10-14 21:48:29 +0200 | [diff] [blame] | 256 | String filepath = getClass() |
| 257 | .getResource("/queries/submatch/negative-repetition.jsonld") |
| 258 | .getFile(); |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 259 | SpanQueryWrapper sqwi = getJSONQuery(filepath); |
| 260 | SpanQuery sq = sqwi.toQuery(); |
| 261 | assertEquals( |
| Akron | a7b936d | 2016-03-04 13:40:54 +0100 | [diff] [blame] | 262 | "focus(254: spanContain(<tokens:base/s:t />, {254: spanExpansion(tokens:s:das, !tokens:l:Baum{2, 2}, right)}))", |
| Nils Diewald | bb33da2 | 2015-03-04 16:24:25 +0000 | [diff] [blame] | 263 | sq.toString()); |
| 264 | } |
| Eliza Margaretha | afe9812 | 2015-01-23 17:37:57 +0000 | [diff] [blame] | 265 | } |