11package cointoss
22
33import (
4+ "errors"
45 "testing"
56)
67
8+ // Mock prompter for testing
9+ type mockPrompter struct {
10+ selectAnswer int
11+ selectError error
12+ }
13+
14+ func (m * mockPrompter ) Select (prompt string , defaultValue string , options []string ) (int , error ) {
15+ return m .selectAnswer , m .selectError
16+ }
17+
718func TestValidateGuess (t * testing.T ) {
819 validGuesses := []string {"heads" , "heads " , " HEADS" , "tails" , "TAILS" , " tails " }
920 invalidGuesses := []string {"" , "foo" , "123" , "heds" , "taol" }
@@ -29,3 +40,67 @@ func TestTossCoin(t *testing.T) {
2940 }
3041 }
3142}
43+
44+ func TestGetNextGuessWithPrompter (t * testing.T ) {
45+ tests := []struct {
46+ name string
47+ selectAnswer int
48+ selectError error
49+ expectedGuess string
50+ expectedCont bool
51+ }{
52+ {
53+ name : "select heads" ,
54+ selectAnswer : 0 ,
55+ selectError : nil ,
56+ expectedGuess : "heads" ,
57+ expectedCont : true ,
58+ },
59+ {
60+ name : "select tails" ,
61+ selectAnswer : 1 ,
62+ selectError : nil ,
63+ expectedGuess : "tails" ,
64+ expectedCont : true ,
65+ },
66+ {
67+ name : "select quit" ,
68+ selectAnswer : 2 ,
69+ selectError : nil ,
70+ expectedGuess : "" ,
71+ expectedCont : false ,
72+ },
73+ {
74+ name : "error during selection" ,
75+ selectAnswer : 0 ,
76+ selectError : errors .New ("mock error" ),
77+ expectedGuess : "" ,
78+ expectedCont : false ,
79+ },
80+ {
81+ name : "error during selection prints error message" ,
82+ selectAnswer : 0 ,
83+ selectError : errors .New ("test error" ),
84+ expectedGuess : "" ,
85+ expectedCont : false ,
86+ },
87+ }
88+
89+ for _ , tt := range tests {
90+ t .Run (tt .name , func (t * testing.T ) {
91+ mockP := & mockPrompter {
92+ selectAnswer : tt .selectAnswer ,
93+ selectError : tt .selectError ,
94+ }
95+
96+ guess , cont := GetNextGuessWithPrompter (mockP )
97+
98+ if guess != tt .expectedGuess {
99+ t .Errorf ("GetNextGuessWithPrompter() guess = %v, want %v" , guess , tt .expectedGuess )
100+ }
101+ if cont != tt .expectedCont {
102+ t .Errorf ("GetNextGuessWithPrompter() cont = %v, want %v" , cont , tt .expectedCont )
103+ }
104+ })
105+ }
106+ }
0 commit comments