Repository: nifi Updated Branches: refs/heads/master e7a254f78 -> e12e7a55b
NIFI-1562 ExecuteStreamCommand and ExecuteProcess now support empty command line arguments This closes #247 Signed-off-by: Matt Burgess <mattyb...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/e12e7a55 Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/e12e7a55 Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/e12e7a55 Branch: refs/heads/master Commit: e12e7a55b75f5e358bdbcea79be9baba77532f94 Parents: e7a254f Author: Michal Klempa <michal.kle...@gmail.com> Authored: Thu Feb 25 09:01:12 2016 +0100 Committer: Matt Burgess <mattyb...@apache.org> Committed: Thu Mar 17 23:15:12 2016 -0400 ---------------------------------------------------------------------- .../processors/standard/util/ArgumentUtils.java | 17 +++------ .../processors/standard/TestExecuteProcess.java | 38 ++++++++++++++------ 2 files changed, 32 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/e12e7a55/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/ArgumentUtils.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/ArgumentUtils.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/ArgumentUtils.java index dff6ac7..556aaf1 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/ArgumentUtils.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/ArgumentUtils.java @@ -38,21 +38,18 @@ public class ArgumentUtils { final List<String> args = new ArrayList<>(); - final String trimmed = input.trim(); boolean inQuotes = false; final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < trimmed.length(); i++) { - final char c = trimmed.charAt(i); + for (int i = 0; i < input.length(); i++) { + final char c = input.charAt(i); if (DELIMITING_CHARACTERS.contains(c) || c == definedDelimiter) { if (inQuotes) { sb.append(c); } else { - final String arg = sb.toString().trim(); - if (!arg.isEmpty()) { - args.add(arg); - } + final String arg = sb.toString(); + args.add(arg); sb.setLength(0); } continue; @@ -66,11 +63,7 @@ public class ArgumentUtils { sb.append(c); } - final String finalArg = sb.toString().trim(); - - if (!finalArg.isEmpty()) { - args.add(finalArg); - } + args.add(sb.toString()); return args; } http://git-wip-us.apache.org/repos/asf/nifi/blob/e12e7a55/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java index 22feef9..c91d24d 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java @@ -16,6 +16,7 @@ */ package org.apache.nifi.processors.standard; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -41,25 +42,40 @@ public class TestExecuteProcess { final List<String> zeroArgs = ArgumentUtils.splitArgs(" ", ' '); assertNotNull(zeroArgs); - assertTrue(zeroArgs.isEmpty()); + assertEquals(3, zeroArgs.size()); + String[] expectedArray = {"","",""}; + assertArrayEquals(expectedArray, zeroArgs.toArray(new String[0])); - final List<String> singleArg = ArgumentUtils.splitArgs(" hello ", ' '); + final List<String> singleArg = ArgumentUtils.splitArgs(" hello ", ';'); assertEquals(1, singleArg.size()); - assertEquals("hello", singleArg.get(0)); + assertEquals(" hello ", singleArg.get(0)); - final List<String> twoArg = ArgumentUtils.splitArgs(" hello good-bye ", ' '); + final List<String> twoArg = ArgumentUtils.splitArgs(" hello ; good-bye ", ';'); assertEquals(2, twoArg.size()); - assertEquals("hello", twoArg.get(0)); - assertEquals("good-bye", twoArg.get(1)); + assertEquals(" hello ", twoArg.get(0)); + assertEquals(" good-bye ", twoArg.get(1)); - final List<String> singleQuotedArg = ArgumentUtils.splitArgs(" \"hello\" ", ' '); - assertEquals(1, singleQuotedArg.size()); - assertEquals("hello", singleQuotedArg.get(0)); + final List<String> oneUnnecessarilyQuotedArg = ArgumentUtils.splitArgs(" \"hello\" ", ';'); + assertEquals(1, oneUnnecessarilyQuotedArg.size()); + assertEquals(" hello ", oneUnnecessarilyQuotedArg.get(0)); - final List<String> twoQuotedArg = ArgumentUtils.splitArgs(" hello \"good bye\"", ' '); + final List<String> twoQuotedArg = ArgumentUtils.splitArgs("\" hello\" \"good bye\"", ' '); assertEquals(2, twoQuotedArg.size()); - assertEquals("hello", twoQuotedArg.get(0)); + assertEquals(" hello", twoQuotedArg.get(0)); assertEquals("good bye", twoQuotedArg.get(1)); + + final List<String> twoArgOneQuotedPerDelimiterArg = ArgumentUtils.splitArgs("one;two;three\";\"and\";\"half\"", ';'); + assertEquals(3, twoArgOneQuotedPerDelimiterArg.size()); + assertEquals("one", twoArgOneQuotedPerDelimiterArg.get(0)); + assertEquals("two", twoArgOneQuotedPerDelimiterArg.get(1)); + assertEquals("three;and;half", twoArgOneQuotedPerDelimiterArg.get(2)); + + final List<String> twoArgOneWholeQuotedArgOneEmptyArg = ArgumentUtils.splitArgs("one;two;\"three;and;half\";", ';'); + assertEquals(4, twoArgOneWholeQuotedArgOneEmptyArg.size()); + assertEquals("one", twoArgOneWholeQuotedArgOneEmptyArg.get(0)); + assertEquals("two", twoArgOneWholeQuotedArgOneEmptyArg.get(1)); + assertEquals("three;and;half", twoArgOneWholeQuotedArgOneEmptyArg.get(2)); + assertEquals("", twoArgOneWholeQuotedArgOneEmptyArg.get(3)); } @Ignore // won't run under Windows