def testFullUpdate(self):
        ad = ActuatorData()
        ad2 = self._createTestActuatorData()

        ad.updateData(ad2)

        self.assertEquals(ad.getCommand(), ActuatorData.COMMAND_ON)
        self.assertEquals(ad.getStateData(), self.DEFAULT_STATE_DATA)
        self.assertEquals(ad.getValue(), self.DEFAULT_VALUE)
class BaseActuatorSimTask():
    """
	Base class for ActuatorSimTask
	
	"""
    def __init__(self,
                 actuatorType: int = ActuatorData.DEFAULT_ACTUATOR_TYPE,
                 simpleName: str = ConfigConst.NOT_SET):
        """
		Init BaseActuatorSimTask with default values
		:param actuatorType: Type of actuator
		:param simpleName: Name of actuator
		"""
        self.actuatorType = actuatorType
        self.simpleName = simpleName
        self.latestActuatorData = ActuatorData(self.actuatorType,
                                               self.simpleName)
        pass

    def activateActuator(self, val: float) -> bool:
        """
		Turn actuator on with given target value
		As a sim actuator, there is no real action
		:param val: Given target actuator value
		:return: If succeed to activate Actuator, always True as a sim actuator
		"""
        logging.info("\n======\nSim %s actuator ON, with value = %d.\n======" %
                     (self.getSimpleName(), val))
        self.latestActuatorData.setCommand(ActuatorData.COMMAND_ON)
        self.latestActuatorData.setValue(val)
        return True
        pass

    def deactivateActuator(self) -> bool:
        """
		Turn actuator off with given target value
		As a sim actuator, there is no real action
		:return: If succeed to deactivate Actuator, always True as a sim actuator
		"""
        logging.info("\n======\nSim %s actuator OFF.\n======" %
                     self.getSimpleName())
        self.latestActuatorData.setCommand(ActuatorData.COMMAND_OFF)
        return True
        pass

    def getLatestActuatorResponse(self) -> ActuatorData:
        """
		Get latest actuator data
		:return: Latest ActuatorData
		"""
        return self.latestActuatorData
        pass

    def getSimpleName(self) -> str:
        """
		Get name of the sim actuator
		:return: Name string
		"""
        return self.simpleName
        pass

    def updateActuator(self, data: ActuatorData) -> bool:
        """
		Use ActuatorData as command:
		Update current maintained latest ActuatorData
		Use given ActuatorData to execute command
		:param data: Given ActuatorData
		:return: If succeed to update and execute
		"""
        if data is None:
            logging.error("Got an invalid ActuatorData, which is None!")
            return False
        if not isinstance(data, ActuatorData):
            logging.error(
                "Got an invalid ActuatorData, which type is not ActuatorData!")
            return False
        if data.getCommand(
        ) is not ActuatorData.COMMAND_ON and data.getCommand(
        ) is not ActuatorData.COMMAND_OFF:
            logging.error(
                "Got an invalid ActuatorData, whose command is invalid!")
            return False
        ret = False
        if data.getCommand() is ActuatorData.COMMAND_ON:
            ret = self.activateActuator(data.getValue())
        else:
            ret = self.deactivateActuator()
        self.latestActuatorData.updateData(data)
        self.latestActuatorData.setName(self.simpleName)
        self.latestActuatorData.setStatusCode(int(ret))
        self.latestActuatorData.setAsResponse()
        return ret
        pass