1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package game
import (
"strings"
"testing"
"thehouseoficarus/internal/color"
"thehouseoficarus/internal/net"
"thehouseoficarus/internal/player"
)
func TestLookMiniMapAlignment(t *testing.T) {
for _, side := range []string{"right", "left"} {
for _, colored := range []bool{false, true} {
t.Run(side+map[bool]string{false: "/plain", true: "/colored"}[colored], func(t *testing.T) {
p := player.New("alice")
p.Options = map[string]any{"tiny_map": side, "wrap_width": 80}
conn := &casinoTestConn{}
sess := &net.Session{Player: p, Conn: conn}
content := wrapText("A ceiling of tiny brass suns hangs over polished stone. Icarus Leisure’s emblem repeats on every column. Stairs and galleries are open to all visitors.", 71)
if colored {
for i := range content {
content[i] = color.Render("xterm256", color.ColorSpec{Fg: 42, Bg: -1}, content[i])
}
}
mapLines := []string{"╔═════╗", "║□-□-□║", "║ ↑ ║", "║ @ ║", "║ │ ║", "║ ■ ║", "╚═════╝"}
(&Game{}).writeLookSideBySide(sess, p, content, mapLines, 71)
lines := strings.Split(strings.TrimSuffix(string(conn.data), "\r\n"), "\r\n")
if len(lines) != len(mapLines) {
t.Fatalf("got %d lines, want %d: %q", len(lines), len(mapLines), conn.data)
}
for i, line := range lines {
index := strings.Index(line, mapLines[i])
if index < 0 {
t.Fatalf("line %d missing map row: %q", i, line)
}
want := 73
if side == "left" {
want = 0
}
if got := visibleLen(line[:index]); got != want {
t.Errorf("line %d: map column = %d, want %d", i, got, want)
}
}
})
}
}
}
|