diff --git a/README.md b/README.md index 90a5236..4e0302b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,73 @@ # 미션 - 자동차 경주 게임 +## 📋 기능 구현 목록 +- 사용자 입력 요구문 출력 +- 사용자 입력 + - 예외 처리 + - 플레이어 생성 + +- 경주 게임 실행 + - 무작위 수 생성 + - 4이상 인지 비교 + - 1초 간격두고 라운드 결과 출력 + +- 우승자 판별 + - 우승자 출력 + +## 🚬 클래스와 메서드? +- Application + +- Receiver + - receiveName + - receiveNumber + +- Printer + - printProgress + - printWinner + - printGeneralMessage + - printExceptionMessage + - printMessages + +- GamePlayer + - run + - judgeAndMove + - inputNames + - inputNumber + - makeCarList + - launchAllRound + +- Generator + - generateRandomNumber + +- Car + - getPosition + - getName + - moveForward + - isMaxNumber + - isOverMaxNumber + getProgressWithSymbol + +- Validate + - validateName(s) + - inputNothing(s) + - inputCommaInARow(s) + - inputCharactersOtherThanName(s) + - startWithComma(s) + - endWithComma(s) + - over5Characters(s) + - inputSameName(s)) + - validateNumber(s) + +- Winner + - makeWinnerToString + - checkWhoIsWinner + - initWinner + +- Message + - selectMessageFromGeneral + - selectMessageFromException + + ## 🚀 기능 요구사항 - 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. diff --git a/build.gradle b/build.gradle index a40e892..5730ddc 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { testCompile("org.assertj:assertj-core:3.14.0") - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' + testCompile('org.junit.jupiter:junit-jupiter:5.6.0') testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } diff --git a/src/main/java/Application.java b/src/main/java/Application.java new file mode 100644 index 0000000..cc58b44 --- /dev/null +++ b/src/main/java/Application.java @@ -0,0 +1,8 @@ +import domain.GamePlayer; + +public class Application { + public static void main(String[] args){ + GamePlayer gamePlayer = new GamePlayer(); + gamePlayer.run(); + } +} diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index e5b4a0a..eaae6b0 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -8,5 +8,32 @@ public Car(String name) { this.name = name; } - // 추가 기능 구현 + public int getPosition() { + return this.position; + } + + public String getName() { + return this.name; + } + + public void moveForward() { + this.position++; + } + + public boolean isMaxNumber(int maxNumber) { + return this.position == maxNumber; + } + + public boolean isOverMaxNumber(int maxNumber) { + return this.position > maxNumber; + } + + public String getProgressWithSymbol() { + String progress = ""; + for(int i = 0;i < this.position;i++) { + progress += "-"; + } + + return progress; + } } diff --git a/src/main/java/domain/GamePlayer.java b/src/main/java/domain/GamePlayer.java new file mode 100644 index 0000000..da7395c --- /dev/null +++ b/src/main/java/domain/GamePlayer.java @@ -0,0 +1,82 @@ +package domain; + +import io.Message; +import io.Printer; +import io.Receiver; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class GamePlayer { + private static final int WINNER_CONDITION = 4; + + private final Printer printer; + private final Receiver receiver; + private final Generator generator; + + public GamePlayer() { + this.printer = new Printer(); + this.receiver = new Receiver(); + this.generator = new Generator(); + } + + void moveAfterJudgement(Car car, int randomNumber) { + if (judgeToMove(randomNumber)) { + car.moveForward(); + } + } + + private boolean judgeToMove(int randomNumber) { + return randomNumber >= WINNER_CONDITION; + } + + List inputNames() { + String messageCode = Message.GeneralMessages.INPUT_NAMEOFCAR.getMessage(); + printer.printMessages(messageCode); + List names = new ArrayList<>(Arrays.asList(receiver.receiveName())); + + return makeCarList(names); + } + + int inputNumber() { + String messageCode = Message.GeneralMessages.INPUT_COUNT.getMessage(); + printer.printMessages(messageCode); + + return receiver.receiveNumber(); + } + + List makeCarList(List names) { + List cars = new ArrayList<>(); + + for (int i = 0; i < names.size(); i++) { + cars.add(new Car(names.get(i))); + } + + return cars; + } + + void launchAllRound(List cars, int countRound) { + String messageCode = Message.GeneralMessages.DEFAULT_SPACE.getMessage(); + + for (int i = 0; i < countRound; i++) { + for (Car car : cars) { + moveAfterJudgement(car, generator.generateRandomNumber()); + printer.printProgress(car.getName(), car.getProgressWithSymbol()); + } + printer.printMessages(messageCode); + } + } + + public void run() { + String messageCode = Message.GeneralMessages.OPERATION_RESULT.getMessage(); + List cars = inputNames(); + int countRound = inputNumber(); + + printer.printMessages(messageCode); + launchAllRound(cars, countRound); + + List winner = Winner.checkWhoIsWinner(cars); + printer.printWinner(Winner.makeWinnerToString(winner)); + } +} diff --git a/src/main/java/domain/Generator.java b/src/main/java/domain/Generator.java new file mode 100644 index 0000000..1b241b8 --- /dev/null +++ b/src/main/java/domain/Generator.java @@ -0,0 +1,8 @@ +package domain; + +public class Generator { + private final int MAX_LIMIT_NUMBER = 10; //default value + public int generateRandomNumber() { + return (int) ((Math.random() * 10000) % MAX_LIMIT_NUMBER); + } +} diff --git a/src/main/java/domain/Validator.java b/src/main/java/domain/Validator.java new file mode 100644 index 0000000..c6081cf --- /dev/null +++ b/src/main/java/domain/Validator.java @@ -0,0 +1,114 @@ +package domain; + +import io.Message; +import io.Printer; + +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +public class Validator { + private static final int MAX_NAME_SIZE = 5; + private static final String VALID_NUMBER = "^[0-9]+$"; + private static final String COMMA_IN_ROW = "^.*(,,).*+$"; + private static final String CHARACTER = "^[a-zA-Z,]+$"; + private static final Character COMMA = ','; + private static final String NOTHING = ""; + + private final Printer printer; + + public Validator() { + printer = new Printer(); + } + + public boolean validateName(String s) { + return inputNothing(s) + && inputCommaInARow(s) + && inputCharactersOtherThanName(s) + && startWithComma(s) + && endWithComma(s) + && overSizeCharacters(s) + && inputSameName(s); + } + + public boolean isValidNumber(String s) { + return s.matches(VALID_NUMBER); + } + + public boolean inputNothing(String s) { + String messageCode = Message.ExceptionMessages.INPUT_NOTHING.getMessage(); + + if (s.equals(NOTHING)) { + printer.printMessages(messageCode); + return false; + } + return true; + } + + public boolean inputCommaInARow(String s) { + String messageCode = Message.ExceptionMessages.INPUT_COMMA_IN_A_ROW.getMessage(); + + if (Pattern.matches(COMMA_IN_ROW, s)) { + printer.printMessages(messageCode); + return false; + } + return true; + } + + public boolean startWithComma(String s) { + String messageCode = Message.ExceptionMessages.START_WITH_COMMA.getMessage(); + + if (s.charAt(0) == COMMA) { + printer.printMessages(messageCode); + return false; + } + return true; + } + + public boolean endWithComma(String s) { + String messageCode = Message.ExceptionMessages.END_WITH_COMMA.getMessage(); + + if (s.charAt(s.length() - 1) == COMMA) { + printer.printMessages(messageCode); + return false; + } + return true; + } + + public boolean inputCharactersOtherThanName(String s) { + String messageCode = Message.ExceptionMessages.INPUT_CHARACTERS_OTHER_THAN_NAME.getMessage(); + + if (!Pattern.matches(CHARACTER, s)) { + printer.printMessages(messageCode); + return false; + } + return true; + } + + public boolean inputSameName(String s) { + String messageCode = Message.ExceptionMessages.INPUT_SAME_NAME.getMessage(); + List carNames = Arrays.asList(s.split(",")); + int sizeOfNameList = carNames.size(); + + for (int i = 0; i < sizeOfNameList; i++) { + if (carNames.subList(i + 1, sizeOfNameList).contains(carNames.get(i))) { + printer.printMessages(messageCode); + return false; + } + } + return true; + } + + public boolean overSizeCharacters(String s) { + String messageCode = Message.ExceptionMessages.OVER_SIZE_CHARACTERS.getMessage(); + String[] splitName = s.split(","); + + for (String i : splitName) + if (i.length() > MAX_NAME_SIZE) { + printer.printMessages(messageCode); + return false; + } + return true; + } + +} diff --git a/src/main/java/domain/Winner.java b/src/main/java/domain/Winner.java new file mode 100644 index 0000000..3ffb6b1 --- /dev/null +++ b/src/main/java/domain/Winner.java @@ -0,0 +1,42 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; + +public class Winner { + public static String makeWinnerToString(List cars) { + StringBuilder winner = new StringBuilder(cars.get(0).getName()); + + if (cars.size() > 1) { + for (int i = 1; i < cars.size(); i++) { + winner.append(", ").append(cars.get(i).getName()); + } + } + + return winner.toString(); + } + + public static List checkWhoIsWinner(List cars) { + List winner = new ArrayList<>(); + int maxNumber = 0; + + for (Car car : cars) { + if(car.isMaxNumber(maxNumber)){ + winner.add(car); + } + if (car.isOverMaxNumber(maxNumber)) { + maxNumber = initWinner(winner, car); + } + } + + return winner; + } + + private static int initWinner(List winner, Car car) { + int maxNumber = car.getPosition(); + winner.clear(); + winner.add(car); + + return maxNumber; + } +} diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/io/Message.java b/src/main/java/io/Message.java new file mode 100644 index 0000000..ffae1f9 --- /dev/null +++ b/src/main/java/io/Message.java @@ -0,0 +1,59 @@ +package io; + +import java.security.Key; +import java.util.HashMap; +import java.util.Map; + +public class Message { + public GeneralMessages generalMessages; + public ExceptionMessages exceptionMessages; + + public enum GeneralMessages { + INPUT_NAMEOFCAR("경주할 자동차 이름을 입력하세요. (이름은 쉼표(,) 기준으로 구분)"), + INPUT_COUNT("시도할 회수는 몇회인가요?"), + OPERATION_RESULT("실행 결과"), + FIANL_WINNER("가 최종 우승했습니다."), + DEFAULT_SPACE(""); + + private String message; + + GeneralMessages(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + } + + public enum ExceptionMessages { + INPUT_NOTHING("아무 문자도 입력되지 않았습니다."), + INPUT_COMMA_IN_A_ROW("쉼표(,)가 연속으로 입력되었습니다."), + INPUT_CHARACTERS_OTHER_THAN_NAME("영어와 쉼표(,) 이외의 다른 문자가 입력되었습니다."), + START_WITH_COMMA("쉼표(,)로 시작합니다."), + INPUT_SAME_NAME("쉼표(,)로 끝납니다."), + OVER_SIZE_CHARACTERS("같은 이름이 입력되었습니다."), + INPUT_CHARACTERS_OTHER_THAN_DIGIT("이름이 5자 이상입니다."), + END_WITH_COMMA("숫자 이외의 다른 문자가 입력되었습니다."); + + private String message; + + ExceptionMessages(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + } + + public String selectMessageFromGeneral(String Keyword) { + generalMessages = GeneralMessages.valueOf(Keyword); + return generalMessages.getMessage(); + } + + public String selectMessageFromException(String Keyword) { + exceptionMessages = ExceptionMessages.valueOf(Keyword); + return exceptionMessages.getMessage(); + } +} \ No newline at end of file diff --git a/src/main/java/io/Printer.java b/src/main/java/io/Printer.java new file mode 100644 index 0000000..72b083e --- /dev/null +++ b/src/main/java/io/Printer.java @@ -0,0 +1,31 @@ +package io; + +import domain.Car; + +import java.util.List; + +public class Printer { + Message message = new Message(); + + private static String DEFAULT_SYMBOL = "-"; + + public void printProgress(String name, String progress) { + System.out.printf("%5s : %s\n", name, progress); + } + + public void printWinner(String winner) { + System.out.println(winner + Message.GeneralMessages.FIANL_WINNER.getMessage()); + } + + public void printGeneralMessage(String s){ + System.out.println(message.selectMessageFromGeneral(s)); + } + + public void printExceptionMessage(String s){ + System.out.println(message.selectMessageFromException(s)); + } + + public void printMessages(String message) { + System.out.println(message); + } +} diff --git a/src/main/java/io/Receiver.java b/src/main/java/io/Receiver.java new file mode 100644 index 0000000..e45956f --- /dev/null +++ b/src/main/java/io/Receiver.java @@ -0,0 +1,28 @@ +package io; + +import domain.Validator; + +import java.util.Scanner; + +public class Receiver { + boolean reEnter = false; + private String inputLine = ""; + private Scanner scanner = new Scanner(System.in); + private Validator validator = new Validator(); + + public String[] receiveName() { + do{ + inputLine = scanner.nextLine(); + reEnter = validator.validateName(inputLine); + }while (!reEnter); + return inputLine.split(","); + } + + public int receiveNumber() { + do{ + inputLine = scanner.nextLine(); + reEnter = validator.isValidNumber(inputLine); + }while (!reEnter); + return Integer.parseInt(inputLine); + } +} diff --git a/src/test/java/domain/CarTest.java b/src/test/java/domain/CarTest.java new file mode 100644 index 0000000..8a12c7f --- /dev/null +++ b/src/test/java/domain/CarTest.java @@ -0,0 +1,32 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +class CarTest { + Car car; + private final String DEFAULT_NAME = "Kim"; + + @BeforeEach + void setUp() { + car = new Car(DEFAULT_NAME); + } + + @Test + void getPositionTest() { + assertThat(car.getPosition()).isEqualTo(0); + car.moveForward(); + assertThat(car.getPosition()).isEqualTo(1); + car.moveForward(); + assertThat(car.getPosition()).isEqualTo(2); + } + + @Test + void getName() { + assertThat(DEFAULT_NAME).isEqualTo(car.getName()); + } + +} \ No newline at end of file diff --git a/src/test/java/domain/GamePlayerTest.java b/src/test/java/domain/GamePlayerTest.java new file mode 100644 index 0000000..db6d462 --- /dev/null +++ b/src/test/java/domain/GamePlayerTest.java @@ -0,0 +1,76 @@ +package domain; + +import io.Printer; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class GamePlayerTest { + private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + GamePlayer gameplayer; + Printer printer; + + @BeforeEach + void setUp() { + System.setOut(new PrintStream(outputStreamCaptor)); + gameplayer = new GamePlayer(); + } + + @Test + void checkWhoIsWinnerTest() { + List cars = new ArrayList<>(); + Car car1 = new Car("kim"); + Car car2 = new Car("park"); + cars.add(car1); + cars.add(car2); + ArrayList carArray = new ArrayList<>(); + carArray.add(car1); + carArray.add(car2); + + assertThat(cars).isEqualTo(Winner.checkWhoIsWinner(carArray)); + } + + @Test + void makeArrayAfterGettingNameTest() { + String input = "kim,park,song"; + InputStream stdin = System.in; + + try { + System.setIn(new ByteArrayInputStream(input.getBytes())); + gameplayer = new GamePlayer(); + List cars = gameplayer.inputNames(); + assertThat("kim").isEqualTo(cars.get(0).getName()); + assertThat("park").isEqualTo(cars.get(1).getName()); + assertThat("song").isEqualTo(cars.get(2).getName()); + } finally { + System.setIn(stdin); + } + } + + + @Test + void makeCountAfterGettingNumberTest() { + String input = "5"; + InputStream stdin = System.in; + int result; + + try { + System.setIn(new ByteArrayInputStream(input.getBytes())); + gameplayer = new GamePlayer(); + result = gameplayer.inputNumber(); + } finally { + System.setIn(stdin); + } + + int expected = 5; + assertThat(expected).isEqualTo(result); + } +} \ No newline at end of file diff --git a/src/test/java/domain/GeneratorTest.java b/src/test/java/domain/GeneratorTest.java new file mode 100644 index 0000000..fcc70d2 --- /dev/null +++ b/src/test/java/domain/GeneratorTest.java @@ -0,0 +1,20 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class GeneratorTest { + Generator generator; + + @BeforeEach + void setUp() { + generator = new Generator(); + } + + @Test + void generateRandomNumberTest() { + assertThat(generator.generateRandomNumber()).isBetween(0, 9); + } +} \ No newline at end of file diff --git a/src/test/java/domain/ValidatorTest.java b/src/test/java/domain/ValidatorTest.java new file mode 100644 index 0000000..49bfbec --- /dev/null +++ b/src/test/java/domain/ValidatorTest.java @@ -0,0 +1,80 @@ +package domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.assertj.core.api.Assertions.assertThat; + +class ValidatorTest { + + private Validator vd; + + @BeforeEach + void setup() { + vd = new Validator(); + } + + @ParameterizedTest + @ValueSource(strings = {"123,!@a,BDs5", ",,asd,asd,"}) + //이름 유효성 체크 + void validateNameTest(String s) { + assertThat(vd.validateName(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {"it's not a number", "what else?"}) + //숫자 유효성 체크 + void validateNumberTest(String s) { + assertThat(vd.isValidNumber(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {""}) + //입력에 아무것도 없을 경우 + void inputNothingTest(String s) { + assertThat(vd.inputNothing(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {",,,,,,", "kim,song,,park"}) + //쉼표(,)가 연속으로 나올 경우 + void inputCommaInARowTest(String s) { + assertThat(vd.inputCommaInARow(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {",Kim,Park,Song", ",,Park,Song,Kim"}) + //쉼표(,)로 시작할 경우 + void startWithCommaTest(String s) { + assertThat(vd.startWithComma(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {"hobihobi,hoho,hoho,", "asdfgg,asdfghj,zxcvbn,,,"}) + //쉼표(,)로 끝날 경우 + void endWithCommaTest(String s) { + assertThat(vd.endWithComma(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {"hobㅁ,hoho,hoho", "asd5,asdfghj,zxcvbn"}) + //입력에 영문, 쉼표(,) 이외의 문자가 있을 경우 + void inputCharactersOtherThanNameTest(String s) { + assertThat(vd.inputCharactersOtherThanName(s)).isEqualTo(false); + } + + @ParameterizedTest + @ValueSource(strings = {"hobihobi,hoho,hoho", "asdfgg,asdfgg,zxcvbn"}) + //같은 이름이 있을 경우 + void inputSameNameTest(String s) { + assertThat(vd.inputSameName(s)).isEqualTo(false); + } + + @ParameterizedTest + //이름이 5글자 이상을 경우 + @ValueSource(strings = {"hobihobi,hoho,hoho", "asdfgg,asdfghj,zxcvbn"}) + void overSizeCharacterTest(String s) { + assertThat(vd.overSizeCharacters(s)).isEqualTo(false); + } +} \ No newline at end of file diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/io/MessageTest.java b/src/test/java/io/MessageTest.java new file mode 100644 index 0000000..93c99e3 --- /dev/null +++ b/src/test/java/io/MessageTest.java @@ -0,0 +1,28 @@ +package io; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class MessageTest { + + Message message; + + @BeforeEach + void setUp() { + message = new Message(); + } + + @Test + void selectMessageFromGeneral() { + String result = "경주할 자동차 이름을 입력하세요. (이름은 쉼표(,) 기준으로 구분)"; + assertThat(message.selectMessageFromGeneral("INPUT_NAMEOFCAR")).isEqualTo(result); + } + + @Test + void selectMessageFromException() { + String result = "아무 문자도 입력되지 않았습니다."; + assertThat(message.selectMessageFromException("INPUT_NOTHING")).isEqualTo(result); + } +} \ No newline at end of file diff --git a/src/test/java/io/PrinterTest.java b/src/test/java/io/PrinterTest.java new file mode 100644 index 0000000..770dd5f --- /dev/null +++ b/src/test/java/io/PrinterTest.java @@ -0,0 +1,66 @@ +package io; + +import domain.Car; +import domain.GamePlayer; +import domain.Winner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class PrinterTest { + private final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + Printer printer; + List cars = new ArrayList<>(); + GamePlayer gamePlayer; + + @BeforeEach + void setUp() { + System.setOut(new PrintStream(outputStreamCaptor)); + printer = new Printer(); + gamePlayer = new GamePlayer(); + } + + @Test + void printProgressWithSymbolTest() { + printer.printProgress("kim", "-----"); + assertEquals("kim : -----", outputStreamCaptor.toString().trim()); + } + + @Test + void makeWinnerToStringTest() { + Car car1 = new Car("kim"); + Car car2 = new Car("park"); + cars.add(car1); + cars.add(car2); + + String result = Winner.makeWinnerToString(cars); + assertThat(result).isEqualTo("kim, park"); + } + + @Test + void printWinnerTest() { + printer.printWinner("hobi, nonus"); + assertEquals("hobi, nonus가 최종 우승했습니다.", outputStreamCaptor.toString().trim()); + + } + + @Test + void printGeneralMessageTest() { + printer.printGeneralMessage("INPUT_COUNT"); + assertEquals("시도할 회수는 몇회인가요?", outputStreamCaptor.toString().trim()); + + } + + @Test + void printExceptionMessageTest() { + printer.printExceptionMessage("INPUT_NOTHING"); + assertEquals("아무 문자도 입력되지 않았습니다.", outputStreamCaptor.toString().trim()); + } +} \ No newline at end of file diff --git a/src/test/java/io/ReceiverTest.java b/src/test/java/io/ReceiverTest.java new file mode 100644 index 0000000..6919d06 --- /dev/null +++ b/src/test/java/io/ReceiverTest.java @@ -0,0 +1,46 @@ +package io; + +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ReceiverTest { + @Test + void receiveNameTest() { + String input = "kim,park,song"; + InputStream stdin = System.in; + String[] result; + + try { + System.setIn(new ByteArrayInputStream(input.getBytes())); + Receiver receiver = new Receiver(); + result = receiver.receiveName(); + } finally { + System.setIn(stdin); + } + + String[] expected = {"kim", "park", "song"}; + assertThat(expected).isEqualTo(result); + } + + @Test + void receiveNumberTest() { + String input = "5"; + InputStream stdin = System.in; + int result; + + try { + System.setIn(new ByteArrayInputStream(input.getBytes())); + Receiver receiver = new Receiver(); + result = receiver.receiveNumber(); + } finally { + System.setIn(stdin); + } + + int expected = 5; + assertThat(expected).isEqualTo(result); + } +} \ No newline at end of file