package com.indignado.logicbricks.systems.sensors; import com.indignado.logicbricks.components.BlackBoardComponent; import com.indignado.logicbricks.components.IdentityComponent; import com.indignado.logicbricks.core.controllers.ConditionalController; import com.indignado.logicbricks.core.data.LogicBrick; import com.indignado.logicbricks.core.data.Property; import com.indignado.logicbricks.core.sensors.PropertySensor; import com.indignado.logicbricks.core.sensors.PropertySensor.EvaluationType; import com.indignado.logicbricks.systems.sensors.base.ActuatorTest; import com.indignado.logicbricks.systems.sensors.base.BaseSensorSystemTest; import com.indignado.logicbricks.utils.builders.controllers.ConditionalControllerBuilder; import com.indignado.logicbricks.utils.builders.sensors.PropertySensorBuilder; import org.junit.Test; import static org.junit.Assert.*; /** * @author Rubentxu */ public class PropertySensorSystemTest extends BaseSensorSystemTest<PropertySensor, PropertySensorSystem> { private String propertyName; private BlackBoardComponent blackBoardComponent; private Property<Integer> property; public PropertySensorSystemTest() { super(); sensorSystem = new PropertySensorSystem(); engine.addSystem(sensorSystem); } @Override public void tearDown() { player = null; sensor = null; } @Override protected void createContext() { // Create Player Entity entityBuilder.initialize(); IdentityComponent identityPlayer = entityBuilder.getComponent(IdentityComponent.class); identityPlayer.tag = "Player"; propertyName = "testProperty"; property = new Property<Integer>(propertyName, 0, true); blackBoardComponent = entityBuilder.getComponent(BlackBoardComponent.class); blackBoardComponent.addProperty(property); sensor =builders.getBrickBuilder(PropertySensorBuilder.class) .setProperty(propertyName) .setName("sensorPlayer") .getBrick(); ConditionalController controllerGround =builders.getBrickBuilder(ConditionalControllerBuilder.class) .setOp(ConditionalController.Op.OP_AND) .getBrick(); ActuatorTest actuatorTest = new ActuatorTest(); player = entityBuilder .addController(controllerGround, "Default") .connectToSensor(sensor) .connectToActuator(actuatorTest) .getEntity(); } @Test public void propertyChangedTest() { sensor.evaluationType = EvaluationType.CHANGED; engine.addEntity(player); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); property.setValue(1); game.singleStep(1); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); assertTrue(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON); assertFalse(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); } @Test public void propertyIntervalTest() { sensor.evaluationType = EvaluationType.INTERVAL; sensor.min = 1; sensor.max = 3; engine.addEntity(player); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); property.setValue(1); game.singleStep(1); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); assertTrue(sensor.positive); property.setValue(2); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertTrue(sensor.positive); property.setValue(4); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON); assertFalse(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); } @Test public void propertyNotEqualTest() { sensor.evaluationType = EvaluationType.NOT_EQUAL; sensor.value = 2; engine.addEntity(player); game.singleStep(1); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); assertTrue(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertTrue(sensor.positive); property.setValue(2); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON); assertFalse(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); } @Test public void propertyEqualTest() { sensor.evaluationType = EvaluationType.EQUAL; sensor.value = 0; engine.addEntity(player); game.singleStep(1); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); assertTrue(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertTrue(sensor.positive); property.setValue(2); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON); assertFalse(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); } @Test public void propertyGreaterThanTest() { sensor.evaluationType = EvaluationType.GREATER_THAN; sensor.value = 1; property.setValue(2); engine.addEntity(player); game.singleStep(1); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); assertTrue(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertTrue(sensor.positive); property.setValue(0); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON); assertFalse(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); } @Test public void propertyLessThanTest() { sensor.evaluationType = EvaluationType.LESS_THAN; sensor.value = 1; engine.addEntity(player); game.singleStep(1); assertEquals(LogicBrick.BrickMode.BM_ON, sensor.pulseState); assertTrue(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertTrue(sensor.positive); property.setValue(1); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_ON); assertFalse(sensor.positive); game.singleStep(1); assertTrue(sensor.pulseState == LogicBrick.BrickMode.BM_OFF); assertFalse(sensor.positive); } }