@Test
	public void execute() {
		LOGGER.info("Starting test execute method...");

		Position position = new Position(1, 1, Orientation.NORTH);
		Mower mower = new Mower(position);
		Long[] borders = { 3L, 3L };
		List<Action> instrcutions = new ArrayList<Action>();
		List<Position> positions = new ArrayList<Position>();

		// 1. test with missing borders
		try {
			mower.execute(instrcutions, null, positions);
			fail("must throw exception before thsi line");
		} catch (IllegalParameterException e) {
			LOGGER.debug("Borders cannot be null");
			assertTrue(Boolean.TRUE);
		}

		// 2. test with missing instructins
		try {
			Position newPosition = mower.execute(null, borders, positions);
			assertTrue("mower must remain in the same position", position.equals(newPosition));
		} catch (IllegalParameterException e) {
			LOGGER.error("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
			fail("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
		}

		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.RIGHT);
		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.LEFT);
		// 3. perfect scenario
		try {
			Position newPosition = mower.execute(instrcutions, borders, positions);
			Position expectedPosition = new Position(2, 2, Orientation.NORTH);
			assertTrue("mower must not be in this position", newPosition.equals(expectedPosition));
		} catch (IllegalParameterException e) {
			LOGGER.error("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
			fail("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
		}

		// 4. the mower exceeds borders
		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.RIGHT);
		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.ADVANCE);
		instrcutions.add(Action.RIGHT);
		position.setX(1);
		position.setY(1);
		position.setOrientation(Orientation.NORTH);
		positions.add(position);
		try {
			Position newPosition = mower.execute(instrcutions, borders, positions);
			Position expectedPosition = new Position(3, 3, Orientation.SOUTH);
			assertTrue("mower must not be in this position", newPosition.equals(expectedPosition));
		} catch (IllegalParameterException e) {
			LOGGER.error("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
			fail("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
		}

		// 5. the mower passes a busy position
		position.setX(1);
		position.setY(1);
		position.setOrientation(Orientation.NORTH);
		positions.add(position);
		positions.add(new Position(2, 3, Orientation.NORTH));
		try {
			Position newPosition = mower.execute(instrcutions, borders, positions);
			Position expectedPosition = new Position(3, 2, Orientation.SOUTH);
			assertTrue("mower must not be in this position", newPosition.equals(expectedPosition));
		} catch (IllegalParameterException e) {
			LOGGER.error("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
			fail("Error occurred when trying to execute instructions : " + e.getLocalizedMessage());
		}

		LOGGER.info("Testing execute method ends.");

	}