Skip to content
This repository was archived by the owner on Jul 6, 2023. It is now read-only.

Commit e871b67

Browse files
committed
adding lambda style parameters for param command
1 parent 95750ec commit e871b67

File tree

4 files changed

+65
-20
lines changed

4 files changed

+65
-20
lines changed

cypher-shell/src/main/java/org/neo4j/shell/commands/Param.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@
1717
public class Param implements Command {
1818
// Match arguments such as "(key) (value with possible spaces)" where key and value are any strings
1919
private static final Pattern backtickPattern = Pattern.compile("^\\s*(?<key>(`([^`])*`)+?):?\\s+(?<value>.+)$");
20+
private static final Pattern backtickLambdaPattern = Pattern.compile("^\\s*(?<key>(`([^`])*`)+?)\\s*=>\\s*(?<value>.+)$");
2021
private static final Pattern argPattern = Pattern.compile("^\\s*(?<key>[\\p{L}_][\\p{L}0-9_]*):?\\s+(?<value>.+)$");
22+
private static final Pattern lambdaPattern = Pattern.compile("^\\s*(?<key>[\\p{L}_][\\p{L}0-9_]*)\\s*=>\\s*(?<value>.+)$");
23+
private static final Pattern lambdaMapPattern = Pattern.compile("^\\s*(?<key>[\\p{L}_][\\p{L}0-9_]*):\\s*=>\\s*(?<value>.+)$");
2124

2225
public static final String COMMAND_NAME = ":param";
2326
private final VariableHolder variableHolder;
@@ -41,7 +44,7 @@ public String getDescription() {
4144
@Nonnull
4245
@Override
4346
public String getUsage() {
44-
return "name value";
47+
return "name => value";
4548
}
4649

4750
@Nonnull
@@ -58,21 +61,32 @@ public List<String> getAliases() {
5861

5962
@Override
6063
public void execute(@Nonnull final String argString) throws CommandException {
64+
Matcher lambdaMapMatcher = lambdaMapPattern.matcher(argString);
65+
if (lambdaMapMatcher.matches()) {
66+
throw new CommandException(AnsiFormattedText.from("Incorrect number of arguments.\nusage: ")
67+
.bold().append(COMMAND_NAME).boldOff().append(" ").append(getUsage()));
68+
}
69+
Matcher lambdaMatcher = lambdaPattern.matcher(argString);
70+
if (lambdaMatcher.matches()) {
71+
variableHolder.set(lambdaMatcher.group("key"), lambdaMatcher.group("value"));
72+
return;
73+
}
6174
Matcher alphanumericMatcher = argPattern.matcher(argString);
6275
if (alphanumericMatcher.matches()) {
6376
variableHolder.set(alphanumericMatcher.group("key"), alphanumericMatcher.group("value"));
64-
} else {
65-
checkForBackticks(argString);
77+
return;
78+
}
79+
Matcher backtickLambdaMatcher = backtickLambdaPattern.matcher(argString);
80+
if (argString.trim().startsWith("`") && backtickLambdaMatcher.matches() && backtickLambdaMatcher.group("key").length() > 2) {
81+
variableHolder.set(backtickLambdaMatcher.group("key"), backtickLambdaMatcher.group("value"));
82+
return;
6683
}
67-
}
68-
69-
private void checkForBackticks(@Nonnull String argString) throws CommandException {
7084
Matcher matcher = backtickPattern.matcher(argString);
7185
if (argString.trim().startsWith("`") && matcher.matches() && matcher.group("key").length() > 2) {
7286
variableHolder.set(matcher.group("key"), matcher.group("value"));
73-
} else {
74-
throw new CommandException(AnsiFormattedText.from("Incorrect number of arguments.\nusage: ")
75-
.bold().append(COMMAND_NAME).boldOff().append(" ").append(getUsage()));
87+
return;
7688
}
89+
throw new CommandException(AnsiFormattedText.from("Incorrect number of arguments.\nusage: ")
90+
.bold().append(COMMAND_NAME).boldOff().append(" ").append(getUsage()));
7791
}
7892
}

cypher-shell/src/main/java/org/neo4j/shell/commands/Params.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ private void listParam(@Nonnull String name) throws CommandException {
8585
}
8686

8787
private void listParam(int leftColWidth, @Nonnull String key, @Nonnull Object value) {
88-
logger.printOut(String.format("%-" + leftColWidth + "s: %s", key, value));
88+
logger.printOut(String.format("%-" + leftColWidth + "s => %s", key, value));
8989
}
9090

9191
private void listAllParams() {

cypher-shell/src/test/java/org/neo4j/shell/commands/ParamTest.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.neo4j.shell.VariableHolder;
99
import org.neo4j.shell.exception.CommandException;
1010

11+
import static junit.framework.TestCase.assertEquals;
1112
import static junit.framework.TestCase.fail;
1213
import static org.hamcrest.CoreMatchers.containsString;
1314
import static org.mockito.Mockito.mock;
@@ -44,12 +45,26 @@ public void shouldFailIfOneArg() throws CommandException {
4445
}
4546

4647
@Test
47-
public void setValue() throws CommandException {
48+
public void setParam() throws CommandException {
4849
cmd.execute("bob 9");
4950

5051
verify(mockShell).set("bob", "9");
5152
}
5253

54+
@Test
55+
public void setLambdasAsParam() throws CommandException {
56+
cmd.execute("bob => 9");
57+
58+
verify(mockShell).set("bob", "9");
59+
}
60+
61+
@Test
62+
public void setLambdasAsParamWithBackticks() throws CommandException {
63+
cmd.execute("`bob` => 9");
64+
65+
verify(mockShell).set("`bob`", "9");
66+
}
67+
5368
@Test
5469
public void setSpecialCharacterParameter() throws CommandException {
5570
cmd.execute("bØb 9");
@@ -58,14 +73,14 @@ public void setSpecialCharacterParameter() throws CommandException {
5873
}
5974

6075
@Test
61-
public void setValueWithSpecialCharacters() throws CommandException {
76+
public void setParamWithSpecialCharacters() throws CommandException {
6277
cmd.execute("`bob#` 9");
6378

6479
verify(mockShell).set("`bob#`", "9");
6580
}
6681

6782
@Test
68-
public void setValueWithOddNoOfBackTicks() throws CommandException {
83+
public void setParamWithOddNoOfBackTicks() throws CommandException {
6984
cmd.execute(" `bo `` sömething ``` 9");
7085

7186
verify(mockShell).set("`bo `` sömething ```", "9");
@@ -81,6 +96,16 @@ public void shouldFailForVariablesWithoutEscaping() throws CommandException {
8196
fail("Expected error");
8297
}
8398

99+
@Test
100+
public void shouldFailForVariablesMixingMapStyleAssignmentAndLambdas() throws CommandException {
101+
thrown.expect(CommandException.class);
102+
thrown.expectMessage(containsString("Incorrect number of arguments"));
103+
104+
cmd.execute("bob: => 9");
105+
106+
fail("Expected error");
107+
}
108+
84109
@Test
85110
public void shouldFailForEmptyVariables() throws CommandException {
86111
thrown.expect(CommandException.class);
@@ -143,4 +168,10 @@ public void shouldNotExecuteEscapedCypher() throws CommandException {
143168
cmd.execute("bob \"RETURN 5 as bob\"");
144169
verify(mockShell).set("bob", "\"RETURN 5 as bob\"");
145170
}
171+
172+
@Test
173+
public void printUsage() throws CommandException {
174+
String usage = cmd.getUsage();
175+
assertEquals(usage, "name => value");
176+
}
146177
}

cypher-shell/src/test/java/org/neo4j/shell/commands/ParamsTest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void runCommand() throws CommandException {
5656
// when
5757
cmd.execute("");
5858
// then
59-
verify(logger).printOut("var: 9");
59+
verify(logger).printOut("var => 9");
6060
verifyNoMoreInteractions(logger);
6161
}
6262

@@ -68,8 +68,8 @@ public void runCommandAlignment() throws CommandException {
6868
// when
6969
cmd.execute("");
7070
// then
71-
verify(logger).printOut("param: 99999");
72-
verify(logger).printOut("var : 9");
71+
verify(logger).printOut("param => 99999");
72+
verify(logger).printOut("var => 9");
7373
verifyNoMoreInteractions(logger);
7474
}
7575

@@ -81,7 +81,7 @@ public void runCommandWithArg() throws CommandException {
8181
// when
8282
cmd.execute("var");
8383
// then
84-
verify(logger).printOut("var: 9");
84+
verify(logger).printOut("var => 9");
8585
verifyNoMoreInteractions(logger);
8686
}
8787

@@ -93,7 +93,7 @@ public void runCommandWithArgWithExtraSpace() throws CommandException {
9393
// when
9494
cmd.execute(" var");
9595
// then
96-
verify(logger).printOut("var: 9");
96+
verify(logger).printOut("var => 9");
9797
verifyNoMoreInteractions(logger);
9898
}
9999

@@ -105,7 +105,7 @@ public void runCommandWithArgWithBackticks() throws CommandException {
105105
// when
106106
cmd.execute("`var`");
107107
// then
108-
verify(logger).printOut("`var`: 9");
108+
verify(logger).printOut("`var` => 9");
109109
verifyNoMoreInteractions(logger);
110110
}
111111

@@ -117,7 +117,7 @@ public void runCommandWithSpecialCharacters() throws CommandException {
117117
// when
118118
cmd.execute("`var ```");
119119
// then
120-
verify(logger).printOut("`var ```: 9");
120+
verify(logger).printOut("`var ``` => 9");
121121
verifyNoMoreInteractions(logger);
122122
}
123123

0 commit comments

Comments
 (0)