1
1
package blackjack.domain
2
2
3
+ import blackjack.domain.MatchResult.DRAW
4
+ import blackjack.domain.MatchResult.LOSS
5
+ import blackjack.domain.MatchResult.WIN
6
+ import blackjack.domain.Suit.CLUB
7
+ import blackjack.domain.Suit.DIAMOND
8
+ import blackjack.domain.Suit.HEART
9
+ import blackjack.domain.Suit.SPADE
3
10
import blackjack.fixtures.createCard
4
11
import io.kotest.core.spec.style.StringSpec
5
12
import io.kotest.data.forAll
6
13
import io.kotest.data.headers
7
14
import io.kotest.data.row
8
15
import io.kotest.data.table
16
+ import io.kotest.inspectors.forAll
9
17
import io.kotest.matchers.shouldBe
10
18
11
19
class PlayerTest : StringSpec ({
12
- " 유저는 카드목록의 점수합이 21점 미만일 경우 카드를 더 받을 수 있다" {
20
+ " 플레이어는 카드목록의 점수합이 21점 미만일 경우 카드를 더 받을 수 있다" {
13
21
table(
14
22
headers("ranks"),
15
23
row(listOf("2", "3", "4")),
@@ -23,7 +31,7 @@ class PlayerTest : StringSpec({
23
31
}
24
32
}
25
33
26
- " 유저는 카드목록의 점수합이 21점 이상할 경우 카드를 더 받을 수 없다" {
34
+ " 플레이어는 카드목록의 점수합이 21점 이상할 경우 카드를 더 받을 수 없다" {
27
35
table(
28
36
headers("ranks", "score"),
29
37
row(listOf("J ", "Q ", "K "), 30),
@@ -39,7 +47,7 @@ class PlayerTest : StringSpec({
39
47
}
40
48
}
41
49
42
- " 유저는 카드 2장을 받은 후 점수 합이 21점인 경우 카드를 더 받지 못한다" {
50
+ " 플레이어는 카드 2장을 받은 후 점수 합이 21점인 경우 카드를 더 받지 못한다" {
43
51
val cards = Cards (emptyList())
44
52
val player =
45
53
Player ("홍길동", cards)
@@ -49,7 +57,7 @@ class PlayerTest : StringSpec({
49
57
player.canHit() shouldBe false
50
58
}
51
59
52
- " 유저는 카드 2장을 받은 후 점수 합이 21점 미만인 경우 카드를 더 받을 수 있다" {
60
+ " 플레이어는 카드 2장을 받은 후 점수 합이 21점 미만인 경우 카드를 더 받을 수 있다" {
53
61
val cards = Cards (emptyList())
54
62
val player =
55
63
Player ("홍길동", cards)
@@ -58,4 +66,67 @@ class PlayerTest : StringSpec({
58
66
59
67
player.canHit() shouldBe true
60
68
}
69
+
70
+ " 플레이어가 딜러보다 점수가 높다면 승리한다" {
71
+ val cards = Cards (emptyList())
72
+ val player =
73
+ Player ("홍길동", cards)
74
+ .hit(createCard("10"))
75
+ .hit(createCard("5"))
76
+ val dealer = Dealer .create().hit(createCard("10"))
77
+
78
+ player.compareScore(dealer) shouldBe WIN
79
+ }
80
+
81
+ " 플레이어가 딜러보다 점수가 낮다면 패배한다" {
82
+ val cards = Cards (emptyList())
83
+ val player =
84
+ Player ("홍길동", cards)
85
+ .hit(createCard("5"))
86
+ val dealer =
87
+ Dealer .create()
88
+ .hit(createCard("10"))
89
+
90
+ player.compareScore(dealer) shouldBe LOSS
91
+ }
92
+
93
+ " 플레이어가 딜러보와 점수가 같다면 무승부다" {
94
+ val cards = Cards (emptyList())
95
+ val player =
96
+ Player ("홍길동", cards)
97
+ .hit(createCard("5"))
98
+ val dealer =
99
+ Dealer .create()
100
+ .hit(createCard("5"))
101
+
102
+ player.compareScore(dealer) shouldBe DRAW
103
+ }
104
+
105
+ " 플레이어의 패에 상관없이 딜러의 점수가 21점이 넘는다면 승리한다" {
106
+ val cards = Cards (emptyList())
107
+ val biggerScorePlayer =
108
+ Player ("김큰점수", cards)
109
+ .hit(createCard("K ", SPADE ))
110
+ .hit(createCard("Q ", SPADE ))
111
+ .hit(createCard("J ", SPADE ))
112
+ val smallerScorePlayer =
113
+ Player ("박작은점수", cards)
114
+ .hit(createCard("K ", HEART ))
115
+ .hit(createCard("Q ", HEART ))
116
+ .hit(createCard("J ", HEART ))
117
+ val sameScorePlayer =
118
+ Player ("최같은점수", cards)
119
+ .hit(createCard("10", CLUB ))
120
+ .hit(createCard("10", CLUB ))
121
+ .hit(createCard("3", CLUB ))
122
+ val dealer =
123
+ Dealer .create()
124
+ .hit(createCard("10", DIAMOND ))
125
+ .hit(createCard("10", DIAMOND ))
126
+ .hit(createCard("3", DIAMOND ))
127
+
128
+ listOf(biggerScorePlayer, smallerScorePlayer, sameScorePlayer).forAll { player ->
129
+ player.compareScore(dealer) shouldBe WIN
130
+ }
131
+ }
61
132
})
0 commit comments