@@ -89,7 +89,7 @@ public String getFileName() {
8989 return targetOs .asFileName (name );
9090 }
9191
92- static Builder builder (@ NotNull String name , @ NotNull String version ) {
92+ public static Builder builder (@ NotNull String name , @ NotNull String version ) {
9393 return new Builder (Objects .requireNonNull (name ), Objects .requireNonNull (version ));
9494 }
9595
@@ -155,7 +155,7 @@ private String content(TargetOs os) {
155155 ForeignExeMockWriter writer = os .mockWriter (printWriter );
156156 writer = writer .writeIntro (optionDefaults ())
157157 .writeOptionParserIntro ()
158- .writeStringReturningOption ("--version" , version );
158+ .writeStringReturningOption ("--version" , "version " + version );
159159 for (Map .Entry <String , String > entry : stringReturningOptions .entrySet ()) {
160160 writer = writer .writeStringReturningOption (entry .getKey (), entry .getValue ());
161161 }
@@ -220,22 +220,16 @@ private static class UnixForeignExeMockWriter implements ForeignExeMockWriter {
220220 this .output = Objects .requireNonNull (output );
221221 }
222222
223- private String nonPrefixed (String optionName ) {
224- if (optionName .startsWith ("--" )) {
225- return optionName .substring (2 );
226- } else if (optionName .startsWith ("-" )) {
227- return optionName .substring (1 );
228- } else {
229- return optionName ;
230- }
223+ private String asVarName (String optionName ) {
224+ return optionName .replaceAll ("[^a-zA-Z0-9]" , "_" );
231225 }
232226
233227 @ Override
234228 public ForeignExeMockWriter writeIntro (@ NotNull Map <String , String > optionDefaults ) {
235229 Objects .requireNonNull (optionDefaults );
236230 output .println ("#!/bin/bash" );
237231 output .println ();
238- optionDefaults .forEach ((k , v ) -> output .printf ("%s=\" %s\" \n " , nonPrefixed (k ), v ));
232+ optionDefaults .forEach ((k , v ) -> output .printf ("%s=\" %s\" \n " , asVarName (k ), v ));
239233 // collect value from stdin
240234 output .println ("stdin_value=\" \" " );
241235 return this ;
@@ -259,8 +253,12 @@ public ForeignExeMockWriter writeStringReturningOption(String optionName, @NotNu
259253
260254 @ Override
261255 public ForeignExeMockWriter writeStringConsumingOption (String optionName ) {
256+ output .printf (" %s=*)\n " , optionName );
257+ output .printf (" %s=\" ${1#%s=}\" \n " , asVarName (optionName ), optionName );
258+ output .println (" shift" );
259+ output .println (" ;;" );
262260 output .printf (" %s)\n " , optionName );
263- output .printf (" %s=\" $2\" \n " , nonPrefixed (optionName ));
261+ output .printf (" %s=\" $2\" \n " , asVarName (optionName ));
264262 output .println (" shift 2" );
265263 output .println (" ;;" );
266264 return this ;
@@ -269,19 +267,30 @@ public ForeignExeMockWriter writeStringConsumingOption(String optionName) {
269267 @ Override
270268 public ForeignExeMockWriter writeStringConsumingOption (String optionName , @ NotNull List <String > validValues ) {
271269 // same as above, but with a list of valid values which are checked and failed if wrong
270+ output .println ("# check for --x=y writing variant" );
271+ output .printf (" %s=*)\n " , optionName );
272+ output .printf (" %s=\" ${1#%s=}\" \n " , asVarName (optionName ), optionName );
273+ writeValidValuesSubCheck (optionName , validValues );
274+ output .println (" shift" );
275+ output .println (" ;;" );
276+ output .println ("#check for --x y writing variant" );
272277 output .printf (" %s)\n " , optionName );
273- output .printf (" %s=\" $2\" \n " , nonPrefixed (optionName ));
274- output .println (" case \" $2\" in" );
278+ output .printf (" %s=\" $2\" \n " , asVarName (optionName ));
279+ writeValidValuesSubCheck (optionName , validValues );
280+ output .println (" shift 2" );
281+ output .println (" ;;" );
282+ return this ;
283+ }
284+
285+ private void writeValidValuesSubCheck (String optionName , @ NotNull List <String > validValues ) {
286+ output .printf (" case \" $%s\" in\n " , asVarName (optionName ));
275287 output .printf (" %s)\n " , validValues .stream ().collect (Collectors .joining ("|" )));
276288 output .println (" ;;" );
277289 output .println (" *)" );
278- output .printf (" echo \" Unknown %s: $2\" \n " , nonPrefixed (optionName ));
290+ output .printf (" echo \" Unknown %s: $2\" \n " , asVarName (optionName ));
279291 output .println (" exit 1" );
280292 output .println (" ;;" );
281293 output .println (" esac" );
282- output .println (" shift 2" );
283- output .println (" ;;" );
284- return this ;
285294 }
286295
287296 @ Override
@@ -308,8 +317,10 @@ public ForeignExeMockWriter writeReadFromStdin() {
308317
309318 @ Override
310319 public ForeignExeMockWriter writeWriteToStdout () {
311- // write the stdin_value to stdout but add 4 spaces at the end of each line
312- output .println ("echo \" ${stdin_value}\" | sed 's/$/ /'" );
320+ // write the stdin_value to stdout but add 4 spaces at the end of each line that does not already end with 4
321+ // spaces
322+ // output.println("echo \"${stdin_value}\" | sed '/ $/! s/$/ /'");
323+ output .println ("printf \" %s\" \" $stdin_value\" | sed '/ $/! s/$/ /'" );
313324 return this ;
314325 }
315326
0 commit comments