diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/JmsTopicWildcardSendReceiveTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/JmsTopicWildcardSendReceiveTest.java index 52cf2bec7e..eeb599988a 100755 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/JmsTopicWildcardSendReceiveTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/JmsTopicWildcardSendReceiveTest.java @@ -174,6 +174,32 @@ public class JmsTopicWildcardSendReceiveTest extends JmsTopicSendReceiveTest { assertNull(consumer.receiveNoWait()); } + public void testReceiveWildcardTopicMatchSinglePastTheEndWildcard() throws Exception { + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + ActiveMQDestination destination1 = (ActiveMQDestination)session.createTopic("a.>"); + ActiveMQDestination destination2 = (ActiveMQDestination)session.createTopic("a"); + + Message m = null; + MessageConsumer consumer = null; + String text = null; + + + consumer = session.createConsumer(destination1); + sendMessage(session, destination2, destination3String); + + m = consumer.receive(1000); + assertNotNull(m); + text = ((TextMessage)m).getText(); + if (!(text.equals(destination1String) || text.equals(destination3String))) { + fail("unexpected message:" + text); + } + + assertNull(consumer.receiveNoWait()); + } + + private void sendMessage(Session session, Destination destination, String text) throws JMSException { MessageProducer producer = session.createProducer(destination); diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/filter/DestinationFilterTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/filter/DestinationFilterTest.java index 53ea0e78f7..95af3942e9 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/filter/DestinationFilterTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/filter/DestinationFilterTest.java @@ -41,4 +41,25 @@ public class DestinationFilterTest extends TestCase { assertTrue("Filter not parsed well: " + filter.getClass(), filter instanceof CompositeDestinationFilter); assertFalse("Filter matched wrong destination type", filter.matches(new ActiveMQTopic("A.B"))); } + + public void testMatchesChild() throws Exception{ + DestinationFilter filter = DestinationFilter.parseFilter(new ActiveMQQueue("A.*.C")); + assertFalse("Filter matched wrong destination type", filter.matches(new ActiveMQTopic("A.B"))); + assertTrue("Filter did not match", filter.matches(new ActiveMQQueue("A.B.C"))); + + filter = DestinationFilter.parseFilter(new ActiveMQQueue("A.*")); + assertTrue("Filter did not match", filter.matches(new ActiveMQQueue("A.B"))); + assertFalse("Filter did match", filter.matches(new ActiveMQQueue("A"))); + } + + public void testMatchesAny() throws Exception{ + DestinationFilter filter = DestinationFilter.parseFilter(new ActiveMQQueue("A.>.>")); + + assertTrue("Filter did not match", filter.matches(new ActiveMQQueue("A.C"))); + + assertFalse("Filter did match", filter.matches(new ActiveMQQueue("B"))); + assertTrue("Filter did not match", filter.matches(new ActiveMQQueue("A.B"))); + assertTrue("Filter did not match", filter.matches(new ActiveMQQueue("A.B.C.D.E.F"))); + assertTrue("Filter did not match", filter.matches(new ActiveMQQueue("A"))); + } }