aboutsummaryrefslogtreecommitdiff
path: root/go/game/map_test.go
blob: 15fa05cbfcb995cac6b04d908f353ce2836f9685 (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package game

import (
	"reflect"
	"strings"
	"testing"
)

func parseMapString(t *testing.T, mapDef string) *Map {
	r := strings.NewReader(mapDef)
	m, err := readMap(r)
	if err != nil {
		t.Fatalf("Parsing failed with: %v", err)
	}
	return m
}

func TestParseMapEndingStreets(t *testing.T) {
	mapDef := `map: |1-
 HST
 HSF
 TST

symbols:
  T: tower
  H: house
  F: farm
  S: street
`

	parseMapString(t, mapDef)
}

func TestParseMap(t *testing.T) {
	s := `map: |1-
 T  H   HT
  FSSSSS2H
  SHSH HS 
  S SST S 
 H  HFH  H
  S TSS S 
  SH HSHS 
 H1SSSSSF 
 TH   H  T

symbols:
  T: tower
  H: house
  F: farm
  S: street
  1: spawn player 1
  2: spawn player 2

kings:
  - [1,9]
  - [9,1]`

	m := parseMapString(t, s)

	if m.Tiles[0][0].Type != TileTypes.Tower {
		t.Fatalf("Unexpected tile at 0,0: %v (expected %v)", m.Tiles[0][0], TileTypes.Tower)
	}

	for y := 0; y < len(m.Tiles); y++ {
		for x := 0; x < len(m.Tiles[y]); x++ {
			if m.TileAt(Position{x, y}) != &m.Tiles[y][x] {
				t.Fatalf("TileAt and Tiles differ")
			}
		}
	}

	if m.ResourceGain != DEFAULT_RESOURCE_GAIN {
		t.Fatalf("resource gain is not the default one")
	}

	if reflect.ValueOf(m.WinCondition).Pointer() != reflect.ValueOf(KingGame).Pointer() {
		t.Fatalf("win conditions is not KingGame")
	}
}

func TestLoadingAllMaps(t *testing.T) {
	maps := []string{"the-tyrant", "2P-ring-street", "2P-river-king", "3P-ring-street", "4P-islands", "the-kraken"}

	for _, m := range maps {
		_, err := LoadMap("../../maps/" + m + ".yml")
		if err != nil {
			t.Fatalf("Loading map %s failed with %s", m, err)
		}
	}
}

func TestTileAt(t *testing.T) {
	mapDef := `map: |1-
 HS
 HS

symbols:
  H: house
  S: street
`

	m := parseMapString(t, mapDef)
	if m.TileAt(INVALID_POSITION()) != nil {
		t.Fatal("INVALID_POSITION returned valid rile")
	}
	if m.TileAt(Position{3, 0}) != nil {
		t.Fatal("INVALID_POSITION returned valid rile")
	}
	if m.TileAt(Position{0, 3}) != nil {
		t.Fatal("INVALID_POSITION returned valid rile")
	}
	if m.TileAt(Position{0, 0}).Type != TileTypes.House {
		t.Fatal("Tile at (0,0) is not a house")
	}
}