diff --git a/README.md b/README.md index 03ba7ed3..773c8bbd 100644 --- a/README.md +++ b/README.md @@ -1 +1,78 @@ -# java-blackjack \ No newline at end of file +# java-blackjack + +## 연료 주입 기능 목록 + +MotorVehicle (Interface) + +- 리터당 이동 거리를 반환 getDistancePerLiter +- 여행할 거리를 반환 getTripDistance +- 차종 이름을 반환 getName + +Car (abstract class) (implements MotorVehicle) + +- 거리에 따른 연료량을 계산 후 반환 getChargeQuantity +- 멤버변수 distance + +Sonata, Avante, K5 (extends Car) + +- 생성자로 distance 받기 +- private static final 로 연비를 가짐. (10km/리터, 15, 13) + +RentCompany + +- 차 List를 가짐. +- private 생성자 +- static create()을 통해 객체 생성 +- addCar(Car) 를 통해 차 List에 저장 +- generateReport 를 통해 report String 반환 + +## 블랙잭 + +[Card : Denomination, Shape] + +- [x] enum으로 1~10,J,Q,K를 구현한다. +- [x] enum으로 하트,스페이드,다이아몬드,클로버를 구현한다. +- [x] value와 shape를 합쳐 한 장의 카드를 생성한다. + +[Person] + +- [x] 모든 사람들은 카드 목록을 갖고 있다. +- [x] 카드 1장을 인자로 전달 받아 카드 목록에 추가한다. + +[Player extends Person] + +- [x] 플레이어는 추가적으로 이름을 갖고 있다. +- [x] 생성 시에 플레이어 이름만 인자로 전달 받아서 자기의 이름을 초기화한다. +- [x] 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) + +[Dealer extends Person] +딜러가 카드를 섞어서 뽑는 역할. CardDeck으로 분리. + +- [x] 생성 시에 CardDeck을 초기화한다. +- [x] 인자로 전달 받은 1장의 카드를 자신의 카드 목록에 추가한다. (Person 기능) +- [x] 전달 인자로 받은 장수만큼 카드를 반환한다. + +[CardDeck] + +- [x] 전체 카드를 만들어서 리스트로 반환한다. (static) +- [x] 인스턴스 생성 시, 만들어진 52장의 카드로 멤버변수를 초기화한다. +- [x] shuffle한 뒤 전달인자로 받은 수만큼 카드를 뽑아서 반환한다. (제거하면서 반환한다.) + +[GameApplication] + +- [x] GameSetup의 Dealer와 List를 입력받고, 생성된 setup 내용을 ResultView에게 넘긴다. + +- [ ] 카드의 합이 21 이하인지 카드를 추가로 뽑을 것인지 질문한다. +- [ ] 딜러에게 필요한 장수만큼 카드를 요구한다. +- [ ] 반환 받은 카드를 통해 딜러와 플레이어들을 초기화한다. + +[InputView] + +-[x] 플레이어 이름을 입력받아서 쉼표 기준으로 분리한 List을 반환한다. +-[x] 플레이어에게 카드를 추가로 받을 것인지 입력받는다. + +[ResultView] + +-[x] 딜러와 플레이어 List<>를 전달 받아 이름과 카드 목록을 출력한다. + -[x] 처음 시작 때 딜러는 1장의 카드만 출력한다. +-[ ] 딜러와 플레이어의 최종 승패를 출력한다. diff --git a/src/main/java/blackjack/BlackjackApplication.java b/src/main/java/blackjack/BlackjackApplication.java new file mode 100644 index 00000000..8c1936cd --- /dev/null +++ b/src/main/java/blackjack/BlackjackApplication.java @@ -0,0 +1,11 @@ +package blackjack; + +import blackjack.controller.BlackJackGame; + +public class BlackjackApplication { + + public static void main(String[] args) { + BlackJackGame blackJackGame = new BlackJackGame(); + blackJackGame.play(); + } +} diff --git a/src/main/java/blackjack/controller/BlackJackGame.java b/src/main/java/blackjack/controller/BlackJackGame.java new file mode 100644 index 00000000..d038656c --- /dev/null +++ b/src/main/java/blackjack/controller/BlackJackGame.java @@ -0,0 +1,69 @@ +package blackjack.controller; + +import blackjack.domain.game.GameResult; +import blackjack.domain.person.Dealer; +import blackjack.domain.person.Player; +import blackjack.view.InputView; +import blackjack.view.ResultView; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class BlackJackGame { + + private final Dealer dealer; + private final List players; + + public BlackJackGame() { + dealer = new Dealer(); + players = Player.createPlayers(InputView.getPlayerNames(), dealer); + ResultView.printSetUpResult(dealer.getOpenedCard(), players); + } + + public void play() { + askPlayers(); + giveDealerCard(); + printGameResult(); + } + + private void giveDealerCard() { + if (dealer.canGetCard()) { + dealer.addCard(dealer.getPickedCard()); + ResultView.printDealerReceiveCard(); + } + } + + private void askPlayers() { + for (Player player : players) { + askPlayer(player); + } + } + + private void askPlayer(Player player) { + while (player.canHit() && InputView.isHit(player)) { + player.addCard(dealer.getPickedCard()); + } + } + + private void printGameResult() { + ResultView.printDealerAndPlayerCardResult(dealer, players); + ResultView.printGameResult(getGameResult()); + } + + private GameResult getGameResult() { + Map playerResult = new HashMap<>(); + int dealerWin = 0; + int dealerSum = dealer.getSumOfCards(); + + for (Player player : players) { + if (player.getSumOfCards() < dealerSum) { + dealerWin++; + playerResult.put(player.getName(), "패"); + continue; + } + playerResult.put(player.getName(), "승"); + } + + return new GameResult(playerResult, dealerWin, players.size() - dealerWin); + } +} diff --git a/src/main/java/blackjack/domain/card/Card.java b/src/main/java/blackjack/domain/card/Card.java new file mode 100644 index 00000000..1fc18c00 --- /dev/null +++ b/src/main/java/blackjack/domain/card/Card.java @@ -0,0 +1,20 @@ +package blackjack.domain.card; + +public class Card { + + private final Shape shape; + private final Denomination denomination; + + public Card(Shape shape, Denomination denomination) { + this.shape = shape; + this.denomination = denomination; + } + + public Shape getShape() { + return shape; + } + + public Denomination getDenomination() { + return denomination; + } +} diff --git a/src/main/java/blackjack/domain/card/CardDeck.java b/src/main/java/blackjack/domain/card/CardDeck.java new file mode 100644 index 00000000..c0fe80f0 --- /dev/null +++ b/src/main/java/blackjack/domain/card/CardDeck.java @@ -0,0 +1,39 @@ +package blackjack.domain.card; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public class CardDeck { + + public static final int FIRST_INDEX = 0; + + private List cards; + + public CardDeck() { + cards = createCardDeck(); + } + + private List createCardDeck() { + List cards = new ArrayList<>(); + + for (Shape shape : Shape.values()) { + Arrays.stream(Denomination.values()) + .map(denomination -> new Card(shape, denomination)) + .forEach(cards::add); + } + return cards; + } + + public Card pickOneCard() { + Collections.shuffle(cards); + Card pickedCard = cards.get(FIRST_INDEX); + cards.remove(FIRST_INDEX); + return pickedCard; + } + + public List getCards() { + return new ArrayList<>(cards); + } +} diff --git a/src/main/java/blackjack/domain/card/CardsUtils.java b/src/main/java/blackjack/domain/card/CardsUtils.java new file mode 100644 index 00000000..391b76f0 --- /dev/null +++ b/src/main/java/blackjack/domain/card/CardsUtils.java @@ -0,0 +1,21 @@ +package blackjack.domain.card; + +import java.util.List; + +public class CardsUtils { + + public static boolean isSumOfCardValueSmallerThanOrEquals(List cards, Integer target) { + Integer sumOfValue = getSumOfValue(cards); + return isSmallerThanOrEquals(sumOfValue, target); + } + + private static Integer getSumOfValue(List cards) { + return cards.stream() + .mapToInt(card -> card.getDenomination().getValue()) + .sum(); + } + + private static boolean isSmallerThanOrEquals(Integer number, Integer target) { + return number <= target; + } +} diff --git a/src/main/java/blackjack/domain/card/Denomination.java b/src/main/java/blackjack/domain/card/Denomination.java new file mode 100644 index 00000000..8a8d7ed8 --- /dev/null +++ b/src/main/java/blackjack/domain/card/Denomination.java @@ -0,0 +1,34 @@ +package blackjack.domain.card; + +public enum Denomination { + + ACE("A", 1), + TWO("2", 2), + THREE("3", 3), + FOUR("4", 4), + FIVE("5", 5), + SIX("6", 6), + SEVEN("7", 7), + EIGHT("8", 8), + NINE("9", 9), + TEN("10", 10), + JACK("J", 10), + QUEEN("Q", 10), + KING("K", 10); + + private final String sign; + private final int value; + + Denomination(String sign, int value) { + this.sign = sign; + this.value = value; + } + + public String getSign() { + return sign; + } + + public int getValue() { + return value; + } +} diff --git a/src/main/java/blackjack/domain/card/Shape.java b/src/main/java/blackjack/domain/card/Shape.java new file mode 100644 index 00000000..fab3c9da --- /dev/null +++ b/src/main/java/blackjack/domain/card/Shape.java @@ -0,0 +1,19 @@ +package blackjack.domain.card; + +public enum Shape { + + HEART("하트"), + DIAMOND("다이아몬드"), + SPADE("스페이드"), + CLUB("클로버"); + + private final String name; + + Shape(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/blackjack/domain/game/GameResult.java b/src/main/java/blackjack/domain/game/GameResult.java new file mode 100644 index 00000000..0826db64 --- /dev/null +++ b/src/main/java/blackjack/domain/game/GameResult.java @@ -0,0 +1,28 @@ +package blackjack.domain.game; + +import java.util.Map; + +public class GameResult { + + private final Map playerResult; + private final int dealerWin; + private final int dealerLose; + + public GameResult(Map playerResult, int dealerWin, int dealerLose) { + this.playerResult = playerResult; + this.dealerWin = dealerWin; + this.dealerLose = dealerLose; + } + + public Map getPlayerResult() { + return playerResult; + } + + public int getDealerWin() { + return dealerWin; + } + + public int getDealerLose() { + return dealerLose; + } +} diff --git a/src/main/java/blackjack/domain/person/Dealer.java b/src/main/java/blackjack/domain/person/Dealer.java new file mode 100644 index 00000000..e986aca0 --- /dev/null +++ b/src/main/java/blackjack/domain/person/Dealer.java @@ -0,0 +1,56 @@ +package blackjack.domain.person; + +import blackjack.domain.card.Card; +import blackjack.domain.card.CardDeck; +import blackjack.domain.card.Denomination; +import java.util.ArrayList; +import java.util.List; + +public class Dealer extends Person { + + private static final int FIRST_INDEX = 0; + private static final int INITIAL_PICK_NUMBER = 2; + private static final int DEALER_MAXIMUM_SUM = 16; + + private final CardDeck cardDeck = new CardDeck(); + + public Dealer() { + this.cards.addAll(getInitialPickedCards()); + } + + public List getInitialPickedCards() { + List cards = new ArrayList<>(); + for (int i = 0; i < INITIAL_PICK_NUMBER; i++) { + cards.add(cardDeck.pickOneCard()); + } + return cards; + } + + public Card getPickedCard() { + return cardDeck.pickOneCard(); + } + + public Card getOpenedCard() { + return cards.get(FIRST_INDEX); + } + + public int getSumOfCards() { + return cards.stream() + .mapToInt(card -> card.getDenomination().getValue()) + .sum(); + } + + @Override + public void addCard(Card card) { + cards.add(card); + if (card.getDenomination().equals(Denomination.ACE) && sum < 10) { + sum += 11; + return; + } + sum += card.getDenomination().getValue(); + } + + public boolean canGetCard() { + return sum <= DEALER_MAXIMUM_SUM; + } +} diff --git a/src/main/java/blackjack/domain/person/Person.java b/src/main/java/blackjack/domain/person/Person.java new file mode 100644 index 00000000..261bf64a --- /dev/null +++ b/src/main/java/blackjack/domain/person/Person.java @@ -0,0 +1,17 @@ +package blackjack.domain.person; + +import blackjack.domain.card.Card; +import java.util.ArrayList; +import java.util.List; + +public abstract class Person { + + protected List cards = new ArrayList<>(); + protected int sum; + + public abstract void addCard(Card card); + + public List getCards() { + return new ArrayList<>(cards); + } +} diff --git a/src/main/java/blackjack/domain/person/Player.java b/src/main/java/blackjack/domain/person/Player.java new file mode 100644 index 00000000..1b2f603b --- /dev/null +++ b/src/main/java/blackjack/domain/person/Player.java @@ -0,0 +1,46 @@ +package blackjack.domain.person; + +import blackjack.domain.card.Card; +import blackjack.domain.card.Denomination; +import java.util.List; +import java.util.stream.Collectors; + +public class Player extends Person { + + private static final int PLAYER_MAXIMUM_SUM = 21; + private final String name; + + public Player(String name, List cards) { + this.name = name; + this.cards.addAll(cards); + this.sum = getSumOfCards(); //TODO + } + + public static List createPlayers(List playerNames, Dealer dealer) { + return playerNames.stream() + .map(name -> new Player(name, dealer.getInitialPickedCards())) + .collect(Collectors.toList()); + } + + public String getName() { + return name; + } + + public boolean canHit() { + return sum <= PLAYER_MAXIMUM_SUM; + } + + public int getSumOfCards() { + return cards.stream().mapToInt(card -> card.getDenomination().getValue()).sum(); + } + + @Override + public void addCard(Card card) { + cards.add(card); + if (card.getDenomination().equals(Denomination.ACE) && sum < 10) { + sum += 11; + return; + } + sum += card.getDenomination().getValue(); + } +} diff --git a/src/main/java/blackjack/view/InputView.java b/src/main/java/blackjack/view/InputView.java new file mode 100644 index 00000000..6ff82ebf --- /dev/null +++ b/src/main/java/blackjack/view/InputView.java @@ -0,0 +1,23 @@ +package blackjack.view; + +import blackjack.domain.person.Player; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Collectors; + +public class InputView { + + private static final Scanner sc = new Scanner(System.in); + + public static List getPlayerNames() { + System.out.println("게임에 참여할 사람의 이름을 입력하세요. (쉼표 기준으로 분리)"); + String[] playerNames = sc.nextLine().split(","); + return Arrays.stream(playerNames).collect(Collectors.toList()); + } + + public static boolean isHit(Player player) { + System.out.println(player.getName() + "는 한 장의 카드를 더 받겠습니까? (예는 y, 아니오는 n)"); + return sc.nextLine().equals("y"); + } +} diff --git a/src/main/java/blackjack/view/ResultView.java b/src/main/java/blackjack/view/ResultView.java new file mode 100644 index 00000000..e2d665fd --- /dev/null +++ b/src/main/java/blackjack/view/ResultView.java @@ -0,0 +1,64 @@ +package blackjack.view; + +import blackjack.domain.card.Card; +import blackjack.domain.game.GameResult; +import blackjack.domain.person.Dealer; +import blackjack.domain.person.Player; +import java.util.List; +import java.util.stream.Collectors; + +public class ResultView { + + public static void printSetUpResult(Card openedCard, List players) { + List playerNames = players.stream().map(Player::getName).collect(Collectors.toList()); + System.out.println("딜러와 " + String.join(", ", playerNames) + "에게 2장씩 나눠줬습니다."); + System.out.println("딜러: " + openedCard.getDenomination().getValue() + openedCard.getShape().getName()); + players.forEach(ResultView::printCardsOf); + } + + public static void printCardsOf(Player player) { + System.out.print(player.getName() + "카드: "); + List cardNames = player.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", cardNames)); + } + + public static void printDealerCardsOf(Dealer dealer) { + System.out.print("딜러 카드: "); + List cardNames = dealer.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", cardNames)); + } + + public static void printDealerReceiveCard() { + System.out.println("딜러는 16 이하라 한 장의 카드를 더 받았습니다."); + } + + + public static void printDealerAndPlayerCardResult(Dealer dealer, List players) { + System.out.print("딜러 카드: "); + List dealerCardNames = dealer.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", dealerCardNames) + " - 결과 : " + dealer.getSumOfCards()); + + for (Player player : players) { + System.out.print(player.getName() + "카드: "); + List playerCardNames = player.getCards().stream() + .map(card -> card.getDenomination().getValue() + card.getShape().getName()) + .collect(Collectors.toList()); + System.out.println(String.join(", ", playerCardNames) + "- 결과 : " + player.getSumOfCards()); + } + } + + public static void printGameResult(GameResult gameResult) { + System.out.println("## 최종승패"); + System.out.println("딜러: " + gameResult.getDealerWin() + "승 " + gameResult.getDealerLose() + "패"); + gameResult.getPlayerResult().keySet() + .forEach(playerName -> { + System.out.println(playerName + ": " + gameResult.getPlayerResult().get(playerName)); + }); + } +} diff --git a/src/main/java/empty.txt b/src/main/java/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/rentcar/Avante.java b/src/main/java/rentcar/Avante.java new file mode 100644 index 00000000..69302c6a --- /dev/null +++ b/src/main/java/rentcar/Avante.java @@ -0,0 +1,15 @@ +package rentcar; + +public class Avante extends Car { + + private static final int DISTANCE_PER_LITER = 15; + + public Avante(double distance) { + super(distance, "Avante"); + } + + @Override + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } +} diff --git a/src/main/java/rentcar/Car.java b/src/main/java/rentcar/Car.java new file mode 100644 index 00000000..ba2e93ce --- /dev/null +++ b/src/main/java/rentcar/Car.java @@ -0,0 +1,25 @@ +package rentcar; + +public abstract class Car implements MotorVehicle { + + protected final double distance; + protected final String name; + + public Car(double distance, String name) { + this.distance = distance; + this.name = name; + } + + @Override + public double getChargeQuantity() { + return getTripDistance() / getDistancePerLiter(); + } + + public double getTripDistance() { + return distance; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/rentcar/K5.java b/src/main/java/rentcar/K5.java new file mode 100644 index 00000000..5581ad20 --- /dev/null +++ b/src/main/java/rentcar/K5.java @@ -0,0 +1,15 @@ +package rentcar; + +public class K5 extends Car { + + private static final int DISTANCE_PER_LITER = 13; + + public K5(double distance) { + super(distance, "K5"); + } + + @Override + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } +} diff --git a/src/main/java/rentcar/MotorVehicle.java b/src/main/java/rentcar/MotorVehicle.java new file mode 100644 index 00000000..6936b83d --- /dev/null +++ b/src/main/java/rentcar/MotorVehicle.java @@ -0,0 +1,18 @@ +package rentcar; + +public interface MotorVehicle { + + /** + * 리터당 이동 거리 반환 + * + * @return double + */ + double getDistancePerLiter(); + + /** + * 주입해야 할 연료량 반환 + * + * @return double + */ + double getChargeQuantity(); +} diff --git a/src/main/java/rentcar/RentCompany.java b/src/main/java/rentcar/RentCompany.java new file mode 100644 index 00000000..f3a65ddb --- /dev/null +++ b/src/main/java/rentcar/RentCompany.java @@ -0,0 +1,30 @@ +package rentcar; + +import java.util.ArrayList; +import java.util.List; + +public class RentCompany { + + private static final List cars = new ArrayList<>(); + private static final String NEWLINE = System.getProperty("line.separator"); + private static final String COLON = " : "; + + private RentCompany() { + } + + public static RentCompany create() { + return new RentCompany(); + } + + public void addCar(Car car) { + cars.add(car); + } + + public String generateReport() { + final StringBuilder builder = new StringBuilder(); + cars.forEach( + car -> builder.append(car.getName()).append(COLON).append((int) car.getChargeQuantity()) + .append("리터").append(NEWLINE)); + return builder.toString(); + } +} diff --git a/src/main/java/rentcar/Sonata.java b/src/main/java/rentcar/Sonata.java new file mode 100644 index 00000000..e9f6f0c6 --- /dev/null +++ b/src/main/java/rentcar/Sonata.java @@ -0,0 +1,15 @@ +package rentcar; + +public class Sonata extends Car { + + private static final int DISTANCE_PER_LITER = 10; + + public Sonata(double distance) { + super(distance, "Sonata"); + } + + @Override + public double getDistancePerLiter() { + return DISTANCE_PER_LITER; + } +} diff --git a/src/test/java/blackjack/domain/card/CardDeckTest.java b/src/test/java/blackjack/domain/card/CardDeckTest.java new file mode 100644 index 00000000..7bfb9df4 --- /dev/null +++ b/src/test/java/blackjack/domain/card/CardDeckTest.java @@ -0,0 +1,25 @@ +package blackjack.domain.card; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class CardDeckTest { + + @Test + void 인스턴스를_생성하면_52가지_카드를_가진다() { + CardDeck cardDeck = new CardDeck(); + assertThat(cardDeck.getCards()).hasSize(52); + } + + @Test + void 카드를_뽑으면_카드_목록에서_제거된다() { + //given + CardDeck cardDeck = new CardDeck(); + //when + Card pickedCard = cardDeck.pickOneCard(); + //then + assertThat(cardDeck.getCards().contains(pickedCard)).isFalse(); + } + +} diff --git a/src/test/java/blackjack/domain/card/CardsUtilsTest.java b/src/test/java/blackjack/domain/card/CardsUtilsTest.java new file mode 100644 index 00000000..b7a48bbb --- /dev/null +++ b/src/test/java/blackjack/domain/card/CardsUtilsTest.java @@ -0,0 +1,46 @@ +package blackjack.domain.card; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; + +class CardsUtilsTest { + + @ParameterizedTest + @EnumSource(value = Denomination.class, names = {"THREE", "SIX"}) + void 카드들의_숫자합을_구한_것이_특정값보다_작거나_같으면_참이_나와야_한다(Denomination value) { + + //given + List cards = new ArrayList<>(); + cards.add(new Card(Shape.HEART, Denomination.KING)); + cards.add(new Card(Shape.HEART, Denomination.FIVE)); + cards.add(new Card(Shape.HEART, value)); + + //when + boolean result = CardsUtils.isSumOfCardValueSmallerThanOrEquals(cards, 21); + + //then + assertTrue(result); + } + + @ParameterizedTest + @EnumSource(value = Denomination.class, names = {"EIGHT", "NINE"}) + void 카드들의_숫자합을_구한_것이_특정값보다_크면_짓짓이_나와야_한다(Denomination value) { + + //given + List cards = new ArrayList<>(); + cards.add(new Card(Shape.HEART, Denomination.KING)); + cards.add(new Card(Shape.HEART, Denomination.FIVE)); + cards.add(new Card(Shape.HEART, value)); + + //when + boolean result = CardsUtils.isSumOfCardValueSmallerThanOrEquals(cards, 21); + + //then + assertFalse(result); + } +} diff --git a/src/test/java/blackjack/domain/person/DealerTest.java b/src/test/java/blackjack/domain/person/DealerTest.java new file mode 100644 index 00000000..e66a2384 --- /dev/null +++ b/src/test/java/blackjack/domain/person/DealerTest.java @@ -0,0 +1,34 @@ +package blackjack.domain.person; + +import static org.assertj.core.api.Assertions.assertThat; + +import blackjack.domain.card.Card; +import blackjack.domain.card.Denomination; +import blackjack.domain.card.Shape; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class DealerTest { + + private Dealer dealer; + + @BeforeEach + void setUp() { + dealer = new Dealer(); + } + + @Test + void 딜러가_생성되면_카드를_두장_가지고_있어야_한다() { + //when then + assertThat(dealer.getCards()).hasSize(2); + } + + @Test + void 딜러는_받은_카드_1장을_목록에_추가해야_한다() { + //given + dealer.addCard(new Card(Shape.HEART, Denomination.NINE)); + + //when then + assertThat(dealer.getCards()).hasSize(3); + } +} diff --git a/src/test/java/blackjack/domain/person/PlayerTest.java b/src/test/java/blackjack/domain/person/PlayerTest.java new file mode 100644 index 00000000..acd60c89 --- /dev/null +++ b/src/test/java/blackjack/domain/person/PlayerTest.java @@ -0,0 +1,38 @@ +package blackjack.domain.person; + +import static org.assertj.core.api.Assertions.assertThat; + +import blackjack.domain.card.Card; +import blackjack.domain.card.Denomination; +import blackjack.domain.card.Shape; +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +class PlayerTest { + + @Test + void 플레이어를_생성하면_카드를_두장_가져야_한다() { + //given, when + Player player = new Player("kim", Arrays.asList( + new Card(Shape.SPADE, Denomination.KING), + new Card(Shape.SPADE, Denomination.KING) + )); + + //then + assertThat(player.getCards()).hasSize(2); + } + + @Test + void 플레이어는_받은_카드_1장을_목록에_추가해야_한다() { + //given + Player player = new Player("kim", Arrays.asList( + new Card(Shape.SPADE, Denomination.KING), + new Card(Shape.SPADE, Denomination.KING) + )); + player.addCard(new Card(Shape.HEART, Denomination.KING)); + + //when then + assertThat(player.getCards()).hasSize(3); + } + +} diff --git a/src/test/java/empty.txt b/src/test/java/empty.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/rentcar/RentCompanyTest.java b/src/test/java/rentcar/RentCompanyTest.java new file mode 100644 index 00000000..2e3845c3 --- /dev/null +++ b/src/test/java/rentcar/RentCompanyTest.java @@ -0,0 +1,30 @@ +package rentcar; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class RentCompanyTest { + private static final String NEWLINE = System.getProperty("line.separator"); + + @Test + public void report() { + + RentCompany company = RentCompany.create(); // factory method를 사용해 생성 + company.addCar(new Sonata(150)); + company.addCar(new K5(260)); + company.addCar(new Sonata(120)); + company.addCar(new Avante(300)); + company.addCar(new K5(390)); + + String report = company.generateReport(); + assertThat(report).isEqualTo( + "Sonata : 15리터" + NEWLINE + + "K5 : 20리터" + NEWLINE + + "Sonata : 12리터" + NEWLINE + + "Avante : 20리터" + NEWLINE + + "K5 : 30리터" + NEWLINE + ); + } +}