From 75fd5834bc1b8c4d28316cb5953544eab831d6f8 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 16:28:40 +0900 Subject: [PATCH 01/10] =?UTF-8?q?1.=20=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EB=8A=94=20usage()=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index d3dd8bc..ffe913e 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -98,13 +98,6 @@ public int cardinality() { return argsFound.size(); } - public String usage() { - if (schema.length() > 0) - return "-[" + schema + "]"; - else - return ""; - } - public boolean getBoolean(char arg) { ArgumentMarshaler am = marshalers.get(arg); boolean b = false; From 409c94d945187d82aa184a84b5815b5eb591e7e9 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 16:31:10 +0900 Subject: [PATCH 02/10] =?UTF-8?q?2.=20schema=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index ffe913e..588319b 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -3,30 +3,24 @@ import java.util.*; public class Args { - private String schema; private Map marshalers = new HashMap<>(); private Set argsFound = new HashSet<>(); private Iterator currentArgument; private List argsList; public Args(String schema, String[] args) throws ArgsException { - this.schema = schema; argsList = Arrays.asList(args); - parse(); - } - private void parse() throws ArgsException { - parseSchema(); + parseSchema(schema); parseArguments(); } - private boolean parseSchema() throws ArgsException { + private void parseSchema(String schema) throws ArgsException { for (String element : schema.split(",")) { if (element.length() > 0) { parseSchemaElement(element.trim()); } } - return true; } private void parseSchemaElement(String element) throws ArgsException { From a5f65d720dcee25a6c357cdd706338925bae5e5e Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 16:36:13 +0900 Subject: [PATCH 03/10] =?UTF-8?q?3.=20argList=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 588319b..9d2d6ae 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -6,13 +6,10 @@ public class Args { private Map marshalers = new HashMap<>(); private Set argsFound = new HashSet<>(); private Iterator currentArgument; - private List argsList; public Args(String schema, String[] args) throws ArgsException { - argsList = Arrays.asList(args); - parseSchema(schema); - parseArguments(); + parseArgumentStrings(Arrays.asList(args)); } private void parseSchema(String schema) throws ArgsException { @@ -48,7 +45,7 @@ private void validateSchemaElementId(char elementId) throws ArgsException { } } - private void parseArguments() throws ArgsException { + private void parseArgumentStrings(List argsList) throws ArgsException { for (currentArgument = argsList.iterator(); currentArgument.hasNext(); ) { String arg = currentArgument.next(); parseArgument(arg); From 23a18f78192dd875ff0d9db3fb6d5975f7767176 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 17:09:48 +0900 Subject: [PATCH 04/10] =?UTF-8?q?4.=20parsexxx()=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 57 ++++++++++++-------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 9d2d6ae..051f087 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -5,7 +5,7 @@ public class Args { private Map marshalers = new HashMap<>(); private Set argsFound = new HashSet<>(); - private Iterator currentArgument; + private ListIterator currentArgument; public Args(String schema, String[] args) throws ArgsException { parseSchema(schema); @@ -46,42 +46,35 @@ private void validateSchemaElementId(char elementId) throws ArgsException { } private void parseArgumentStrings(List argsList) throws ArgsException { - for (currentArgument = argsList.iterator(); currentArgument.hasNext(); ) { - String arg = currentArgument.next(); - parseArgument(arg); - } - } - - private void parseArgument(String arg) throws ArgsException { - if (arg.startsWith("-")) - parseElements(arg); - } - - private void parseElements(String arg) throws ArgsException { - for (int i = 1; i < arg.length(); i++) { - parseElement(arg.charAt(i)); + for (currentArgument = argsList.listIterator(); currentArgument.hasNext(); ) { + String argString = currentArgument.next(); + if (argString.startsWith("-")) { + parseArgumentCharacters(argString.substring(1)); + } else { + currentArgument.previous(); + break; + } } } - private void parseElement(char argChar) throws ArgsException { - if (setArgument(argChar)) - argsFound.add(argChar); - else { - throw new ArgsException(ArgsException.ErrorCode.UNEXPECTED_ARGUMENT, - argChar, null); + private void parseArgumentCharacters(String argChars) throws ArgsException { + for (int i = 0; i < argChars.length(); i++) { + parseArgumentCharacter(argChars.charAt(i)); } } - private boolean setArgument(char argChar) throws ArgsException { + private void parseArgumentCharacter(char argChar) throws ArgsException { ArgumentMarshaler m = marshalers.get(argChar); - if (m == null) - return false; - try { - m.set(currentArgument); - return true; - } catch (ArgsException e) { - e.setErrorArgumentId(argChar); - throw e; + if (m == null) { + throw new ArgsException(ArgsException.ErrorCode.UNEXPECTED_ARGUMENT, argChar, null); + } else { + argsFound.add(argChar); + try { + m.set(currentArgument); + } catch (ArgsException e) { + e.setErrorArgumentId(argChar); + throw e; + } } } @@ -130,4 +123,8 @@ public double getDouble(char arg) { public boolean has(char arg) { return argsFound.contains(arg); } + + public int nextArgument() { + return currentArgument.nextIndex(); + } } From acffc411c0ceac262003353b4e94ef92a24a2a5f Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 17:27:16 +0900 Subject: [PATCH 05/10] =?UTF-8?q?5.=20cardinality()=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 4 ---- src/test/java/chapter14/args/ArgsTest.java | 11 +---------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index 051f087..b5a3d83 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -78,10 +78,6 @@ private void parseArgumentCharacter(char argChar) throws ArgsException { } } - public int cardinality() { - return argsFound.size(); - } - public boolean getBoolean(char arg) { ArgumentMarshaler am = marshalers.get(arg); boolean b = false; diff --git a/src/test/java/chapter14/args/ArgsTest.java b/src/test/java/chapter14/args/ArgsTest.java index b28ab04..0b331a2 100644 --- a/src/test/java/chapter14/args/ArgsTest.java +++ b/src/test/java/chapter14/args/ArgsTest.java @@ -20,7 +20,7 @@ void noSchemaAndArguments() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isZero(); + assertThat(args.nextArgument()).isZero(); } @DisplayName("schema가 없고 argument가 1개 있는 경우") @@ -52,7 +52,6 @@ void multipleSchemasButNoArguments() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isZero(); assertThat(args.has('x')).isFalse(); assertThat(args.has('y')).isFalse(); assertThat(args.has('z')).isFalse(); @@ -108,7 +107,6 @@ void spacesInFormat() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isEqualTo(2); assertThat(args.has('x')).isTrue(); assertThat(args.has('y')).isTrue(); } @@ -124,7 +122,6 @@ void simpleBooleanPresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isOne(); assertThat(args.getBoolean('x')).isTrue(); } @@ -139,7 +136,6 @@ void simpleBooleanMultiplePresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isEqualTo(2); assertThat(args.has('x')).isTrue(); assertThat(args.has('y')).isTrue(); assertThat(args.has('z')).isFalse(); @@ -172,7 +168,6 @@ void simpleStringPresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isOne(); assertThat(args.has('x')).isTrue(); assertThat(args.getString('x')).isEqualTo("param"); } @@ -188,7 +183,6 @@ void simpleStringMultiplePresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isEqualTo(2); assertThat(args.has('x')).isTrue(); assertThat(args.has('y')).isTrue(); assertThat(args.has('z')).isFalse(); @@ -221,7 +215,6 @@ void simpleIntPresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isOne(); assertThat(args.has('x')).isTrue(); assertThat(args.getInt('x')).isEqualTo(42); } @@ -237,7 +230,6 @@ void simpleIntMultiplePresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isEqualTo(2); assertThat(args.has('x')).isTrue(); assertThat(args.has('y')).isTrue(); assertThat(args.has('z')).isFalse(); @@ -270,7 +262,6 @@ void simpleDoublePresent() throws Exception { Args args = new Args(schema, arguments); //then - assertThat(args.cardinality()).isOne(); assertThat(args.has('x')).isTrue(); assertThat(args.getDouble('x')).isEqualTo(42.3); } From 1c78fe99239cda47e2580e24b4e1b6742d299895 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 17:59:43 +0900 Subject: [PATCH 06/10] =?UTF-8?q?6.=20getxxx()=20=EB=82=B4=EB=B6=80=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=EC=9D=84=20=ED=83=80=EC=9E=85=EB=B3=84=20Arg?= =?UTF-8?q?umentMarshaler=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 26 ++-------- .../args/BooleanArgumentMarshaler.java | 8 +++ .../args/DoubleArgumentMarshaler.java | 8 +++ .../args/IntegerArgumentMarshaler.java | 8 +++ .../args/StringArgumentMarshaler.java | 8 +++ .../args/BooleanArgumentMarshalerTest.java | 52 +++++++++++++++++++ .../args/DoubleArgumentMarshalerTest.java | 43 ++++++++++++++- .../args/IntegerArgumentMarshalerTest.java | 43 ++++++++++++++- .../args/StringArgumentMarshalerTest.java | 45 +++++++++++++++- 9 files changed, 216 insertions(+), 25 deletions(-) create mode 100644 src/test/java/chapter14/args/BooleanArgumentMarshalerTest.java diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index b5a3d83..e675725 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -80,40 +80,22 @@ private void parseArgumentCharacter(char argChar) throws ArgsException { public boolean getBoolean(char arg) { ArgumentMarshaler am = marshalers.get(arg); - boolean b = false; - try { - b = am != null && (Boolean) am.get(); - } catch (ClassCastException e) { - b = false; - } - return b; + return BooleanArgumentMarshaler.getValue(am); } public String getString(char arg) { ArgumentMarshaler am = marshalers.get(arg); - try { - return am == null ? "" : (String) am.get(); - } catch (ClassCastException e) { - return ""; - } + return StringArgumentMarshaler.getValue(am); } public int getInt(char arg) { ArgumentMarshaler am = marshalers.get(arg); - try { - return am == null ? 0 : (Integer) am.get(); - } catch (ClassCastException e) { - return 0; - } + return IntegerArgumentMarshaler.getValue(am); } public double getDouble(char arg) { ArgumentMarshaler am = marshalers.get(arg); - try { - return am == null ? 0.0 : (Double) am.get(); - } catch (ClassCastException e) { - return 0.0; - } + return DoubleArgumentMarshaler.getValue(am); } public boolean has(char arg) { diff --git a/src/main/java/chapter14/args/BooleanArgumentMarshaler.java b/src/main/java/chapter14/args/BooleanArgumentMarshaler.java index 4619a7e..08a1110 100644 --- a/src/main/java/chapter14/args/BooleanArgumentMarshaler.java +++ b/src/main/java/chapter14/args/BooleanArgumentMarshaler.java @@ -14,4 +14,12 @@ public void set(Iterator currentArgument) throws ArgsException { public Object get() { return booleanValue; } + + public static boolean getValue(ArgumentMarshaler am) { + try { + return am != null && (Boolean) am.get(); + } catch (ClassCastException e) { + return false; + } + } } \ No newline at end of file diff --git a/src/main/java/chapter14/args/DoubleArgumentMarshaler.java b/src/main/java/chapter14/args/DoubleArgumentMarshaler.java index 16544d3..eebf551 100644 --- a/src/main/java/chapter14/args/DoubleArgumentMarshaler.java +++ b/src/main/java/chapter14/args/DoubleArgumentMarshaler.java @@ -26,4 +26,12 @@ public void set(Iterator currentArgument) throws ArgsException { public Object get() { return doubleValue; } + + public static double getValue(ArgumentMarshaler am) { + try { + return am == null ? 0.0 : (Double) am.get(); + } catch (ClassCastException e) { + return 0.0; + } + } } \ No newline at end of file diff --git a/src/main/java/chapter14/args/IntegerArgumentMarshaler.java b/src/main/java/chapter14/args/IntegerArgumentMarshaler.java index ee040a5..f5d42b6 100644 --- a/src/main/java/chapter14/args/IntegerArgumentMarshaler.java +++ b/src/main/java/chapter14/args/IntegerArgumentMarshaler.java @@ -26,4 +26,12 @@ public void set(Iterator currentArgument) throws ArgsException { public Object get() { return intValue; } + + public static int getValue(ArgumentMarshaler am) { + try { + return am == null ? 0 : (Integer) am.get(); + } catch (ClassCastException e) { + return 0; + } + } } \ No newline at end of file diff --git a/src/main/java/chapter14/args/StringArgumentMarshaler.java b/src/main/java/chapter14/args/StringArgumentMarshaler.java index 2eef6d9..a20bea0 100644 --- a/src/main/java/chapter14/args/StringArgumentMarshaler.java +++ b/src/main/java/chapter14/args/StringArgumentMarshaler.java @@ -21,4 +21,12 @@ public void set(Iterator currentArgument) throws ArgsException { public Object get() { return stringValue; } + + public static String getValue(ArgumentMarshaler am) { + try { + return am == null ? "" : (String) am.get(); + } catch (ClassCastException e) { + return ""; + } + } } \ No newline at end of file diff --git a/src/test/java/chapter14/args/BooleanArgumentMarshalerTest.java b/src/test/java/chapter14/args/BooleanArgumentMarshalerTest.java new file mode 100644 index 0000000..2b7f28d --- /dev/null +++ b/src/test/java/chapter14/args/BooleanArgumentMarshalerTest.java @@ -0,0 +1,52 @@ +package chapter14.args; + +import org.junit.jupiter.api.Test; + +import java.util.Iterator; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + + +class BooleanArgumentMarshalerTest { + + @Test + void getValueNotPresent() { + //given + ArgumentMarshaler am = new BooleanArgumentMarshaler(); + + //when, then + assertThat(BooleanArgumentMarshaler.getValue(am)).isFalse(); + } + + @Test + void getValuePresent() throws ArgsException { + //given + Iterator list = List.of("test").iterator(); + + //when + ArgumentMarshaler am = new BooleanArgumentMarshaler(); + am.set(list); + + //then + assertThat(BooleanArgumentMarshaler.getValue(am)).isTrue(); + } + + @Test + void getValueNotEqualsType() throws ArgsException { + //given + Iterator list = List.of("param").iterator(); + + //when + ArgumentMarshaler otherType = new StringArgumentMarshaler(); + otherType.set(list); + + //then + assertThat(BooleanArgumentMarshaler.getValue(otherType)).isFalse(); + } + + @Test + void getValueNull() { + assertThat(BooleanArgumentMarshaler.getValue(null)).isFalse(); + } +} \ No newline at end of file diff --git a/src/test/java/chapter14/args/DoubleArgumentMarshalerTest.java b/src/test/java/chapter14/args/DoubleArgumentMarshalerTest.java index 609941e..354c8c2 100644 --- a/src/test/java/chapter14/args/DoubleArgumentMarshalerTest.java +++ b/src/test/java/chapter14/args/DoubleArgumentMarshalerTest.java @@ -11,7 +11,6 @@ import static org.assertj.core.api.Assertions.catchException; class DoubleArgumentMarshalerTest { - private ArgumentMarshaler am = new DoubleArgumentMarshaler(); @DisplayName("값을 파싱할 수 없는 경우") @Test @@ -20,6 +19,7 @@ void invalidDouble() { Iterator argument = List.of("Forty two").iterator(); //when + ArgumentMarshaler am = new DoubleArgumentMarshaler(); Exception exception = catchException(() -> am.set(argument)); //then @@ -37,6 +37,7 @@ void missingDouble() { Iterator argument = Collections.emptyIterator(); //when + ArgumentMarshaler am = new DoubleArgumentMarshaler(); Exception exception = catchException(() -> am.set(argument)); //then @@ -45,4 +46,44 @@ void missingDouble() { ArgsException e = (ArgsException) exception; assertThat(e.getErrorCode()).isEqualTo(ArgsException.ErrorCode.MISSING_DOUBLE); } + + @Test + void getValueNotPresent() { + //given + ArgumentMarshaler am = new DoubleArgumentMarshaler(); + + //when, then + assertThat(DoubleArgumentMarshaler.getValue(am)).isZero(); + } + + @Test + void getValuePresent() throws ArgsException { + //given + Iterator list = List.of("42.3").iterator(); + + //when + ArgumentMarshaler am = new DoubleArgumentMarshaler(); + am.set(list); + + //then + assertThat(DoubleArgumentMarshaler.getValue(am)).isEqualTo(42.3); + } + + @Test + void getValueNotEqualsType() throws ArgsException { + //given + Iterator list = List.of("param").iterator(); + + //when + ArgumentMarshaler otherType = new StringArgumentMarshaler(); + otherType.set(list); + + //then + assertThat(DoubleArgumentMarshaler.getValue(otherType)).isZero(); + } + + @Test + void getValueNull() { + assertThat(DoubleArgumentMarshaler.getValue(null)).isZero(); + } } \ No newline at end of file diff --git a/src/test/java/chapter14/args/IntegerArgumentMarshalerTest.java b/src/test/java/chapter14/args/IntegerArgumentMarshalerTest.java index 9135c20..9c94d1e 100644 --- a/src/test/java/chapter14/args/IntegerArgumentMarshalerTest.java +++ b/src/test/java/chapter14/args/IntegerArgumentMarshalerTest.java @@ -11,7 +11,6 @@ import static org.assertj.core.api.Assertions.catchException; class IntegerArgumentMarshalerTest { - private ArgumentMarshaler am = new IntegerArgumentMarshaler(); @DisplayName("Integer Argument 값을 파싱할 수 없는 경우") @Test @@ -20,6 +19,7 @@ void invalidInteger() { Iterator argument = List.of("Forty two").iterator(); //when + ArgumentMarshaler am = new IntegerArgumentMarshaler(); Exception exception = catchException(() -> am.set(argument)); //then @@ -37,6 +37,7 @@ void missingInteger() { Iterator argument = Collections.emptyIterator(); //when + ArgumentMarshaler am = new IntegerArgumentMarshaler(); Exception exception = catchException(() -> am.set(argument)); //then @@ -45,4 +46,44 @@ void missingInteger() { ArgsException e = (ArgsException) exception; assertThat(e.getErrorCode()).isEqualTo(ArgsException.ErrorCode.MISSING_INTEGER); } + + @Test + void getValueNotPresent() { + //given + ArgumentMarshaler am = new IntegerArgumentMarshaler(); + + //when, then + assertThat(IntegerArgumentMarshaler.getValue(am)).isZero(); + } + + @Test + void getValuePresent() throws ArgsException { + //given + Iterator list = List.of("42").iterator(); + + //when + ArgumentMarshaler am = new IntegerArgumentMarshaler(); + am.set(list); + + //then + assertThat(IntegerArgumentMarshaler.getValue(am)).isEqualTo(42); + } + + @Test + void getValueNotEqualsType() throws ArgsException { + //given + Iterator list = List.of("param").iterator(); + + //when + ArgumentMarshaler otherType = new StringArgumentMarshaler(); + otherType.set(list); + + //then + assertThat(IntegerArgumentMarshaler.getValue(otherType)).isZero(); + } + + @Test + void getValueNull() { + assertThat(IntegerArgumentMarshaler.getValue(null)).isZero(); + } } \ No newline at end of file diff --git a/src/test/java/chapter14/args/StringArgumentMarshalerTest.java b/src/test/java/chapter14/args/StringArgumentMarshalerTest.java index 9f7772c..fed79ca 100644 --- a/src/test/java/chapter14/args/StringArgumentMarshalerTest.java +++ b/src/test/java/chapter14/args/StringArgumentMarshalerTest.java @@ -5,12 +5,12 @@ import java.util.Collections; import java.util.Iterator; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchException; class StringArgumentMarshalerTest { - private ArgumentMarshaler am = new StringArgumentMarshaler(); @DisplayName("Argument 값이 없는 경우") @Test @@ -19,6 +19,7 @@ void missingString() { Iterator argument = Collections.emptyIterator(); //when + ArgumentMarshaler am = new StringArgumentMarshaler(); Exception exception = catchException(() -> am.set(argument)); //then @@ -27,4 +28,46 @@ void missingString() { ArgsException e = (ArgsException) exception; assertThat(e.getErrorCode()).isEqualTo(ArgsException.ErrorCode.MISSING_STRING); } + + + @Test + void getValueNotPresent() { + //given + ArgumentMarshaler am = new StringArgumentMarshaler(); + + //when, then + assertThat(StringArgumentMarshaler.getValue(am)).isEmpty(); + } + + @Test + void getValuePresent() throws ArgsException { + //given + Iterator list = List.of("param").iterator(); + + //when + ArgumentMarshaler am = new StringArgumentMarshaler(); + am.set(list); + + //then + assertThat(StringArgumentMarshaler.getValue(am)).isEqualTo("param"); + } + + @Test + void getValueNotEqualsType() throws ArgsException { + //given + Iterator list = List.of("42").iterator(); + + //when + ArgumentMarshaler otherType = new IntegerArgumentMarshaler(); + otherType.set(list); + + //then + assertThat(StringArgumentMarshaler.getValue(otherType)).isEmpty(); + } + + + @Test + void getValueNull() { + assertThat(StringArgumentMarshaler.getValue(null)).isEmpty(); + } } \ No newline at end of file From b8e8e9913cff00ab32a8fe9fea369f30eb45c774 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 18:10:16 +0900 Subject: [PATCH 07/10] =?UTF-8?q?7.=20ArgumentMarshaler=20get()=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/ArgumentMarshaler.java | 2 -- .../java/chapter14/args/BooleanArgumentMarshaler.java | 11 +++-------- .../java/chapter14/args/DoubleArgumentMarshaler.java | 11 +++-------- .../java/chapter14/args/IntegerArgumentMarshaler.java | 11 +++-------- .../java/chapter14/args/StringArgumentMarshaler.java | 11 +++-------- 5 files changed, 12 insertions(+), 34 deletions(-) diff --git a/src/main/java/chapter14/args/ArgumentMarshaler.java b/src/main/java/chapter14/args/ArgumentMarshaler.java index 8a641aa..ebf4a48 100644 --- a/src/main/java/chapter14/args/ArgumentMarshaler.java +++ b/src/main/java/chapter14/args/ArgumentMarshaler.java @@ -4,6 +4,4 @@ public interface ArgumentMarshaler { void set(Iterator currentArgument) throws ArgsException; - - Object get(); } diff --git a/src/main/java/chapter14/args/BooleanArgumentMarshaler.java b/src/main/java/chapter14/args/BooleanArgumentMarshaler.java index 08a1110..8ec3e0e 100644 --- a/src/main/java/chapter14/args/BooleanArgumentMarshaler.java +++ b/src/main/java/chapter14/args/BooleanArgumentMarshaler.java @@ -10,15 +10,10 @@ public void set(Iterator currentArgument) throws ArgsException { booleanValue = true; } - @Override - public Object get() { - return booleanValue; - } - public static boolean getValue(ArgumentMarshaler am) { - try { - return am != null && (Boolean) am.get(); - } catch (ClassCastException e) { + if (am != null && am instanceof BooleanArgumentMarshaler) { + return ((BooleanArgumentMarshaler) am).booleanValue; + } else { return false; } } diff --git a/src/main/java/chapter14/args/DoubleArgumentMarshaler.java b/src/main/java/chapter14/args/DoubleArgumentMarshaler.java index eebf551..e737b01 100644 --- a/src/main/java/chapter14/args/DoubleArgumentMarshaler.java +++ b/src/main/java/chapter14/args/DoubleArgumentMarshaler.java @@ -22,15 +22,10 @@ public void set(Iterator currentArgument) throws ArgsException { } } - @Override - public Object get() { - return doubleValue; - } - public static double getValue(ArgumentMarshaler am) { - try { - return am == null ? 0.0 : (Double) am.get(); - } catch (ClassCastException e) { + if (am != null && am instanceof DoubleArgumentMarshaler) { + return ((DoubleArgumentMarshaler) am).doubleValue; + } else { return 0.0; } } diff --git a/src/main/java/chapter14/args/IntegerArgumentMarshaler.java b/src/main/java/chapter14/args/IntegerArgumentMarshaler.java index f5d42b6..5162230 100644 --- a/src/main/java/chapter14/args/IntegerArgumentMarshaler.java +++ b/src/main/java/chapter14/args/IntegerArgumentMarshaler.java @@ -22,15 +22,10 @@ public void set(Iterator currentArgument) throws ArgsException { } } - @Override - public Object get() { - return intValue; - } - public static int getValue(ArgumentMarshaler am) { - try { - return am == null ? 0 : (Integer) am.get(); - } catch (ClassCastException e) { + if (am != null && am instanceof IntegerArgumentMarshaler) { + return ((IntegerArgumentMarshaler) am).intValue; + } else { return 0; } } diff --git a/src/main/java/chapter14/args/StringArgumentMarshaler.java b/src/main/java/chapter14/args/StringArgumentMarshaler.java index a20bea0..b0698e4 100644 --- a/src/main/java/chapter14/args/StringArgumentMarshaler.java +++ b/src/main/java/chapter14/args/StringArgumentMarshaler.java @@ -17,15 +17,10 @@ public void set(Iterator currentArgument) throws ArgsException { } } - @Override - public Object get() { - return stringValue; - } - public static String getValue(ArgumentMarshaler am) { - try { - return am == null ? "" : (String) am.get(); - } catch (ClassCastException e) { + if (am != null && am instanceof StringArgumentMarshaler) { + return ((StringArgumentMarshaler) am).stringValue; + } else { return ""; } } From 8c43d3d8611467a149d1f3f6333512ff3de5c289 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 18:16:35 +0900 Subject: [PATCH 08/10] =?UTF-8?q?8.=20=EC=B1=85=EA=B3=BC=20=EB=8F=99?= =?UTF-8?q?=EC=9D=BC=ED=95=98=EA=B2=8C=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B0=8F=20=EA=B4=84=ED=98=B8=20=EB=93=B1?= =?UTF-8?q?=20format=20=EB=A7=9E=EC=B6=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/Args.java | 57 +++++++++++++------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/main/java/chapter14/args/Args.java b/src/main/java/chapter14/args/Args.java index e675725..07e4ac8 100644 --- a/src/main/java/chapter14/args/Args.java +++ b/src/main/java/chapter14/args/Args.java @@ -2,12 +2,17 @@ import java.util.*; +import static chapter14.args.ArgsException.ErrorCode.*; + public class Args { - private Map marshalers = new HashMap<>(); - private Set argsFound = new HashSet<>(); + private Map marshalers; + private Set argsFound; private ListIterator currentArgument; public Args(String schema, String[] args) throws ArgsException { + marshalers = new HashMap<>(); + argsFound = new HashSet<>(); + parseSchema(schema); parseArgumentStrings(Arrays.asList(args)); } @@ -24,24 +29,22 @@ private void parseSchemaElement(String element) throws ArgsException { char elementId = element.charAt(0); String elementTail = element.substring(1); validateSchemaElementId(elementId); - if (elementTail.length() == 0) { + if (elementTail.length() == 0) marshalers.put(elementId, new BooleanArgumentMarshaler()); - } else if (elementTail.equals("*")) { + else if (elementTail.equals("*")) marshalers.put(elementId, new StringArgumentMarshaler()); - } else if (elementTail.equals("#")) { + else if (elementTail.equals("#")) marshalers.put(elementId, new IntegerArgumentMarshaler()); - } else if (elementTail.equals("##")) { + else if (elementTail.equals("##")) marshalers.put(elementId, new DoubleArgumentMarshaler()); - } else { - throw new ArgsException(ArgsException.ErrorCode.INVALID_ARGUMENT_FORMAT, - elementId, elementTail); - } + else + throw new ArgsException(INVALID_ARGUMENT_FORMAT, elementId, elementTail); + } private void validateSchemaElementId(char elementId) throws ArgsException { if (!Character.isLetter(elementId)) { - throw new ArgsException(ArgsException.ErrorCode.INVALID_ARGUMENT_NAME, - elementId, null); + throw new ArgsException(INVALID_ARGUMENT_NAME, elementId, null); } } @@ -66,7 +69,7 @@ private void parseArgumentCharacters(String argChars) throws ArgsException { private void parseArgumentCharacter(char argChar) throws ArgsException { ArgumentMarshaler m = marshalers.get(argChar); if (m == null) { - throw new ArgsException(ArgsException.ErrorCode.UNEXPECTED_ARGUMENT, argChar, null); + throw new ArgsException(UNEXPECTED_ARGUMENT, argChar, null); } else { argsFound.add(argChar); try { @@ -78,31 +81,27 @@ private void parseArgumentCharacter(char argChar) throws ArgsException { } } - public boolean getBoolean(char arg) { - ArgumentMarshaler am = marshalers.get(arg); - return BooleanArgumentMarshaler.getValue(am); + public boolean has(char arg) { + return argsFound.contains(arg); } - public String getString(char arg) { - ArgumentMarshaler am = marshalers.get(arg); - return StringArgumentMarshaler.getValue(am); + public int nextArgument() { + return currentArgument.nextIndex(); } - public int getInt(char arg) { - ArgumentMarshaler am = marshalers.get(arg); - return IntegerArgumentMarshaler.getValue(am); + public boolean getBoolean(char arg) { + return BooleanArgumentMarshaler.getValue(marshalers.get(arg)); } - public double getDouble(char arg) { - ArgumentMarshaler am = marshalers.get(arg); - return DoubleArgumentMarshaler.getValue(am); + public String getString(char arg) { + return StringArgumentMarshaler.getValue(marshalers.get(arg)); } - public boolean has(char arg) { - return argsFound.contains(arg); + public int getInt(char arg) { + return IntegerArgumentMarshaler.getValue(marshalers.get(arg)); } - public int nextArgument() { - return currentArgument.nextIndex(); + public double getDouble(char arg) { + return DoubleArgumentMarshaler.getValue(marshalers.get(arg)); } } From 3bdeb3641855370158e8548e40d8e1ccaf9da443 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 18:23:52 +0900 Subject: [PATCH 09/10] =?UTF-8?q?9.=20ErrorCode.OK=20errorMessage=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/args/ArgsException.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/chapter14/args/ArgsException.java b/src/main/java/chapter14/args/ArgsException.java index 4e9addb..5f6b985 100644 --- a/src/main/java/chapter14/args/ArgsException.java +++ b/src/main/java/chapter14/args/ArgsException.java @@ -51,10 +51,10 @@ public void setErrorCode(ErrorCode errorCode) { this.errorCode = errorCode; } - public String errorMessage() throws Exception { + public String errorMessage() { switch (errorCode) { case OK: - throw new Exception("TILT: Should not get here."); + return "TILT: Should not get here."; case UNEXPECTED_ARGUMENT: return String.format("Argument(s) -%c unexpected.", errorArgumentId); case MISSING_STRING: From dc9c2a36c34c5e1fa6f318fbd5f4e6adfd32e592 Mon Sep 17 00:00:00 2001 From: viiviii Date: Thu, 12 May 2022 18:25:03 +0900 Subject: [PATCH 10/10] =?UTF-8?q?10.=20=EC=82=AC=EC=9A=A9=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=AA=A9=EB=A1=9D=2014-1=EA=B3=BC=20=EB=8F=99?= =?UTF-8?q?=EC=9D=BC=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/chapter14/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/chapter14/Application.java b/src/main/java/chapter14/Application.java index e9acbe7..904f8d9 100644 --- a/src/main/java/chapter14/Application.java +++ b/src/main/java/chapter14/Application.java @@ -13,7 +13,7 @@ public static void main(String[] args) { String directory = arg.getString('d'); executeApplication(logging, port, directory); } catch (ArgsException e) { - System.out.printf("Argument error: %s\n", e.getMessage()); + System.out.printf("Argument error: %s\n", e.errorMessage()); } }