@Test
  public void testIsAllowedAtCurrentState() {
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.AYT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTF));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCP));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GWA));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SWA));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.RST));

    try {
      stateMachine.updateWith(Command.AYT);
    } catch (ProtocolStateException ignored) {
      Assert.fail();
    }
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.AYT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTF));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTT));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.GCO));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCP));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GWA));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.RST));

    try {
      stateMachine.updateWith(Command.SCO);
    } catch (ProtocolStateException ignored) {
      Assert.fail();
    }
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.AYT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTF));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.CTT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GCO));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SCO));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SCP));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GWA));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.RST));

    try {
      stateMachine.updateWith(Command.CTT);
    } catch (ProtocolStateException ignored) {
      Assert.fail();
    }
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.AYT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTF));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GCO));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SCO));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SCP));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.GWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.RST));

    try {
      stateMachine.updateWith(Command.SWA);
    } catch (ProtocolStateException ignored) {
      Assert.fail();
    }
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.AYT));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.CTF));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCP));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.SWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.RST));

    try {
      stateMachine.updateWith(Command.CTF);
    } catch (ProtocolStateException ignored) {
      Assert.fail();
    }
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.AYT));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.CTF));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.CTT));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCO));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SCP));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.GWA));
    Assert.assertFalse(stateMachine.isAllowedAtCurrentState(Command.SWA));
    Assert.assertTrue(stateMachine.isAllowedAtCurrentState(Command.RST));
  }