From 979b362ad1be3dc8315391fd2af926b543cda0af Mon Sep 17 00:00:00 2001 From: Deboshree Date: Fri, 24 Mar 2023 21:41:26 +0530 Subject: [PATCH] https://jira.baeldung.com/browse/BAEL- 1. moving modules to java-string-conversions 2. fixing old broken test --- .../stringtoint/StringToIntEncapsulation.java | 53 +++++++++++++++ .../DateToStringFormatterUnitTest.java | 17 +++-- .../StringToIntEncapsulationUnitTest.java | 67 +++++++++++++++++++ 3 files changed, 128 insertions(+), 9 deletions(-) create mode 100644 core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntEncapsulation.java create mode 100644 core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntEncapsulationUnitTest.java diff --git a/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntEncapsulation.java b/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntEncapsulation.java new file mode 100644 index 0000000000..cac1a5e19b --- /dev/null +++ b/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntEncapsulation.java @@ -0,0 +1,53 @@ +package com.baeldung.stringtoint; + +import java.util.Optional; +import org.apache.commons.lang3.math.NumberUtils; + +public class StringToIntEncapsulation { + + private StringToIntEncapsulation() { + } + + public static Integer convertStringToIntUsingIntegerParseInt(String input){ + try { + return Integer.parseInt(input); + } catch (NumberFormatException e) { + // log or handle the error + return null; // or Integer.MIN_VALUE, or some other default value + } + } + + public static Integer convertStringToIntUsingIntegerValueOf(String input){ + try { + return Integer.valueOf(input); + } catch (NumberFormatException e) { + // log or handle the error + return null; // or Integer.MIN_VALUE, or some other default value + } + } + + public static Integer convertStringToIntUsingIntegerDecode(String input){ + try { + return Integer.decode(input); + } catch (Exception e) { + // log or handle the error + return null; // or Integer.MIN_VALUE, or some other default value + } + } + + public static Integer converStringToIntUsingOptional(String input){ + Optional parsedInt; + try { + parsedInt = Optional.of(Integer.parseInt(input)); + } catch (Exception e) { + // log or handle the error + parsedInt = Optional.empty(); + } + return parsedInt.orElse(null); + } + + public static int convertStringToIntUsingNumberUtils(String input){ + //returns Integer.MIN_VALUE as the default value if conversion fails + return NumberUtils.toInt(input, Integer.MIN_VALUE); + } +} diff --git a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java index 221900fb0e..2ad92adb2d 100644 --- a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java +++ b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java @@ -19,7 +19,6 @@ import static org.junit.Assert.assertEquals; public class DateToStringFormatterUnitTest { private static final String DATE_FORMAT = "MMM d, yyyy HH:mm a"; - private static final String EXPECTED_STRING_DATE = "Aug 1, 2018 12:00 PM"; private static Date date; @BeforeClass @@ -34,8 +33,8 @@ public class DateToStringFormatterUnitTest { public void whenDateConvertedUsingSimpleDateFormatToString_thenCorrect() { DateFormat formatter = new SimpleDateFormat(DATE_FORMAT); String formattedDate = formatter.format(date); - - assertEquals(EXPECTED_STRING_DATE, formattedDate); + String expectedDate = "Aug 1, 2018 12:00 pm"; + assertEquals(expectedDate, formattedDate); } @Test @@ -43,15 +42,15 @@ public class DateToStringFormatterUnitTest { String formattedDate = DateFormat .getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.US) .format(date); - - assertEquals(EXPECTED_STRING_DATE, formattedDate); + String expectedDate = "Aug 1, 2018, 12:00 PM"; + assertEquals(expectedDate, formattedDate); } @Test public void whenDateConvertedUsingFormatterToString_thenCorrect() { String formattedDate = String.format("%1$tb %1$te, %1$tY %1$tI:%1$tM %1$Tp", date); - - assertEquals(EXPECTED_STRING_DATE, formattedDate); + String expectedDate = "Aug 1, 2018 12:00 PM"; + assertEquals(expectedDate, formattedDate); } @Test @@ -62,7 +61,7 @@ public class DateToStringFormatterUnitTest { .atZone(ZoneId.of("CET")) .toLocalDateTime(); String formattedDate = ldt.format(fmt); - - assertEquals(EXPECTED_STRING_DATE, formattedDate); + String expectedDate = "Aug 1, 2018 12:00 pm"; + assertEquals(expectedDate, formattedDate); } } diff --git a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntEncapsulationUnitTest.java b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntEncapsulationUnitTest.java new file mode 100644 index 0000000000..46cbf61244 --- /dev/null +++ b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntEncapsulationUnitTest.java @@ -0,0 +1,67 @@ +package com.baeldung.stringtoint; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class StringToIntEncapsulationUnitTest { + + @Test + void whenConvertingIntToString_thenInvalidCasesReturnNull() { + List testData = Arrays.asList( + new TestData("", null), + new TestData(null, null), + new TestData("23,56", null), + new TestData("2147483648", null), + new TestData("-2147483649", null), + new TestData("hello", null) + ); + testData.forEach(data -> { + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingIntegerParseInt(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingIntegerValueOf(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.converStringToIntUsingOptional(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingIntegerDecode(data.input)); + }); + } + + @Test + void whenConvertingIntToString_thenValidCasesReturnUnboxedInt() { + List testData = Arrays.asList( + new TestData("23", 23), + new TestData("-23", -23) + ); + testData.forEach(data -> { + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingIntegerParseInt(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingIntegerValueOf(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.converStringToIntUsingOptional(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingNumberUtils(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingIntegerDecode(data.input)); + }); + } + + @Test + void whenConvertingStringToIntUsingNumberUtils_ThenInValidConversionReturnIntegerMin() { + List testData = Arrays.asList( + new TestData("", Integer.MIN_VALUE), + new TestData(null, Integer.MIN_VALUE), + new TestData("23,56", Integer.MIN_VALUE), + new TestData("2147483648", Integer.MIN_VALUE), + new TestData("-2147483649", Integer.MIN_VALUE), + new TestData("hello", Integer.MIN_VALUE) + ); + testData.forEach(data -> + Assertions.assertEquals(data.expectedOutput, StringToIntEncapsulation.convertStringToIntUsingNumberUtils(data.input))); + } + + + public static class TestData{ + String input; + Integer expectedOutput; + + TestData(String input, Integer expectedOutput){ + this.input = input; + this.expectedOutput = expectedOutput; + } + } +} \ No newline at end of file