blob: 9117f4af0c3b3645a3fd96f6455d1945ab19eb74 [file] [log] [blame]
Eliza Margaretha269e5a62014-09-30 16:58:23 +00001package de.ids_mannheim.korap.query;
2
margaretha416394c2021-11-22 16:30:22 +01003import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertNull;
6import static org.junit.Assert.assertTrue;
7import static org.junit.Assert.fail;
Nils Diewald164f8be2014-02-13 02:43:16 +00008
Nils Diewald164f8be2014-02-13 02:43:16 +00009import org.junit.Test;
Nils Diewald164f8be2014-02-13 02:43:16 +000010import org.junit.runner.RunWith;
11import org.junit.runners.JUnit4;
12
margaretha416394c2021-11-22 16:30:22 +010013import de.ids_mannheim.korap.query.wrap.SpanClassQueryWrapper;
14import de.ids_mannheim.korap.query.wrap.SpanRepetitionQueryWrapper;
15import de.ids_mannheim.korap.query.wrap.SpanSequenceQueryWrapper;
16import de.ids_mannheim.korap.util.QueryException;
17
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000018
19/**
20 * @author margaretha, diewald
21 */
Nils Diewald164f8be2014-02-13 02:43:16 +000022@RunWith(JUnit4.class)
23public class TestSpanSequenceQuery {
24
25 @Test
Nils Diewaldbe5943e2014-10-21 19:35:34 +000026 public void spanSequenceQuery () throws QueryException {
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000027 SpanSequenceQueryWrapper sssq = new SpanSequenceQueryWrapper("field");
28 assertNull(sssq.toQuery());
29 assertFalse(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000030
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000031 sssq.append("a").append("b");
32 assertEquals("spanNext(field:a, field:b)", sssq.toQuery().toString());
33 assertFalse(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000034
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000035 sssq.append("c");
Eliza Margaretha6f989202016-10-14 21:48:29 +020036 assertEquals("spanNext(spanNext(field:a, field:b), field:c)",
37 sssq.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000038 assertFalse(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000039
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000040 sssq = new SpanSequenceQueryWrapper("field");
41 sssq.append("a");
42 assertEquals("field:a", sssq.toQuery().toString());
43 assertFalse(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000044
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000045 sssq.append("b");
46 assertEquals("spanNext(field:a, field:b)", sssq.toQuery().toString());
47 assertFalse(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000048
Nils Diewaldbb33da22015-03-04 16:24:25 +000049 sssq.withConstraint(2, 3);
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000050 assertTrue(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000051
Nils Diewaldbb33da22015-03-04 16:24:25 +000052 assertEquals(
53 "spanDistance(field:a, field:b, [(w[2:3], ordered, notExcluded)])",
54 sssq.toQuery().toString());
Nils Diewald164f8be2014-02-13 02:43:16 +000055
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000056 sssq.append("c");
Nils Diewaldbb33da22015-03-04 16:24:25 +000057 assertEquals(
58 "spanDistance(spanDistance(field:a, field:b, [(w[2:3], ordered, notExcluded)]), field:c, [(w[2:3], ordered, notExcluded)])",
59 sssq.toQuery().toString());
60 sssq.withConstraint(6, 8, "s");
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000061 assertTrue(sssq.hasConstraints());
Nils Diewald164f8be2014-02-13 02:43:16 +000062
Nils Diewaldbb33da22015-03-04 16:24:25 +000063 assertEquals(
64 "spanMultipleDistance(spanMultipleDistance(field:a, field:b, [(w[2:3], ordered, notExcluded), (s[6:8], ordered, notExcluded)]), field:c, [(w[2:3], ordered, notExcluded), (s[6:8], ordered, notExcluded)])",
65 sssq.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000066 };
67
Nils Diewaldbb33da22015-03-04 16:24:25 +000068
Akron15337072017-01-13 19:02:35 +010069 @Test
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000070 public void spanSequenceQueryWrapper () throws QueryException {
71
72 SpanSequenceQueryWrapper ssqw, ssqw2;
73 SpanRepetitionQueryWrapper srqw;
74 SpanClassQueryWrapper scqw;
75
76 // Synopsis 1
Nils Diewaldbb33da22015-03-04 16:24:25 +000077 ssqw = new SpanSequenceQueryWrapper("tokens", "der", "Baum");
Eliza Margaretha6f989202016-10-14 21:48:29 +020078 assertEquals("spanNext(tokens:der, tokens:Baum)",
79 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000080
81 // Synopsis 2
82 ssqw = new SpanSequenceQueryWrapper("tokens");
83 ssqw.append("der").append("Baum");
Eliza Margaretha6f989202016-10-14 21:48:29 +020084 assertEquals("spanNext(tokens:der, tokens:Baum)",
85 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000086
87 // Append a sequence
88 ssqw = new SpanSequenceQueryWrapper("tokens");
89 ssqw2 = new SpanSequenceQueryWrapper("tokens");
90 ssqw.append("der").append("Baum");
91 ssqw2.append("fiel").append("still");
92 ssqw.append(ssqw2);
93 // This may not be final
94 assertEquals(
Nils Diewaldbb33da22015-03-04 16:24:25 +000095 "spanNext(spanNext(spanNext(tokens:der, tokens:Baum), tokens:fiel), tokens:still)",
96 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +000097
98 // Synopsis 3
99 ssqw = new SpanSequenceQueryWrapper("tokens", "Baum");
100 ssqw.prepend("der");
Eliza Margaretha6f989202016-10-14 21:48:29 +0200101 assertEquals("spanNext(tokens:der, tokens:Baum)",
102 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000103
104 // Prepend a sequence
105 ssqw = new SpanSequenceQueryWrapper("tokens");
106 ssqw2 = new SpanSequenceQueryWrapper("tokens");
107 ssqw.append("fiel").append("still");
108 ssqw2.append("der").append("Baum");
109 ssqw.prepend(ssqw2);
110
111 // This may change
112 assertEquals(
Nils Diewaldbb33da22015-03-04 16:24:25 +0000113 "spanNext(spanNext(spanNext(tokens:der, tokens:Baum), tokens:fiel), tokens:still)",
114 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000115
116 // Add constraint
Nils Diewaldbb33da22015-03-04 16:24:25 +0000117 ssqw.withConstraint(2, 4);
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000118 // This may change
Eliza Margaretha6f989202016-10-14 21:48:29 +0200119 assertEquals(
120 "spanDistance(spanDistance(spanDistance(tokens:der, "
121 + "tokens:Baum, [(w[2:4], ordered, notExcluded)]), "
122 + "tokens:fiel, [(w[2:4], ordered, notExcluded)]), "
123 + "tokens:still, [(w[2:4], ordered, notExcluded)])",
124 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000125
126 ssqw = new SpanSequenceQueryWrapper("tokens", "der", "Baum")
Nils Diewaldbb33da22015-03-04 16:24:25 +0000127 .withConstraint(1, 1);
Eliza Margaretha6f989202016-10-14 21:48:29 +0200128 assertEquals("spanNext(tokens:der, tokens:Baum)",
129 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000130
Nils Diewaldbb33da22015-03-04 16:24:25 +0000131 ssqw = new SpanSequenceQueryWrapper("tokens", "der", "Baum")
132 .withConstraint(1, 2, "s");
133 assertEquals(
134 "spanElementDistance(tokens:der, tokens:Baum, [(s[1:2], ordered, notExcluded)])",
135 ssqw.toQuery().toString());
136
137 ssqw = new SpanSequenceQueryWrapper("tokens", "der", "Baum")
138 .withConstraint(1, 2, "s").withConstraint(2, 3, "x");
Eliza Margaretha6f989202016-10-14 21:48:29 +0200139 assertEquals(
140 "spanMultipleDistance(tokens:der, tokens:Baum, "
141 + "[(s[1:2], ordered, notExcluded), "
142 + "(x[2:3], ordered, notExcluded)])",
143 ssqw.toQuery().toString());
Nils Diewaldbb33da22015-03-04 16:24:25 +0000144
145 ssqw = new SpanSequenceQueryWrapper("tokens").append("Baum")
146 .prepend("der").withConstraint(1, 2, "s", true)
147 .withConstraint(2, 3, "x");
Eliza Margaretha6f989202016-10-14 21:48:29 +0200148 assertEquals(
149 "spanMultipleDistance(tokens:der, "
150 + "tokens:Baum, [(s[1:2], ordered, excluded), "
151 + "(x[2:3], ordered, notExcluded)])",
152 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000153
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000154 // Support empty class ins sequence
155 ssqw = new SpanSequenceQueryWrapper("field", "Der");
156 srqw = new SpanRepetitionQueryWrapper();
157 scqw = new SpanClassQueryWrapper(srqw, (short) 3);
158 ssqw.append(scqw);
Akron15337072017-01-13 19:02:35 +0100159 assertEquals("focus(254: spanContain(<field:base/s:t />, {254: spanExpansion(field:Der, []{1, 1}, right, class:3)}))",
160 ssqw.toQuery().toString());
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000161
162 // Support empty class ins sequence
163 ssqw = new SpanSequenceQueryWrapper("field");
164 srqw = new SpanRepetitionQueryWrapper();
165 ssqw.append(srqw);
166 scqw = new SpanClassQueryWrapper(ssqw, (short) 2);
167 try {
168 scqw.toQuery();
169 }
170 catch (Exception e) {
Nils Diewalda14ecd62015-02-26 21:00:20 +0000171 fail(e.getMessage() + " (Known issue)");
Nils Diewald0cc4f2e2015-01-30 20:13:08 +0000172 };
Nils Diewald164f8be2014-02-13 02:43:16 +0000173 };
174};