Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/main/java/com/lmax/simpledsl/api/DslParams.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,27 @@ static DslParams create(String[] args, DslArg... arguments)
return new DslParamsParser().parse(args, arguments);
}

/**
* Create new {@link DslParams} from multiline args. Useful for passing Java text blocks.
*
* <pre>
* publicAPI.placeOrder("""
* FTSE100
* side: buy
* quantity: 10
* price: 5000
* expectedStatus: UNMATCHED
* """);
* </pre>
*
* @param multilineArgs the values
* @param arguments the {@link DslArg multilineArgs}
* @return the new {@link DslParams}
*/
static DslParams create(String multilineArgs, DslArg... arguments)
{
return new DslParamsParser().parse(multilineArgs.split("\\R"), arguments);
}

/**
* A shorthand way to create a {@link DslParams} instance that accepts a single required parameter and return the
Expand Down
40 changes: 40 additions & 0 deletions src/test/java/com/lmax/simpledsl/internal/DslParamsParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,46 @@ public void maybeShouldThrowExceptionIfRequiredParametersArePassedOutOfOrder()
assertEquals("Unexpected ambiguous argument 1", exception.getMessage());
}

@Test
public void canCreateDslParamsFromMultilineTextBlock()
{
final DslParams fromVarargs = DslParams.create(new String[]{"arg1: ags", "arg2: dan", "arg3: simon"},
new RequiredArg("arg1"),
new RequiredArg("arg2"),
new RequiredArg("arg3"));

final DslParams fromMultiline = DslParams.create("arg1: ags\narg2: dan\narg3: simon\n",
new RequiredArg("arg1"),
new RequiredArg("arg2"),
new RequiredArg("arg3"));

final DslParams fromMultilineWindows = DslParams.create("arg1: ags\r\narg2: dan\r\narg3: simon\r\n",
new RequiredArg("arg1"),
new RequiredArg("arg2"),
new RequiredArg("arg3"));

final DslParams fromMultilineMac = DslParams.create("arg1: ags\rarg2: dan\rarg3: simon\r",
new RequiredArg("arg1"),
new RequiredArg("arg2"),
new RequiredArg("arg3"));

assertEquals("ags", fromMultiline.value("arg1"));
assertEquals("dan", fromMultiline.value("arg2"));
assertEquals("simon", fromMultiline.value("arg3"));

assertEquals("ags", fromMultilineWindows.value("arg1"));
assertEquals("dan", fromMultilineWindows.value("arg2"));
assertEquals("simon", fromMultilineWindows.value("arg3"));

assertEquals("ags", fromMultilineMac.value("arg1"));
assertEquals("dan", fromMultilineMac.value("arg2"));
assertEquals("simon", fromMultilineMac.value("arg3"));

assertEquals(fromVarargs.value("arg1"), fromMultiline.value("arg1"));
assertEquals(fromVarargs.value("arg2"), fromMultiline.value("arg2"));
assertEquals(fromVarargs.value("arg3"), fromMultiline.value("arg3"));
}

private enum PossiblePets
{
COW,
Expand Down