75 lines
1.9 KiB
Crystal
75 lines
1.9 KiB
Crystal
require "./spec_helper"
|
|
|
|
module Game::TestCommand
|
|
extend self
|
|
|
|
def create_empty_map_2x2 : Map
|
|
Map.new 2, 2
|
|
end
|
|
|
|
def create_map_with_resource : Map
|
|
map = Map.new 2, 2
|
|
map.set BuildingTile.new(
|
|
Point.new(0, 0),
|
|
Building.new(
|
|
Building::Type::StartPoint,
|
|
storage: 200
|
|
)
|
|
)
|
|
map.set DepositTile.new(
|
|
Point.new(1, 1),
|
|
Deposit.new(Resource::Type::Crystals, 100)
|
|
)
|
|
map.set BuildingTile.new(
|
|
Point.new(0, 1),
|
|
Building.new(
|
|
Building::Type::CrystalMiner,
|
|
mining: Mining.new(20, Resource.new(Resource::Type::Crystals, 40))
|
|
)
|
|
)
|
|
map
|
|
end
|
|
|
|
describe Command do
|
|
it "should complete build command" do
|
|
world = World.new create_empty_map_2x2
|
|
point = Point.new 1, 0
|
|
building = Building.new Building::Type::StartPoint, **{
|
|
construction: Construction.free 10,
|
|
}
|
|
command = BuildCommand.new point, building
|
|
world.push command
|
|
tile = world.map.get point
|
|
tile.should be_a(ConstructionSiteTile)
|
|
world.run 10
|
|
tile = world.map.get point
|
|
tile.should be_a(BuildingTile)
|
|
end
|
|
|
|
it "should restrict building if not enought resources" do
|
|
world = World.new create_empty_map_2x2
|
|
point = Point.new 1, 0
|
|
building = Building.new Building::Type::StartPoint, **{
|
|
construction: Construction.new(
|
|
ts: 10,
|
|
cost: ResourceBag.new({
|
|
Resource::Type::Crystals => 100,
|
|
})
|
|
),
|
|
}
|
|
command = BuildCommand.new point, building
|
|
expect_raises(NotEnoughtResources) do
|
|
world.push(command)
|
|
end
|
|
end
|
|
|
|
it "should complete mining command" do
|
|
world = World.new create_map_with_resource
|
|
command = MineCommand.new Point.new(0, 1)
|
|
world.push command
|
|
world.run 20
|
|
world.resources[Resource::Type::Crystals].should eq 40
|
|
end
|
|
end
|
|
end
|