aboutsummaryrefslogtreecommitdiff
path: root/internal/game/map_test.go
blob: a50c2c2a43755e39cbb56320bf9a23dfd965d78e (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package game

import (
	"strings"
	"testing"

	"thirdcollapse/internal/world"
)

func TestBuildTinyMap(t *testing.T) {
	g := &Game{
		World:    world.New("../../data"),
		MapWidth: 70,
	}

	tests := []struct {
		name   string
		roomID int
		want   []string // expected lines, or nil to just check count
	}{
		{
			name:   "room 1 has east exit",
			roomID: 1,
		},
		{
			name:   "room 2 has west/north/east",
			roomID: 2,
		},
		{
			name:   "room 4 has west/north/east",
			roomID: 4,
		},
		{
			name:   "room 21 has west only",
			roomID: 21,
		},
		{
			name:   "room 22 west of town square",
			roomID: 22,
		},
		{
			name:   "room 25 east of south of west",
			roomID: 25,
		},
		{
			name:   "room 8 hacking lab",
			roomID: 8,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			lines := buildTinyMap(g, tt.roomID)
			if len(lines) != 7 {
				t.Fatalf("expected 7 lines, got %d", len(lines))
			}
			if lines[0] != "╔═════╗" {
				t.Errorf("line 0: want ╔═════╗, got %s", lines[0])
			}
			if lines[6] != "╚═════╝" {
				t.Errorf("line 6: want ╚═════╝, got %s", lines[6])
			}
			for i := 1; i <= 5; i++ {
				if !strings.HasPrefix(lines[i], "║") || !strings.HasSuffix(lines[i], "║") {
					t.Errorf("line %d: should have ║ borders, got %s", i, lines[i])
				}
				if len([]rune(lines[i])) != 7 {
					t.Errorf("line %d: expected 7 runes, got %d in %q", i, len([]rune(lines[i])), lines[i])
				}
			}
			t.Logf("Room %d map:\n%s", tt.roomID, strings.Join(lines, "\n"))
		})
	}
}

func TestWrapText(t *testing.T) {
	tests := []struct {
		text  string
		width int
		want  int // expected number of lines
	}{
		{"hello world", 70, 1},
		{"hello world", 5, 2},
		{"", 70, 0},
		{"a b c d e f g h i j", 5, 4},
	}

	for _, tt := range tests {
		result := wrapText(tt.text, tt.width)
		if len(result) != tt.want {
			t.Errorf("wrapText(%q, %d) = %d lines, want %d: %v", tt.text, tt.width, len(result), tt.want, result)
		}
	}
}