v0.14.0 web replay UI, My games, CLI replay
This commit is contained in:
1 parent
87dcb3e550
commit
dbe7283ca2
37 files changed
+4058
-1809
No files matched your search
@@ -0,0 +1,64 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/lixenwraith/chess/internal/client/api"
|
||||
"github.com/lixenwraith/chess/internal/client/replay"
|
||||
"github.com/lixenwraith/chess/internal/client/session"
|
||||
)
|
||||
|
||||
func TestPGNSaveArgs(t *testing.T) {
|
||||
for name, tc := range map[string]struct {
|
||||
args []string
|
||||
path string
|
||||
rest []string
|
||||
err bool
|
||||
}{
|
||||
"none": {[]string{"abc", "3"}, "", []string{"abc", "3"}, false},
|
||||
"save last": {[]string{"abc", "save", "out.pgn"}, "out.pgn", []string{"abc"}, false},
|
||||
"save first": {[]string{"save", "out.pgn", "abc", "3"}, "out.pgn", []string{"abc", "3"}, false},
|
||||
"missing path": {[]string{"save"}, "", nil, true},
|
||||
} {
|
||||
path, rest, err := pgnSaveArgs(tc.args)
|
||||
if (err != nil) != tc.err || path != tc.path || len(rest) != len(tc.rest) {
|
||||
t.Errorf("%s: path %q rest %v err %v", name, path, rest, err)
|
||||
continue
|
||||
}
|
||||
for i := range rest {
|
||||
if rest[i] != tc.rest[i] {
|
||||
t.Errorf("%s: rest = %v, want %v", name, rest, tc.rest)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReplayRefusesLiveCommandsAndPrompt(t *testing.T) {
|
||||
s := &session.Session{APIBaseURL: "http://127.0.0.1:1", Client: api.New("http://127.0.0.1:1")}
|
||||
r := NewRegistry(s)
|
||||
if ReplayPrompt(s) != "" {
|
||||
t.Error("prompt segment while live")
|
||||
}
|
||||
s.Replay = replay.New(&api.GameHistoryResponse{
|
||||
GameID: "g", InitialFEN: "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
|
||||
Moves: []api.HistoryMove{{MoveNumber: 1, MoveUCI: "e2e4", SAN: "e4", FENAfterMove: "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1", PlayerColor: "w"}},
|
||||
})
|
||||
if got := ReplayPrompt(s); got != " replay 0/1" {
|
||||
t.Errorf("prompt segment = %q", got)
|
||||
}
|
||||
// A live command is refused without touching the client (no server).
|
||||
r.Execute("move e2e4")
|
||||
r.Execute("next")
|
||||
if s.Replay.Ply != 1 || ReplayPrompt(s) != " replay 1/1" {
|
||||
t.Errorf("after next: ply %d", s.Replay.Ply)
|
||||
}
|
||||
r.Execute("live")
|
||||
if s.Replay != nil {
|
||||
t.Error("live did not end the replay")
|
||||
}
|
||||
for _, name := range []string{"new", "join", "move", "computer", "undo", "delete", "poll", "resign", "draw"} {
|
||||
if !liveOnly[name] {
|
||||
t.Errorf("%s is not refused while replaying", name)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user