Index: trunk/autoquest-plugin-http-test/src/test/java/de/ugoe/cs/autoquest/http/SOAPUtilsTest.java
===================================================================
--- trunk/autoquest-plugin-http-test/src/test/java/de/ugoe/cs/autoquest/http/SOAPUtilsTest.java	(revision 1988)
+++ trunk/autoquest-plugin-http-test/src/test/java/de/ugoe/cs/autoquest/http/SOAPUtilsTest.java	(revision 2003)
@@ -20,13 +20,20 @@
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
-
+import java.util.logging.Level;
+
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.EventUtils;
 import de.ugoe.cs.autoquest.plugin.http.HTTPLogParser;
 import de.ugoe.cs.autoquest.plugin.http.SOAPUtils;
 import de.ugoe.cs.autoquest.plugin.http.eventcore.SOAPEventType;
 import de.ugoe.cs.autoquest.plugin.http.eventcore.SimpleSOAPEventType;
+import de.ugoe.cs.autoquest.plugin.http.eventcore.SimpleSOAPEventType.CallType;
+import de.ugoe.cs.util.console.Console;
+import de.ugoe.cs.util.console.TextConsole;
 
 /**
@@ -38,4 +45,9 @@
  */
 public class SOAPUtilsTest {
+    
+    @BeforeClass
+    public static void setupBeforeClass() {
+        new TextConsole(Level.FINEST);
+    }
 
     @Test
@@ -82,6 +94,158 @@
             }
         }
-
-    }
-
+    }
+    
+    @Test
+    public void testDropInvalidResponseRequestPairs_1() throws Exception {
+        List<Event> sequence = new LinkedList<Event>();
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        
+        List<Event> expectedSequence = new LinkedList<>(sequence);
+        
+        List<Event> originalSequence = new LinkedList<>(sequence);
+        
+        List<Event> validSequence = SOAPUtils.dropInvalidResponseRequestPairs(sequence);
+        Console.traceln(Level.INFO, getCurrentMethodName());
+        EventUtils.traceSequence(Level.INFO, validSequence);
+        
+        assertEquals(expectedSequence, validSequence);
+        assertEquals(originalSequence, sequence);
+    }
+    
+    @Test
+    public void testDropInvalidResponseRequestPairs_2() throws Exception {
+        List<Event> sequence = new LinkedList<Event>();
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.RESPONSE)));
+        
+        List<Event> expectedSequence = new LinkedList<Event>();
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        
+        List<Event> originalSequence = new LinkedList<>(sequence);
+        
+        List<Event> validSequence = SOAPUtils.dropInvalidResponseRequestPairs(sequence);
+        Console.traceln(Level.INFO, getCurrentMethodName());
+        EventUtils.traceSequence(Level.INFO, validSequence);
+        
+        assertEquals(expectedSequence, validSequence);
+        assertEquals(originalSequence, sequence);
+    }
+    
+    @Test
+    public void testDropInvalidResponseRequestPairs_3() throws Exception {
+        List<Event> sequence = new LinkedList<Event>();
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.RESPONSE)));
+        
+        List<Event> expectedSequence = new LinkedList<Event>();
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        
+        List<Event> originalSequence = new LinkedList<>(sequence);
+        
+        List<Event> validSequence = SOAPUtils.dropInvalidResponseRequestPairs(sequence);
+        Console.traceln(Level.INFO, getCurrentMethodName());
+        EventUtils.traceSequence(Level.INFO, validSequence);
+        
+        assertEquals(expectedSequence, validSequence);
+        assertEquals(originalSequence, sequence);
+    }
+    
+    @Test
+    public void testDropInvalidResponseRequestPairs_4() throws Exception {
+        List<Event> sequence = new LinkedList<Event>();
+        sequence.add(Event.STARTEVENT);
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(Event.ENDEVENT);
+        
+        List<Event> expectedSequence = new LinkedList<>(sequence);
+        
+        List<Event> originalSequence = new LinkedList<>(sequence);
+        
+        List<Event> validSequence = SOAPUtils.dropInvalidResponseRequestPairs(sequence);
+        Console.traceln(Level.INFO, getCurrentMethodName());
+        EventUtils.traceSequence(Level.INFO, validSequence);
+        
+        assertEquals(expectedSequence, validSequence);
+        assertEquals(originalSequence, sequence);
+    }
+    
+    @Test
+    public void testDropInvalidResponseRequestPairs_5() throws Exception {
+        List<Event> sequence = new LinkedList<Event>();
+        sequence.add(Event.STARTEVENT);
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(Event.ENDEVENT);
+        
+        List<Event> expectedSequence = new LinkedList<Event>();
+        expectedSequence.add(Event.STARTEVENT);
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        expectedSequence.add(Event.ENDEVENT);
+        
+        List<Event> originalSequence = new LinkedList<>(sequence);
+        
+        List<Event> validSequence = SOAPUtils.dropInvalidResponseRequestPairs(sequence);
+        Console.traceln(Level.INFO, getCurrentMethodName() );
+        EventUtils.traceSequence(Level.INFO, validSequence);
+        
+        assertEquals(expectedSequence, validSequence);
+        assertEquals(originalSequence, sequence);
+    }
+    
+    @Test
+    public void testDropInvalidResponseRequestPairs_6() throws Exception {
+        List<Event> sequence = new LinkedList<Event>();
+        sequence.add(Event.STARTEVENT);
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.REQUEST)));
+        sequence.add(new Event(new SimpleSOAPEventType("op2", "foo", "bar", null, null, CallType.RESPONSE)));
+        sequence.add(Event.ENDEVENT);
+        
+        List<Event> expectedSequence = new LinkedList<Event>();
+        expectedSequence.add(Event.STARTEVENT);
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.REQUEST)));
+        expectedSequence.add(new Event(new SimpleSOAPEventType("op1", "foo", "bar", null, null, CallType.RESPONSE)));
+        expectedSequence.add(Event.ENDEVENT);
+        
+        List<Event> originalSequence = new LinkedList<>(sequence);
+        
+        List<Event> validSequence = SOAPUtils.dropInvalidResponseRequestPairs(sequence);
+        Console.traceln(Level.INFO, getCurrentMethodName());
+        EventUtils.traceSequence(Level.INFO, validSequence);
+        
+        assertEquals(expectedSequence, validSequence);
+        assertEquals(originalSequence, sequence);
+    }
+
+    private  String getCurrentMethodName() {
+         StackTraceElement stackTraceElements[] = (new Throwable()).getStackTrace();
+         return stackTraceElements[1].toString();
+    }
+    
 }
