@Test
public void testRemoveQueuedMessagesOnSequenceReset() throws Exception {

    final UnitTestApplication application = new UnitTestApplication();
    try (Session session = setUpSession(application, false,
            new UnitTestResponder())) {
        final SessionState state = getSessionState(session);
        
        final int from = 10;
        int numberOfMsgs = 200;
        int to = from + numberOfMsgs;
        
        logonTo(session, 1);
        assertEquals(2, state.getNextTargetMsgSeqNum());
        for (int i = from; i < to; i++) {
            processMessage(session, createAppMessage(i));
        }
        for (int i = from; i < to; i++) {
            assertTrue(state.getQueuedSeqNums().contains(i));
        }
        assertEquals(state.getQueuedSeqNums().size(), numberOfMsgs);
        assertTrue(application.fromAppMessages.isEmpty());
        // Create a sequence reset which will cause deletion of almost all
        // messages
        // from the sessionState queue since former messages are skipped.
        // The remaining two messages will then be dequeued and processed by the
        // app.
        final int two = 2;
        processMessage(session, createSequenceReset(2, to - two, true));
        assertEquals(application.fromAppMessages.size(), two);
        assertFalse(state.isResendRequested());
        assertTrue(session.isLoggedOn());
        assertTrue(state.getQueuedSeqNums().isEmpty());
    }
}