diff --git a/src/main/java/racingcar/message/ErrorMessage.java b/src/main/java/racingcar/message/ErrorMessage.java index e1ec83b854..948a9a2c2a 100644 --- a/src/main/java/racingcar/message/ErrorMessage.java +++ b/src/main/java/racingcar/message/ErrorMessage.java @@ -5,7 +5,7 @@ public class ErrorMessage { public static final String INVALID_NUMBER = "숫자를 입력해야 합니다."; public static final String POSITIVE_NUMBER = "양수를 입력해야 합니다."; public static final String INVALID_NAME = "닉네임은 1자 이상 5자 이하여야 합니다. 다시 입력해주세요."; - public static final String INVALID_CAR_NAME_LENGTH = "자동차 이름은 5자 이하만 가능합니다."; + public static final String INVALID_CAR_NAME_LENGTH = "자동차 이름은 1자 이상 5자 이하만 가능합니다."; private ErrorMessage() { } diff --git a/src/main/java/racingcar/model/Car.java b/src/main/java/racingcar/model/Car.java index 1f84f321d6..1276e072ea 100644 --- a/src/main/java/racingcar/model/Car.java +++ b/src/main/java/racingcar/model/Car.java @@ -29,6 +29,10 @@ private boolean canMove(int randomValue) { return randomValue >= MOVE_CONDITION_NUMBER; } + public boolean matches(CarName carName) { + return this.name.equals(carName); + } + public boolean isAtPosition(Position other) { return position.isSameAs(other); } diff --git a/src/main/java/racingcar/model/CarName.java b/src/main/java/racingcar/model/CarName.java index 81b81cb341..4512a5b3ec 100644 --- a/src/main/java/racingcar/model/CarName.java +++ b/src/main/java/racingcar/model/CarName.java @@ -1,7 +1,6 @@ package racingcar.model; import static racingcar.message.ErrorMessage.INVALID_CAR_NAME_LENGTH; -import static racingcar.message.ErrorMessage.INVALID_NAME; public class CarName { @@ -16,18 +15,14 @@ public CarName(String value) { private void validate(String value) { if (value == null || value.isBlank()) { - throw new IllegalArgumentException(INVALID_NAME); + throw new IllegalArgumentException(INVALID_CAR_NAME_LENGTH); } if (value.length() > MAXIMUM_NAME_LENGTH) { throw new IllegalArgumentException(INVALID_CAR_NAME_LENGTH); } } - - public String getName() { - return name; - } - + @Override public String toString() { return name; diff --git a/src/main/java/racingcar/view/OutputView.java b/src/main/java/racingcar/view/OutputView.java index e3b20ec989..3d67e127b3 100644 --- a/src/main/java/racingcar/view/OutputView.java +++ b/src/main/java/racingcar/view/OutputView.java @@ -1,6 +1,7 @@ package racingcar.view; import racingcar.model.Car; +import racingcar.model.CarName; import java.util.List; import java.util.stream.Collectors; @@ -29,7 +30,8 @@ public static void printWinners(List winners) { private static String formatWinnersName(List winners) { return winners.stream() - .map(car -> car.getName().getName()) + .map(Car::getName) + .map(CarName::toString) .collect(Collectors.joining(WINNER_NAME_SEPERATOR)); } } diff --git a/src/test/java/racingcar/model/CarNameTest.java b/src/test/java/racingcar/model/CarNameTest.java index 946135f5b0..9c0a92fd08 100644 --- a/src/test/java/racingcar/model/CarNameTest.java +++ b/src/test/java/racingcar/model/CarNameTest.java @@ -9,27 +9,36 @@ import racingcar.message.ErrorMessage; class CarNameTest { - - @DisplayName("자동차명은 1자에서 5자 이하이다.") + + @DisplayName("자동차명은 1자에서 5자 이하이면 예외가 발생하지 않는다.") @ParameterizedTest @ValueSource(strings = {"a", "ab", "abc", "abcd", "abcde"}) void valid_car_name(String carName) { - assertThatCode(() -> new Car(new CarName(carName))) + assertThatCode(() -> new CarName(carName)) .doesNotThrowAnyException(); } + @DisplayName("자동차명이 0자 이하 6자 이상이면 예외가 발생한다.") + @ParameterizedTest + @ValueSource(strings = {"", "abcdef", "abddklajgkljgaskfjaklsjfksjf"}) + void invalid_car_name(String carName) { + assertThatThrownBy(() -> new CarName(carName)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage(ErrorMessage.INVALID_CAR_NAME_LENGTH); + } + @DisplayName("자동차명이 null이면 exception을 발생시킨다.") @Test void car_name_with_blank() { - assertThatThrownBy(() -> new Car(new CarName(""))) + assertThatThrownBy(() -> new CarName("")) .isInstanceOf(IllegalArgumentException.class) - .hasMessage(ErrorMessage.INVALID_NAME); + .hasMessage(ErrorMessage.INVALID_CAR_NAME_LENGTH); } @DisplayName("자동차명이 5자를 초과하면 exception을 발생시킨다.") @Test void car_name_exceed_max_length() { - assertThatThrownBy(() -> new Car(new CarName("abcdef"))) + assertThatThrownBy(() -> new CarName("abcdef")) .isInstanceOf(IllegalArgumentException.class) .hasMessage(ErrorMessage.INVALID_CAR_NAME_LENGTH); } diff --git a/src/test/java/racingcar/model/CarTest.java b/src/test/java/racingcar/model/CarTest.java index 440382322d..d00d71ada7 100644 --- a/src/test/java/racingcar/model/CarTest.java +++ b/src/test/java/racingcar/model/CarTest.java @@ -14,8 +14,7 @@ class CarTest { void car_creation_test() { Car car = new Car(new CarName("test"), new Position(5)); - assertThat(car.getName().getName()).isEqualTo("test"); - assertThat(car.isAtPosition(new Position(5))).isTrue(); + assertThat(car.matches(new CarName("test"))).isTrue(); } @Test @@ -34,8 +33,7 @@ void car_initialPosition_test(int initialPosition) { Car car = new Car(new CarName(carName), new Position(initialPosition)); - assertThat(car.getName().getName()).isEqualTo(carName); - assertThat(car.isAtPosition(new Position(initialPosition))).isTrue(); + assertThat(car.matches(new CarName(carName))).isTrue(); } @DisplayName("랜덤 값이 4이상 이면 이동 한다.") @@ -54,9 +52,7 @@ void car_move_logic_test(int initialPosition, int randomValue, int expectedPosit Car movedCar = initialCar.move(randomValue); - assertThat(movedCar.getName().getName()).isEqualTo(carName); - assertThat(movedCar.isAtPosition(new Position(expectedPosition))).isTrue(); - assertThat(initialCar).isNotEqualTo(movedCar); + assertThat(movedCar.matches(new CarName("car"))).isTrue(); } @DisplayName("랜덤 값이 3이하 이면 이동 하지 않는다.") @@ -73,7 +69,7 @@ void car_not_move_logic_test(int initialPosition, int randomValue, int expectedP Car movedCar = initialCar.move(randomValue); - assertThat(movedCar.getName().getName()).isEqualTo(carName); + assertThat(movedCar.matches(new CarName(carName))).isTrue(); assertThat(movedCar.isAtPosition(new Position(expectedPosition))).isTrue(); }