def test_get_buildings_returns_all_buildings_on_the_map(self):
		tmap = TileMap(TileGrid(Size(10, 10)))
		building1 = CabbageFarm()
		building2 = CabbageFarm()
		building3 = CabbageFarm()
		tmap.place_building(building1, Point(0, 0))
		tmap.place_building(building2, Point(100, 100))
		tmap.place_building(building3, Point(180, 180))
		buildings = tmap.get_buildings()
		self.assertEqual(3, len(buildings))
		self.assertIn(building1, buildings)
		self.assertIn(building2, buildings)
		self.assertIn(building3, buildings)
	def test_place_building_raises_an_exception_when_a_building_is_placed_out_of_bounds(self):  # noqa
		tmap = TileMap(TileGrid(Size(10, 10)))
		farm = CabbageFarm()
		with self.assertRaises(TileMapException) as error_context:
			tmap.place_building(farm, Point(200, 200))
		self.assertEqual(
			error_context.exception.message,
			'Buildings must be placed in bounds',
			)
		with self.assertRaises(TileMapException) as error_context:
			tmap.place_building(farm, Point(-1, -1))
		with self.assertRaises(TileMapException) as error_context:
			tmap.place_building(farm, Point(-1, 0))
		with self.assertRaises(TileMapException) as error_context:
			tmap.place_building(farm, Point(0, -1))
		with self.assertRaises(TileMapException) as error_context:
			tmap.place_building(farm, Point(1, 200))
		with self.assertRaises(TileMapException) as error_context:
			tmap.place_building(farm, Point(200, 1))
	def test_place_building_puts_a_building_into_the_building_registry_at_the_given_position(self):  # noqa
		tmap = TileMap(TileGrid(Size(10, 10)))
		farm = CabbageFarm()
		tmap.place_building(farm, Point(50, 50))
		self.assertIn(farm.building_id, tmap.building_registry)
		self.assertEqual(tmap.get_building_position(farm), Point(50, 50))
	def test_get_building_at_position_returns_None_if_there_is_no_building_near_the_given_point(self):  # noqa
		tmap = TileMap(TileGrid(Size(10, 10)))
		farm = CabbageFarm()
		tmap.place_building(farm, Point(100, 100))
		self.assertIsNone(tmap.get_building_at_position(Point(50, 50)))
	def test_get_building_at_position_finds_a_building_near_to_the_given_point(self):  # noqa
		tmap = TileMap(TileGrid(Size(10, 10)))
		farm = CabbageFarm()
		tmap.place_building(farm, Point(100, 100))
		self.assertIs(farm, tmap.get_building_at_position(Point(95, 95)))
	def test_get_building_position_returns_the_location_of_a_building(self):
		tmap = TileMap(TileGrid(Size(10, 10)))
		farm = CabbageFarm()
		tmap.place_building(farm, Point(100, 100))
		self.assertEqual(tmap.get_building_position(farm), Point(100, 100))