diff --git a/core-java-modules/core-java-io-4/src/main/java/com/baeldung/userinput/UserInputHandler.java b/core-java-modules/core-java-io-4/src/main/java/com/baeldung/userinput/UserInputHandler.java new file mode 100644 index 0000000000..dfbb1fb03c --- /dev/null +++ b/core-java-modules/core-java-io-4/src/main/java/com/baeldung/userinput/UserInputHandler.java @@ -0,0 +1,27 @@ +package com.baeldung.userinput; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class UserInputHandler { + + public static List readUserInput() { + List userData = new ArrayList<>(); + System.out.println("Please enter your data below: (send 'bye' to exit) "); + Scanner input = new Scanner(System.in); + while (true) { + String line = input.nextLine(); + if ("bye".equalsIgnoreCase(line)) { + break; + } + userData.add(line); + } + return userData; + } + + public static void main(String[] args) { + List userData = readUserInput(); + System.out.printf("User Input Data:\n%s", String.join("\n", userData)); + } +} diff --git a/core-java-modules/core-java-io-4/src/test/java/com/baeldung/userinput/UserInputHandlerUnitTest.java b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/userinput/UserInputHandlerUnitTest.java new file mode 100644 index 0000000000..b4520ec100 --- /dev/null +++ b/core-java-modules/core-java-io-4/src/test/java/com/baeldung/userinput/UserInputHandlerUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.userinput; + + +import org.junit.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class UserInputHandlerUnitTest { + + @Test + public void givenDataInSystemIn_whenCallingReadUserInputMethod_thenHaveUserInputData() { + String[] inputLines = new String[]{ + "The first line.", + "The second line.", + "The last line.", + "bye", + "anything after 'bye' will be ignored" + }; + String[] expectedLines = Arrays.copyOf(inputLines, inputLines.length - 2); + List expected = Arrays.stream(expectedLines).collect(Collectors.toList()); + InputStream stdin = System.in; + try { + System.setIn(new ByteArrayInputStream(String.join("\n", inputLines).getBytes())); + List actual = UserInputHandler.readUserInput(); + assertThat(actual).isEqualTo(expected); + } finally { + System.setIn(stdin); + } + } +} \ No newline at end of file