aboutsummaryrefslogtreecommitdiff
path: root/internal/game/look_alignment_test.go
blob: 42af09a270dcb0bf9dc721fe66bdaa014fe40f11 (plain)
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)
					}
				}
			})
		}
	}
}