@Test
 public void testMultipleChannelsWithSelector() {
   QueueChannel channel1 = new QueueChannel();
   QueueChannel channel2 = new QueueChannel();
   channel1.send(new GenericMessage<String>("test1"));
   channel1.send(new GenericMessage<String>("test2"));
   channel1.send(new GenericMessage<String>("test3"));
   channel2.send(new GenericMessage<String>("test1"));
   channel2.send(new GenericMessage<String>("test2"));
   channel2.send(new GenericMessage<String>("test3"));
   ChannelPurger purger =
       new ChannelPurger(
           new MessageSelector() {
             public boolean accept(Message<?> message) {
               return (message.getPayload().equals("test2"));
             }
           },
           channel1,
           channel2);
   List<Message<?>> purgedMessages = purger.purge();
   assertEquals(4, purgedMessages.size());
   Message<?> message1 = channel1.receive(0);
   assertNotNull(message1);
   assertEquals("test2", message1.getPayload());
   assertNull(channel1.receive(0));
   Message<?> message2 = channel2.receive(0);
   assertNotNull(message2);
   assertEquals("test2", message2.getPayload());
   assertNull(channel2.receive(0));
 }
 @Test
 public void testPurgeAllWithoutSelector() {
   QueueChannel channel = new QueueChannel();
   channel.send(new GenericMessage<String>("test1"));
   channel.send(new GenericMessage<String>("test2"));
   channel.send(new GenericMessage<String>("test3"));
   ChannelPurger purger = new ChannelPurger(channel);
   List<Message<?>> purgedMessages = purger.purge();
   assertEquals(3, purgedMessages.size());
   assertNull(channel.receive(0));
 }
 @Test
 public void lookupRegisteredChannel() {
   GenericApplicationContext context = new GenericApplicationContext();
   QueueChannel testChannel = new QueueChannel();
   testChannel.setBeanName("testChannel");
   context.getBeanFactory().registerSingleton("testChannel", testChannel);
   context.refresh();
   BeanFactoryChannelResolver resolver = new BeanFactoryChannelResolver(context);
   MessageChannel lookedUpChannel = resolver.resolveChannelName("testChannel");
   assertNotNull(testChannel);
   assertSame(testChannel, lookedUpChannel);
 }
 @Test
 public void testPurgeAllWithSelector() {
   QueueChannel channel = new QueueChannel();
   channel.send(new GenericMessage<String>("test1"));
   channel.send(new GenericMessage<String>("test2"));
   channel.send(new GenericMessage<String>("test3"));
   ChannelPurger purger =
       new ChannelPurger(
           new MessageSelector() {
             public boolean accept(Message<?> message) {
               return false;
             }
           },
           channel);
   List<Message<?>> purgedMessages = purger.purge();
   assertEquals(3, purgedMessages.size());
   assertNull(channel.receive(0));
 }
 @Test
 public void testPurgeSubsetWithSelector() {
   QueueChannel channel = new QueueChannel();
   channel.send(new GenericMessage<String>("test1"));
   channel.send(new GenericMessage<String>("test2"));
   channel.send(new GenericMessage<String>("test3"));
   ChannelPurger purger =
       new ChannelPurger(
           new MessageSelector() {
             public boolean accept(Message<?> message) {
               return (message.getPayload().equals("test2"));
             }
           },
           channel);
   List<Message<?>> purgedMessages = purger.purge();
   assertEquals(2, purgedMessages.size());
   Message<?> message = channel.receive(0);
   assertNotNull(message);
   assertEquals("test2", message.getPayload());
   assertNull(channel.receive(0));
 }
 @Test
 public void testMultipleChannelsWithNoSelector() {
   QueueChannel channel1 = new QueueChannel();
   QueueChannel channel2 = new QueueChannel();
   channel1.send(new GenericMessage<String>("test1"));
   channel1.send(new GenericMessage<String>("test2"));
   channel2.send(new GenericMessage<String>("test1"));
   channel2.send(new GenericMessage<String>("test2"));
   ChannelPurger purger = new ChannelPurger(channel1, channel2);
   List<Message<?>> purgedMessages = purger.purge();
   assertEquals(4, purgedMessages.size());
   assertNull(channel1.receive(0));
   assertNull(channel2.receive(0));
 }
 @Test
 public void testPurgeNoneWithSelectorAndMultipleChannels() {
   QueueChannel channel1 = new QueueChannel();
   QueueChannel channel2 = new QueueChannel();
   channel1.send(new GenericMessage<String>("test1"));
   channel1.send(new GenericMessage<String>("test2"));
   channel2.send(new GenericMessage<String>("test1"));
   channel2.send(new GenericMessage<String>("test2"));
   ChannelPurger purger =
       new ChannelPurger(
           new MessageSelector() {
             public boolean accept(Message<?> message) {
               return true;
             }
           },
           channel1,
           channel2);
   List<Message<?>> purgedMessages = purger.purge();
   assertEquals(0, purgedMessages.size());
   assertNotNull(channel1.receive(0));
   assertNotNull(channel1.receive(0));
   assertNotNull(channel2.receive(0));
   assertNotNull(channel2.receive(0));
 }