From 35ecadd1060ff1f75fec78d62141bc1c938e5b7a Mon Sep 17 00:00:00 2001 From: Thibault Kruse Date: Tue, 11 Aug 2015 22:23:42 +0200 Subject: [PATCH 1/2] Fix strict Argument checking broken with relative completion offset --- .../console/completer/ArgumentCompleter.java | 5 +++-- .../completer/ArgumentCompleterTest.java | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/jline/console/completer/ArgumentCompleter.java b/src/main/java/jline/console/completer/ArgumentCompleter.java index 21e035b4..7bb341d8 100644 --- a/src/main/java/jline/console/completer/ArgumentCompleter.java +++ b/src/main/java/jline/console/completer/ArgumentCompleter.java @@ -140,11 +140,12 @@ public int complete(final String buffer, final int cursor, final List subCandidates = new LinkedList(); - if (sub.complete(arg, arg.length(), subCandidates) == -1) { + int offset = sub.complete(arg, arg.length(), subCandidates); + if (offset == -1) { return -1; } - if (!subCandidates.contains(arg)) { + if (!subCandidates.contains(arg.substring(offset))) { return -1; } } diff --git a/src/test/java/jline/console/completer/ArgumentCompleterTest.java b/src/test/java/jline/console/completer/ArgumentCompleterTest.java index 2da519a8..1273335e 100644 --- a/src/test/java/jline/console/completer/ArgumentCompleterTest.java +++ b/src/test/java/jline/console/completer/ArgumentCompleterTest.java @@ -13,6 +13,8 @@ import jline.console.completer.StringsCompleter; import org.junit.Test; +import java.util.List; + /** * Tests for {@link jline.console.completer.ArgumentCompleter}. * @@ -65,4 +67,19 @@ public void test2() throws Exception { assertBuffer("some foo ", new Buffer("some fo").tab()); } -} \ No newline at end of file + + @Test + public void testMultipleRelative() throws Exception { + ArgumentCompleter argCompleter = new ArgumentCompleter( + new Completer() { + public int complete(String buffer, int cursor, List candidates) { + candidates.add("bar"); + return 3; + } + }, + new StringsCompleter("foo")); + console.addCompleter(argCompleter); + assertBuffer("thebar foo ", new Buffer("thebar ").tab()); + assertBuffer("thebar foo ", new Buffer("thebar f").tab()); + } +} From cf05d4b459d2a5b9c95be96ea6335c861f0c9b5c Mon Sep 17 00:00:00 2001 From: Thibault Kruse Date: Tue, 11 Aug 2015 23:13:27 +0200 Subject: [PATCH 2/2] Fix strict Argument checking broken with candidate having a delimiter appended --- .../console/completer/ArgumentCompleter.java | 19 ++++++++++++++++++- .../completer/ArgumentCompleterTest.java | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/jline/console/completer/ArgumentCompleter.java b/src/main/java/jline/console/completer/ArgumentCompleter.java index 7bb341d8..9e988e28 100644 --- a/src/main/java/jline/console/completer/ArgumentCompleter.java +++ b/src/main/java/jline/console/completer/ArgumentCompleter.java @@ -145,7 +145,24 @@ public int complete(final String buffer, final int cursor, final List candidates) { assertBuffer("thebar foo ", new Buffer("thebar ").tab()); assertBuffer("thebar foo ", new Buffer("thebar f").tab()); } + + @Test + public void testMultipleRelativeWithDelim() throws Exception { + ArgumentCompleter argCompleter = new ArgumentCompleter( + new Completer() { + public int complete(String buffer, int cursor, List candidates) { + candidates.add("bar "); + return 3; + } + }, + new StringsCompleter("foo")); + console.addCompleter(argCompleter); + assertBuffer("thebar foo ", new Buffer("thebar ").tab()); + assertBuffer("thebar foo ", new Buffer("thebar f").tab()); + } }