diff options
Diffstat (limited to 'internal/game/roulette_test.go')
| -rw-r--r-- | internal/game/roulette_test.go | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/internal/game/roulette_test.go b/internal/game/roulette_test.go index 7a22d9b..333e6a9 100644 --- a/internal/game/roulette_test.go +++ b/internal/game/roulette_test.go @@ -95,6 +95,45 @@ func TestRouletteCombinationTargetParsing(t *testing.T) { } } +func TestRouletteRacetrackTargetParsing(t *testing.T) { + // A racetrack single-zero table accepts the call and neighbours syntaxes. + g := &Game{Casino: casino.NewManager(1)} + cfg := casino.TableConfig{ID: "roulette", Game: casino.GameRoulette, Roulette: casino.RouletteConfig{Racetrack: true}} + g.Casino.Join(1, cfg, "alice") + conn := &casinoTestConn{} + sess := &net.Session{Player: player.New("alice"), Conn: conn} + g.loggedInChars = map[string]*net.Session{"alice": sess} + valid := [][]string{ + {"10", "on", "voisins"}, + {"10", "on", "voisins", "du", "zero"}, + {"10", "on", "tiers"}, + {"10", "on", "orphelins"}, + {"10", "on", "zero", "spiel"}, + {"10", "on", "neighbors", "17"}, + {"10", "on", "neighbors", "of", "17"}, + } + for _, args := range valid { + conn.data = nil + g.executeBet(sess, args, "bet "+strings.Join(args, " ")) + if !strings.Contains(string(conn.data), "You don't have enough chips and credits") { + t.Fatalf("args=%v: expected wallet failure, got %q", args, conn.data) + } + } + // The same names are unknown on a single-zero table without the option. + plain := &Game{Casino: casino.NewManager(1)} + plain.Casino.Join(1, casino.TableConfig{ID: "roulette", Game: casino.GameRoulette}, "bob") + conn2 := &casinoTestConn{} + sess2 := &net.Session{Player: player.New("bob"), Conn: conn2} + plain.loggedInChars = map[string]*net.Session{"bob": sess2} + for _, args := range [][]string{{"10", "on", "voisins"}, {"10", "on", "neighbors", "17"}} { + conn2.data = nil + plain.executeBet(sess2, args, "bet "+strings.Join(args, " ")) + if !strings.Contains(string(conn2.data), "Unknown roulette target") { + t.Fatalf("non-racetrack args=%v: expected rejection, got %q", args, conn2.data) + } + } +} + func TestCasinoTestPortalAuthoredContract(t *testing.T) { g, rooms, _ := loadVesta(t) found := false @@ -118,7 +157,7 @@ func TestCasinoTestPortalAuthoredContract(t *testing.T) { if steps[1].Teleport != 6100 || rooms[6100] == nil { t.Fatal("wrong casino destination") } - for _, id := range []int{6182, 6183} { + for _, id := range []int{6182, 6183, 6184} { cfg := rooms[id].CasinoTables[0] if err := cfg.Validate(); err != nil { t.Fatal(err) @@ -126,5 +165,8 @@ func TestCasinoTestPortalAuthoredContract(t *testing.T) { if cfg.Game != casino.GameRoulette || cfg.Roulette.DoubleZero != (id == 6183) { t.Fatal("wrong roulette rules", id) } + if cfg.Roulette.Racetrack != (id == 6184) { + t.Fatal("wrong racetrack setting", id) + } } } |
