Throw error for optionality in distances

Change-Id: Ib555eef2cf512ce4bf443779096175c3009cc431
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
index 8a0ac45..072a633 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMatchIdentifier.java
@@ -277,10 +277,10 @@
 
         /*
         km = ki.getMatchInfo(
-			"match-GOE!GOE_AGX.00002-p10-20",
-							 "tokens", true, (String) null, (String) null, true, true, false);	
+        	"match-GOE!GOE_AGX.00002-p10-20",
+        					 "tokens", true, (String) null, (String) null, true, true, false);	
         assertEquals("", km.toJsonString());
-		*/		
+        */
     };
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
index cedb868..131ae70 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
@@ -204,6 +204,7 @@
         //		}
     }
 
+
     @Test
     public void testCase5 () throws IOException {
         ki = new KrillIndex();
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
index 31a3612..f11a5da 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
@@ -571,15 +571,17 @@
         };
     };
 
-	@Test
+
+    @Test
     public void queryJSONdistancesWithRegexes () throws QueryException {
-		// "der" []{2,3} [opennlp/p="NN"]
+        // "der" []{2,3} [opennlp/p="NN"]
         try {
             String json = getString(getClass().getResource(
                     "/queries/bugs/distances_with_regex_bug.jsonld").getFile());
             KrillQuery kq = new KrillQuery("tokens");
 
-            assertEquals(kq.fromKoral(json).toQuery().toString(),
+            assertEquals(
+                    kq.fromKoral(json).toQuery().toString(),
                     "spanDistance(SpanMultiTermQueryWrapper(tokens:/s:der/), SpanMultiTermQueryWrapper(tokens:/opennlp/p:NN/), [(w[3:4], ordered, notExcluded)])");
         }
         catch (QueryException e) {
@@ -587,6 +589,7 @@
         };
     };
 
+
     public static String getString (String path) {
         StringBuilder contentBuilder = new StringBuilder();
         try {
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
index e5030f8..97a9eb2 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanSequenceQueryJSON.java
@@ -283,7 +283,7 @@
         }
         catch (QueryException qe) {
             assertEquals(
-                    "Distance constraints not supported with empty or negative operands",
+                    "Distance constraints not supported with empty, optional or negative operands",
                     qe.getMessage());
         };
     };
@@ -351,27 +351,34 @@
                 sqwi.toQuery().toString());
     };
 
+
     @Test
-    public void queryJSONkoralOptionalityInDistanceBug () throws QueryException {
-		// Sonne [] Mond?
-        SpanQueryWrapper sqwi = jsonQueryFile("distance-with-optionality.jsonld");
-        assertEquals(
-			"focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
-			sqwi.toQuery().toString());
-		// Could also be a distance at the end ... that's a query planner thing.
+    public void queryJSONkoralOptionalityInDistanceBug () {
+        try {
+            // Sonne [] Mond?
+            SpanQueryWrapper sqwi = jsonQueryFile("distance-with-optionality.jsonld");
+            sqwi.toQuery().toString();
+        }
+        catch (QueryException qe) {
+            assertEquals(
+                    "Distance constraints not supported with empty, optional or negative operands",
+                    qe.getMessage());
+        }
+        // Could also be a distance at the end ... that's a query planner thing.
     };
 
-	@Test
+
+    @Test
     public void queryJSONkoralOptionalityAfterEmptyBug () throws QueryException {
-		// Sonne [] Mond?
+        // Sonne [] Mond?
         SpanQueryWrapper sqwi = jsonQueryFile("empty-followed-by-optionality.jsonld");
         assertEquals(
-			"focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
-			sqwi.toQuery().toString());
-		// Could also be a distance at the end ... that's a query planner thing.
+                "focus(254: spanContain(<tokens:base/s:t />, {254: spanOr([spanExpansion(tokens:s:Sonne, []{1, 1}, right), spanNext(spanExpansion(tokens:s:Sonne, []{1, 1}, right), tokens:s:Mond)])}))",
+                sqwi.toQuery().toString());
+        // Could also be a distance at the end ... that's a query planner thing.
     };
 
-	
+
 
     // get query wrapper based on json file
     public SpanQueryWrapper jsonQueryFile (String filename) {
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
index 1fb1f2b..7ecf1c2 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -1019,28 +1019,29 @@
                 "Operation needs operand list");
     };
 
-	
-	@Test
+
+    @Test
     public void searchJSONdistanceWithRegexesBug () throws IOException {
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
         for (String i : new String[] { "00001" }) {
-			// , "00002", "00003", "00004", "00005", "00006", "02439"
+            // , "00002", "00003", "00004", "00005", "00006", "02439"
             ki.addDoc(
                     getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                     true);
         };
         ki.commit();
 
-		// "der" []{2,3} [opennlp/p="NN"]
-       String json = getString(getClass().getResource(
+        // "der" []{2,3} [opennlp/p="NN"]
+        String json = getString(getClass().getResource(
                 "/queries/bugs/distances_with_regex_bug.jsonld").getFile());
 
         Result kr = new Krill(json).apply(ki);
 
-		assertEquals(kr.getMatch(0).getSnippetBrackets(),
-					 "Mit Ausnahme von Fremdwörtern und Namen ist das A der einzige Buchstabe im Deutschen, [[der zweifach am Anfang]] eines Wortes stehen darf, etwa im Wort Aal.");
+        assertEquals(
+                kr.getMatch(0).getSnippetBrackets(),
+                "Mit Ausnahme von Fremdwörtern und Namen ist das A der einzige Buchstabe im Deutschen, [[der zweifach am Anfang]] eines Wortes stehen darf, etwa im Wort Aal.");
 
     };
 
@@ -1128,22 +1129,24 @@
         assertEquals(kr.getTotalResults(), 1);
     };
 
-	
-	@Test
+
+    @Test
     public void queryJSONzeroRepetitionBug () throws IOException {
-		// der{0}
-		KrillIndex ki = new KrillIndex();
-		ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
-		ki.commit();
-			
-		String json = getString(getClass().getResource(
-									"/queries/bugs/zero_repetition_bug.jsonld").getFile());
+        // der{0}
+        KrillIndex ki = new KrillIndex();
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"), true);
+        ki.commit();
 
-		Result kr = new Krill(json).apply(ki);
+        String json = getString(getClass().getResource(
+                "/queries/bugs/zero_repetition_bug.jsonld").getFile());
 
-		assertEquals(783, kr.getError(0).getCode());
-		assertEquals("This query can't match anywhere", kr.getError(0).getMessage());
-	};
+        Result kr = new Krill(json).apply(ki);
+
+        assertEquals(783, kr.getError(0).getCode());
+        assertEquals("This query can't match anywhere", kr.getError(0)
+                .getMessage());
+    };
+
 
     /**
      * This is a Schreibgebrauch ressource that didn't work for