testing / error msgs
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
index d3a9392..09c68c3 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
@@ -788,14 +788,14 @@
LinkedHashMap<String, Object> fieldMap = null;
// regex group #2 is foundry, #4 layer, #5 operator,
// #6 key, #8 value
- String wordOrRegex = "\\w+|\".*?\"";
+ String wordOrRegex = "\\w+|\".+?\"";
Pattern p = Pattern
.compile("((\\w+)/)?((\\w*)(!?=))?("+wordOrRegex+")(:("+wordOrRegex+"))?");
Matcher m;
for (String morphterm : morphterms) {
m = p.matcher(morphterm);
if (!m.matches()) {
- addError(StatusCodes.UNKNOWN_QUERY_ERROR,
+ addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,
"Something went wrong parsing the argument in MORPH().");
requestMap.put("query", new LinkedHashMap<String, Object>());
return;
diff --git a/src/test/java/AnnisQueryProcessorTest.java b/src/test/java/AnnisQueryProcessorTest.java
index eb5a738..fffd806 100644
--- a/src/test/java/AnnisQueryProcessorTest.java
+++ b/src/test/java/AnnisQueryProcessorTest.java
@@ -10,6 +10,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import de.ids_mannheim.korap.query.serialize.QuerySerializer;
+import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
/**
* Tests for JSON-LD serialization of ANNIS QL queries.
@@ -573,6 +574,13 @@
assertEquals("D", res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key").asText());
assertEquals("E", res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
assertEquals("F", res.at("/query/operands/1/key").asText());
+
+ query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & #1 . #2 & #3 . #4";
+ // the resulting query should be equivalent to PQ+: focus(2:dominates(focus(1:{1:<A>}<B>),{2:<C>}))<D>
+ qs.setQuery(query, "annis");
+ res = mapper.readTree(qs.toJSON());
+ assertEquals(true, res.at("/query/@type").isMissingNode());
+ assertEquals(StatusCodes.UNBOUND_ANNIS_RELATION, res.at("/errors/0/0").asInt());
}
// @Test
diff --git a/src/test/java/Cosmas2QueryProcessorTest.java b/src/test/java/Cosmas2QueryProcessorTest.java
index 56accbe..a65ec95 100644
--- a/src/test/java/Cosmas2QueryProcessorTest.java
+++ b/src/test/java/Cosmas2QueryProcessorTest.java
@@ -6,6 +6,7 @@
import org.junit.Test;
import de.ids_mannheim.korap.query.serialize.QuerySerializer;
+import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
@@ -141,7 +142,6 @@
assertEquals("tt", res.at("/query/wrap/foundry").asText());
assertEquals("match:eq", res.at("/query/wrap/match").asText());
-
query = "MORPH(mate/m=temp:pres)";
qs.setQuery(query, "cosmas2");
res = mapper.readTree(qs.toJSON());
@@ -1136,4 +1136,28 @@
assertEquals(131, res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/classOut").asInt());
assertEquals("der", res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key").asText());
}
+
+ @Test
+ public void testErrors() throws JsonProcessingException, IOException {
+ query = "MORPH(tt/p=\"\")";
+ qs.setQuery(query, "cosmas2");
+ res = mapper.readTree(qs.toJSON());
+ assertEquals(true, res.at("/query/@type").isMissingNode());
+ assertEquals(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND, res.at("/errors/0/0").asInt());
+ assertTrue(res.at("/errors/0/1").asText().startsWith("Something went wrong parsing the argument in MORPH()"));
+
+ query = "MORPH(tt/p=\"foo)";
+ qs.setQuery(query, "cosmas2");
+ res = mapper.readTree(qs.toJSON());
+ assertEquals(true, res.at("/query/@type").isMissingNode());
+ assertEquals(StatusCodes.MALFORMED_QUERY, res.at("/errors/0/0").asInt());
+ assertTrue(res.at("/errors/0/1").asText().startsWith("Early closing parenthesis"));
+
+ query = "MORPH(tt/p=)";
+ qs.setQuery(query, "cosmas2");
+ res = mapper.readTree(qs.toJSON());
+ assertEquals(true, res.at("/query/@type").isMissingNode());
+ assertEquals(StatusCodes.MALFORMED_QUERY, res.at("/errors/0/0").asInt());
+ assertTrue(res.at("/errors/0/1").asText().startsWith("Early closing parenthesis"));
+ }
}
\ No newline at end of file
diff --git a/src/test/java/PoliqarpPlusQueryProcessorTest.java b/src/test/java/PoliqarpPlusQueryProcessorTest.java
index 309bdc6..97d5c8d 100644
--- a/src/test/java/PoliqarpPlusQueryProcessorTest.java
+++ b/src/test/java/PoliqarpPlusQueryProcessorTest.java
@@ -1215,6 +1215,29 @@
assertEquals("p", res.at("/query/operands/1/wrap/layer").asText());
assertEquals("Baum", res.at("/query/operands/2/wrap/key").asText());
}
-}
-
-
+
+ @Test
+ public void testMeta() throws JsonProcessingException, IOException {
+ query = "x meta textClass=Sport";
+ qs.setQuery(query, "poliqarpplus");
+ res = mapper.readTree(qs.toJSON());
+ assertEquals("x", res.at("/query/wrap/key").asText());
+ assertEquals("korap:doc", res.at("/collection/@type").asText());
+ assertEquals("textClass", res.at("/collection/key").asText());
+ assertEquals("Sport", res.at("/collection/value").asText());
+
+ query = "x meta textClass=Sport";
+ qs.setQuery(query, "poliqarpplus");
+ qs.setCollection("author=Smith");
+ res = mapper.readTree(qs.toJSON());
+ assertEquals("x", res.at("/query/wrap/key").asText());
+ assertEquals("korap:docGroup", res.at("/collection/@type").asText());
+ assertEquals("operation:and", res.at("/collection/operation").asText());
+ assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+ assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+ assertEquals("author", res.at("/collection/operands/1/key").asText());
+ assertEquals("Smith", res.at("/collection/operands/1/value").asText());
+
+ // TODO more tests
+ }
+}
\ No newline at end of file