### Question:
ApplicationThreadDeframer implements Deframer, MessageDeframer.Listener { @Override public void deframerClosed(final boolean hasPartialMessage) { transportExecutor.runOnTransportThread( new Runnable() { @Override public void run() { storedListener.deframerClosed(hasPartialMessage); } }); } ApplicationThreadDeframer(
      MessageDeframer.Listener listener,
      TransportExecutor transportExecutor,
      MessageDeframer deframer); @Override void setMaxInboundMessageSize(int messageSize); @Override void setDecompressor(Decompressor decompressor); @Override void setFullStreamDecompressor(GzipInflatingBuffer fullStreamDecompressor); @Override void request(final int numMessages); @Override void deframe(final ReadableBuffer data); @Override void closeWhenComplete(); @Override void close(); @Override void bytesRead(final int numBytes); @Override void messagesAvailable(StreamListener.MessageProducer producer); @Override void deframerClosed(final boolean hasPartialMessage); @Override void deframeFailed(final Throwable cause);  }### Answer:
@Test public void deframerClosedInvokesTransportExecutor() { applicationThreadDeframer.deframerClosed(true); assertFalse(listener.deframerClosedWithPartialMessage); transportExecutor.runStoredRunnable(); assertTrue(listener.deframerClosedWithPartialMessage); }