1-- ==============
2-- Testing roads
3-- ==============
4function _cnt(i)
5   local rv = 0
6   for name,cnt in pairs(i) do rv = rv + cnt end
7   return rv
8end
9
10
11-- ============
12-- Usage tests
13-- ============
14road_tests = lunit.TestCase("road tests")
15function road_tests:setup()
16   self.f = map:get_field(10,10)
17   player1:conquer(self.f, 6)
18
19   self.start_flag = player1:place_flag(self.f)
20
21   self.r = player1:place_road("busy", self.start_flag, "r", "r", "br", "br")
22   self.end_flag = self.f.rn.rn.brn.brn.immovable
23end
24function road_tests:teardown()
25   flags = {self.start_flag, self.end_flag}
26   for temp, f in ipairs(flags) do
27      pcall(function() f:remove() end)
28   end
29end
30
31function road_tests:test_length()
32   assert_equal(4, self.r.length)
33end
34function road_tests:test_field()
35   local f = self.r.fields
36   assert_equal(#f, 3)
37   assert_equal(self.f.rn, f[1])
38   assert_equal(self.f.rn.rn, f[2])
39   assert_equal(self.f.rn.rn.brn, f[3])
40end
41function road_tests:test_roadtype()
42   assert_equal("busy", self.r.road_type)
43end
44function road_tests:test_type()
45   assert_equal("road", self.r.descr.type_name)
46end
47function road_tests:test_name()
48   assert_equal("road", self.r.descr.name)
49end
50
51function road_tests:test_deletion_of_flag()
52   self.r.start_flag:remove()
53   assert_error("Road vanished!", function() self.r:length() end)
54end
55function road_tests:test_access_of_flags()
56   assert_equal(self.end_flag, self.r.end_flag)
57   assert_equal(self.start_flag, self.r.start_flag)
58end
59function road_tests:test_road_upcasting()
60   i = self.f.rn.immovable
61   assert_equal(i, self.r)
62   assert_equal(4, i.length)
63end
64
65-- ====================
66-- Creating of carrier
67-- ====================
68function road_tests:test_no_worker_at_creation()
69   assert_equal(0, _cnt(self.r:get_workers("all")))
70end
71function road_tests:test_carrier_creation()
72   self.r:set_workers("barbarians_carrier",1)
73   assert_equal(1, _cnt(self.r:get_workers("all")))
74   assert_equal(1, self.r:get_workers("barbarians_carrier"))
75end
76function road_tests:test_carrier_creation_and_deletion()
77   self.r:set_workers("barbarians_carrier",1)
78   assert_equal(1, _cnt(self.r:get_workers("all")))
79   assert_equal(1, self.r:get_workers("barbarians_carrier"))
80   self.r:set_workers("barbarians_carrier",0)
81   assert_equal(0, _cnt(self.r:get_workers("all")))
82   assert_equal(0, self.r:get_workers("barbarians_carrier"))
83   self.r:set_workers("barbarians_carrier",1)
84   assert_equal(1, _cnt(self.r:get_workers("all")))
85   assert_equal(1, self.r:get_workers("barbarians_carrier"))
86end
87function road_tests:test_carrier_creation_not_a_carrier()
88   assert_error("Not a carrier!", function()
89      self.r:set_workers{barbarians_lumberjack=1}
90   end)
91end
92function road_tests:test_carrier_creation_illegal_name()
93   assert_error("Illegal name", function()
94      self.r:set_workers("kjhskjh", 1)
95   end)
96end
97function road_tests:test_carrier_no_space()
98   self.r:set_workers{barbarians_carrier=1}
99   assert_error("No space!", function ()
100      self.r:set_workers{barbarians_carrier=2}
101   end)
102end
103function road_tests:test_valid_workers()
104   assert_equal(2, _cnt(self.r.valid_workers))
105   assert_equal(1, self.r.valid_workers.barbarians_carrier)
106end
107