package com.indignado.logicbricks.systems.sensors;
import com.badlogic.ashley.core.Entity;
import com.indignado.logicbricks.components.RigidBodiesComponents;
import com.indignado.logicbricks.components.StateComponent;
import com.indignado.logicbricks.core.bricks.base.BaseTest;
import com.indignado.logicbricks.core.bricks.base.TestSensor;
import com.indignado.logicbricks.core.bricks.base.TestSensorComponent;
import com.indignado.logicbricks.core.bricks.base.TestSensorSystem;
import com.indignado.logicbricks.core.controllers.Controller;
import com.indignado.logicbricks.core.data.LogicBrick.BrickMode;
import com.indignado.logicbricks.core.sensors.Sensor.Pulse;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Rubentxu
*/
public class SensorSystemTest extends BaseTest{
private String stateTest;
private String stateTest2;
private SensorSystem sensorSystem;
private Entity player;
private TestSensor sensor;
private StateComponent stateComponent;
@Before
public void setup() {
this.stateTest = "StatePruebas";
this.stateTest2 = "StatePruebas2";
engine.registerBricksClasses(TestSensor.class, TestSensorComponent.class, TestSensorSystem.class);
// Create Player entity
entityBuilder.initialize();
stateComponent = entityBuilder.getComponent(StateComponent.class);
stateComponent.changeCurrentState(stateComponent.createState(stateTest));
stateComponent.createState(stateTest2);
entityBuilder.getComponent(RigidBodiesComponents.class);
engine.registerBricksClasses(TestSensor.class, TestSensorComponent.class, TestSensorSystem.class);
sensor = new TestSensor();
sensor.state = stateComponent.getCurrentState();
sensor.frequency = 1;
entityBuilder.addController(new Controller(), stateTest, stateTest2)
.connectToSensor(sensor);
player = entityBuilder.getEntity();
}
@Test
public void defaulTest() {
TestSensorSystem.isActive = false;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertFalse(sensor.positive);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
}
@Test
public void pulseModeTrueTest() {
TestSensorSystem.isActive = false;
sensor.pulse = Pulse.PM_TRUE.getValue();
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
}
@Test
public void pulseModeFalseTest() {
TestSensorSystem.isActive = false;
sensor.pulse = Pulse.PM_FALSE.getValue();
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
}
@Test
public void pulseModeBothTest() {
TestSensorSystem.isActive = false;
sensor.pulse = (Pulse.PM_TRUE.getValue() | Pulse.PM_FALSE.getValue());
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
}
@Test
public void inverseTest() {
TestSensorSystem.isActive = false;
sensor.invert = true;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
}
@Test
public void pulseModeTrueInverTest() {
TestSensorSystem.isActive = false;
sensor.pulse = Pulse.PM_TRUE.getValue();
sensor.invert = true;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
}
@Test
public void pulseModeFalseInverTest() {
TestSensorSystem.isActive = false;
sensor.pulse = Pulse.PM_FALSE.getValue();
sensor.invert = true;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertTrue(sensor.positive);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
}
@Test
public void pulseModeBothInverTest() {
TestSensorSystem.isActive = false;
sensor.pulse = (Pulse.PM_TRUE.getValue() | Pulse.PM_FALSE.getValue());
sensor.invert = true;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertTrue(sensor.positive);
}
@Test
public void tapTest() {
TestSensorSystem.isActive = false;
sensor.tap = true;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertFalse(sensor.positive);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
}
@Test
public void pulseModeTrueTapTest() {
TestSensorSystem.isActive = false;
sensor.pulse = Pulse.PM_TRUE.getValue();
sensor.tap = true;
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertFalse(sensor.positive);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_OFF, sensor.pulseState);
assertFalse(sensor.positive);
}
@Test
public void pulseChangeStateTest() {
TestSensorSystem.isActive = false;
sensor.frequency = 0;
sensor.pulse = (Pulse.PM_TRUE.getValue() | Pulse.PM_FALSE.getValue());
engine.addEntity(player);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
TestSensorSystem.isActive = true;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
stateComponent.changeCurrentState(stateComponent.getState(stateTest2));
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertTrue(sensor.positive);
TestSensorSystem.isActive = false;
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
engine.update(1);
assertEquals(BrickMode.BM_ON, sensor.pulseState);
assertFalse(sensor.positive);
}
}