Repository: qpid-jms
Updated Branches:
  refs/heads/master 5cd279a62 -> 289ba89fe


consolidate tests


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/475a8889
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/475a8889
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/475a8889

Branch: refs/heads/master
Commit: 475a8889c3e452235530442eb944371bb862e5a6
Parents: 5cd279a
Author: Robert Gemmell <rob...@apache.org>
Authored: Tue Mar 3 17:41:57 2015 +0000
Committer: Robert Gemmell <rob...@apache.org>
Committed: Tue Mar 3 17:41:57 2015 +0000

----------------------------------------------------------------------
 .../qpid/jms/selector/SelectorParserTest.java   | 420 ++++++++++++++++++
 .../apache/qpid/jms/selector/SelectorTest.java  | 444 -------------------
 2 files changed, 420 insertions(+), 444 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/475a8889/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
index 73eca85..1fd2afc 100755
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorParserTest.java
@@ -16,12 +16,16 @@
  */
 package org.apache.qpid.jms.selector;
 
+import java.util.HashMap;
+
 import junit.framework.TestCase;
 
 import org.apache.qpid.jms.selector.SelectorParser;
 import org.apache.qpid.jms.selector.filter.BooleanExpression;
 import org.apache.qpid.jms.selector.filter.ComparisonExpression;
 import org.apache.qpid.jms.selector.filter.Expression;
+import org.apache.qpid.jms.selector.filter.FilterException;
+import org.apache.qpid.jms.selector.filter.Filterable;
 import org.apache.qpid.jms.selector.filter.LogicExpression;
 import org.apache.qpid.jms.selector.filter.PropertyExpression;
 import org.slf4j.Logger;
@@ -61,4 +65,420 @@ public class SelectorParserTest extends TestCase {
     protected BooleanExpression parse(String text) throws Exception {
         return SelectorParser.parse(text);
     }
+
+    public void testBooleanSelector() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "(trueProp OR falseProp) AND trueProp", true);
+        assertSelector(message, "(trueProp OR falseProp) AND falseProp", 
false);
+    }
+
+    public void testJMSPropertySelectors() throws Exception {
+        MockMessage message = createMessage();
+        message.setJMSType("selector-test");
+        message.setJMSMessageID("id:test:1:1:1:1");
+
+        assertSelector(message, "JMSType = 'selector-test'", true);
+        assertSelector(message, "JMSType = 'crap'", false);
+
+        assertSelector(message, "JMSMessageID = 'id:test:1:1:1:1'", true);
+        assertSelector(message, "JMSMessageID = 'id:not-test:1:1:1:1'", false);
+
+        message = createMessage();
+        message.setJMSType("1001");
+
+        assertSelector(message, "JMSType='1001'", true);
+        assertSelector(message, "JMSType='1001' OR JMSType='1002'", true);
+        assertSelector(message, "JMSType = 'crap'", false);
+    }
+
+    public void testBasicSelectors() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "name = 'James'", true);
+        assertSelector(message, "rank > 100", true);
+        assertSelector(message, "rank >= 123", true);
+        assertSelector(message, "rank >= 124", false);
+    }
+
+    public void testPropertyTypes() throws Exception {
+        MockMessage message = createMessage();
+        assertSelector(message, "byteProp = 123", true);
+        assertSelector(message, "byteProp = 10", false);
+        assertSelector(message, "byteProp2 = 33", true);
+        assertSelector(message, "byteProp2 = 10", false);
+
+        assertSelector(message, "shortProp = 123", true);
+        assertSelector(message, "shortProp = 10", false);
+
+        assertSelector(message, "shortProp = 123", true);
+        assertSelector(message, "shortProp = 10", false);
+
+        assertSelector(message, "intProp = 123", true);
+        assertSelector(message, "intProp = 10", false);
+
+        assertSelector(message, "longProp = 123", true);
+        assertSelector(message, "longProp = 10", false);
+
+        assertSelector(message, "floatProp = 123", true);
+        assertSelector(message, "floatProp = 10", false);
+
+        assertSelector(message, "doubleProp = 123", true);
+        assertSelector(message, "doubleProp = 10", false);
+    }
+
+    public void testAndSelectors() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "name = 'James' and rank < 200", true);
+        assertSelector(message, "name = 'James' and rank > 200", false);
+        assertSelector(message, "name = 'Foo' and rank < 200", false);
+        assertSelector(message, "unknown = 'Foo' and anotherUnknown < 200", 
false);
+    }
+
+    public void testOrSelectors() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "name = 'James' or rank < 200", true);
+        assertSelector(message, "name = 'James' or rank > 200", true);
+        assertSelector(message, "name = 'Foo' or rank < 200", true);
+        assertSelector(message, "name = 'Foo' or rank > 200", false);
+        assertSelector(message, "unknown = 'Foo' or anotherUnknown < 200", 
false);
+    }
+
+    public void testPlus() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "rank + 2 = 125", true);
+        assertSelector(message, "(rank + 2) = 125", true);
+        assertSelector(message, "125 = (rank + 2)", true);
+        assertSelector(message, "rank + version = 125", true);
+        assertSelector(message, "rank + 2 < 124", false);
+        assertSelector(message, "name + '!' = 'James!'", true);
+    }
+
+    public void testMinus() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "rank - 2 = 121", true);
+        assertSelector(message, "rank - version = 121", true);
+        assertSelector(message, "rank - 2 > 122", false);
+    }
+
+    public void testMultiply() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "rank * 2 = 246", true);
+        assertSelector(message, "rank * version = 246", true);
+        assertSelector(message, "rank * 2 < 130", false);
+    }
+
+    public void testDivide() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "rank / version = 61.5", true);
+        assertSelector(message, "rank / 3 > 100.0", false);
+        assertSelector(message, "rank / 3 > 100", false);
+        assertSelector(message, "version / 2 = 1", true);
+    }
+
+    public void testBetween() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "rank between 100 and 150", true);
+        assertSelector(message, "rank between 10 and 120", false);
+    }
+
+    public void testIn() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "name in ('James', 'Bob', 'Gromit')", true);
+        assertSelector(message, "name in ('Bob', 'James', 'Gromit')", true);
+        assertSelector(message, "name in ('Gromit', 'Bob', 'James')", true);
+
+        assertSelector(message, "name in ('Gromit', 'Bob', 'Cheddar')", false);
+        assertSelector(message, "name not in ('Gromit', 'Bob', 'Cheddar')", 
true);
+    }
+
+    public void testIsNull() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "dummy is null", true);
+        assertSelector(message, "dummy is not null", false);
+        assertSelector(message, "name is not null", true);
+        assertSelector(message, "name is null", false);
+    }
+
+    public void testLike() throws Exception {
+        MockMessage message = createMessage();
+        message.setStringProperty("modelClassId", 
"com.whatever.something.foo.bar");
+        message.setStringProperty("modelInstanceId", "170");
+        message.setStringProperty("modelRequestError", "abc");
+        message.setStringProperty("modelCorrelatedClientId", "whatever");
+
+        assertSelector(message, "modelClassId LIKE 'com.whatever.something.%' 
AND modelInstanceId = '170' AND (modelRequestError IS NULL OR 
modelCorrelatedClientId = 'whatever')",
+                       true);
+
+        message.setStringProperty("modelCorrelatedClientId", "shouldFailNow");
+
+        assertSelector(message, "modelClassId LIKE 'com.whatever.something.%' 
AND modelInstanceId = '170' AND (modelRequestError IS NULL OR 
modelCorrelatedClientId = 'whatever')",
+                       false);
+
+        message = createMessage();
+        message.setStringProperty("modelClassId", 
"com.whatever.something.foo.bar");
+        message.setStringProperty("modelInstanceId", "170");
+        message.setStringProperty("modelCorrelatedClientId", "shouldNotMatch");
+
+        assertSelector(message, "modelClassId LIKE 'com.whatever.something.%' 
AND modelInstanceId = '170' AND (modelRequestError IS NULL OR 
modelCorrelatedClientId = 'whatever')",
+                       true);
+    }
+
+    /**
+     * Test cases from Mats Henricson
+     */
+    public void testMatsHenricsonUseCases() throws Exception {
+        MockMessage message = createMessage();
+        assertSelector(message, "SessionserverId=1870414179", false);
+
+        message.setLongProperty("SessionserverId", 1870414179);
+        assertSelector(message, "SessionserverId=1870414179", true);
+
+        message.setLongProperty("SessionserverId", 1234);
+        assertSelector(message, "SessionserverId=1870414179", false);
+
+        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", false);
+
+        message.setStringProperty("Command", "Cheese");
+        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", true);
+
+        message.setStringProperty("Command", "MirrorLobbyRequest");
+        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", false);
+        message.setStringProperty("Command", "MirrorLobbyReply");
+        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", false);
+    }
+
+    @SuppressWarnings("unused")
+    public void testFloatComparisons() throws Exception {
+        MockMessage message = createMessage();
+
+        // JMS 1.1 Section 3.8.1.1 : Approximate literals use the Java
+        // floating-point literal syntax.
+        // We will use the java variable x to demo valid floating point syntax.
+        double x;
+
+        // test decimals like x.x
+        x = 1.0;
+        x = -1.1;
+        x = 1.0E1;
+        x = 1.1E1;
+        x = -1.1E1;
+        assertSelector(message, "1.0 < 1.1", true);
+        assertSelector(message, "-1.1 < 1.0", true);
+        assertSelector(message, "1.0E1 < 1.1E1", true);
+        assertSelector(message, "-1.1E1 < 1.0E1", true);
+
+        // test decimals like x.
+        x = 1.;
+        x = 1.E1;
+        assertSelector(message, "1. < 1.1", true);
+        assertSelector(message, "-1.1 < 1.", true);
+        assertSelector(message, "1.E1 < 1.1E1", true);
+        assertSelector(message, "-1.1E1 < 1.E1", true);
+
+        // test decimals like .x
+        x = .5;
+        x = -.5;
+        x = .5E1;
+        assertSelector(message, ".1 < .5", true);
+        assertSelector(message, "-.5 < .1", true);
+        assertSelector(message, ".1E1 < .5E1", true);
+        assertSelector(message, "-.5E1 < .1E1", true);
+
+        // test exponents
+        x = 4E10;
+        x = -4E10;
+        x = 5E+10;
+        x = 5E-10;
+        assertSelector(message, "4E10 < 5E10", true);
+        assertSelector(message, "5E8 < 5E10", true);
+        assertSelector(message, "-4E10 < 2E10", true);
+        assertSelector(message, "-5E8 < 2E2", true);
+        assertSelector(message, "4E+10 < 5E+10", true);
+        assertSelector(message, "4E-10 < 5E-10", true);
+    }
+
+    public void testStringQuoteParsing() throws Exception {
+        MockMessage message = createMessage();
+        assertSelector(message, "quote = '''In God We Trust'''", true);
+    }
+
+    public void testLikeComparisons() throws Exception {
+        MockMessage message = createMessage();
+
+        assertSelector(message, "quote LIKE '''In G_d We Trust'''", true);
+        assertSelector(message, "quote LIKE '''In Gd_ We Trust'''", false);
+        assertSelector(message, "quote NOT LIKE '''In G_d We Trust'''", false);
+        assertSelector(message, "quote NOT LIKE '''In Gd_ We Trust'''", true);
+
+        assertSelector(message, "foo LIKE '%oo'", true);
+        assertSelector(message, "foo LIKE '%ar'", false);
+        assertSelector(message, "foo NOT LIKE '%oo'", false);
+        assertSelector(message, "foo NOT LIKE '%ar'", true);
+
+        assertSelector(message, "foo LIKE '!_%' ESCAPE '!'", true);
+        assertSelector(message, "quote LIKE '!_%' ESCAPE '!'", false);
+        assertSelector(message, "foo NOT LIKE '!_%' ESCAPE '!'", false);
+        assertSelector(message, "quote NOT LIKE '!_%' ESCAPE '!'", true);
+
+        assertSelector(message, "punctuation LIKE 
'!#$&()*+,-./:;<=>?@[\\]^`{|}~'", true);
+    }
+
+    public void testInvalidSelector() throws Exception {
+        MockMessage message = createMessage();
+        assertInvalidSelector(message, "3+5");
+        assertInvalidSelector(message, "True AND 3+5");
+        assertInvalidSelector(message, "=TEST 'test'");
+    }
+
+    public void testHyphenatedProperty() throws Exception {
+        MockMessage message = createMessage();
+        message.setStringProperty("hyphenated-prop", "val");
+
+        assertSelector(message, "\"hyphenated-prop\" = 'val'", true);
+        assertSelector(message, "\"hyphenated-prop\" = 'other'", false);
+    }
+
+    protected MockMessage createMessage() {
+        MockMessage message = createMessage("FOO.BAR");
+        message.setJMSType("selector-test");
+        message.setJMSMessageID("connection:1:1:1:1");
+        message.setObjectProperty("name", "James");
+        message.setObjectProperty("location", "London");
+
+        message.setByteProperty("byteProp", (byte)123);
+        message.setByteProperty("byteProp2", (byte)33);
+        message.setShortProperty("shortProp", (short)123);
+        message.setIntProperty("intProp", 123);
+        message.setLongProperty("longProp", 123);
+        message.setFloatProperty("floatProp", 123);
+        message.setDoubleProperty("doubleProp", 123);
+
+        message.setIntProperty("rank", 123);
+        message.setIntProperty("version", 2);
+        message.setStringProperty("quote", "'In God We Trust'");
+        message.setStringProperty("foo", "_foo");
+        message.setStringProperty("punctuation", 
"!#$&()*+,-./:;<=>?@[\\]^`{|}~");
+        message.setBooleanProperty("trueProp", true);
+        message.setBooleanProperty("falseProp", false);
+        return message;
+    }
+
+    protected void assertInvalidSelector(MockMessage message, String text) {
+        try {
+            SelectorParser.parse(text);
+            fail("Created a valid selector");
+        } catch (FilterException e) {
+        }
+    }
+
+    protected void assertSelector(MockMessage message, String text, boolean 
expected) throws FilterException {
+        BooleanExpression selector = SelectorParser.parse(text);
+        assertTrue("Created a valid selector", selector != null);
+        boolean value = selector.matches(message);
+        assertEquals("Selector for: " + text, expected, value);
+    }
+
+    protected MockMessage createMessage(String subject) {
+        MockMessage message = new MockMessage();
+        message.setDestination(subject);
+        return message;
+    }
+
+    static class MockMessage implements Filterable {
+
+        HashMap<String, Object> properties = new HashMap<String, Object>();
+        private String text;
+        private Object destination;
+        private String messageId;
+        private String type;
+        private Object localConnectionId;
+
+        public void setDestination(Object destination) {
+            this.destination=destination;
+        }
+        public void setJMSMessageID(String messageId) {
+            this.messageId = messageId;
+        }
+        public void setJMSType(String type) {
+            this.type = type;
+        }
+        public void setText(String text) {
+            this.text = text;
+        }
+
+        public void setBooleanProperty(String key, boolean value) {
+            properties.put(key, value);
+        }
+
+        public void setStringProperty(String key, String value) {
+            properties.put(key, value);
+        }
+
+        public void setByteProperty(String key, byte value) {
+            properties.put(key, value);
+        }
+
+        public void setDoubleProperty(String key, double value) {
+            properties.put(key, value);
+        }
+
+        public void setFloatProperty(String key, float value) {
+            properties.put(key, value);
+        }
+
+        public void setLongProperty(String key, long value) {
+            properties.put(key, value);
+        }
+
+        public void setIntProperty(String key, int value) {
+            properties.put(key, value);
+        }
+
+        public void setShortProperty(String key, short value) {
+            properties.put(key, value);
+        }
+
+        public void setObjectProperty(String key, Object value) {
+            properties.put(key, value);
+        }
+
+        @Override
+        public <T> T getBodyAs(Class<T> type) throws FilterException {
+            if( type == String.class ) {
+                return type.cast(text);
+            }
+            return null;
+        }
+
+        @Override
+        public Object getProperty(String name) {
+            if( "JMSType".equals(name) ) {
+                return type;
+            }
+            if( "JMSMessageID".equals(name) ) {
+                return messageId;
+            }
+            return properties.get(name);
+        }
+
+        @SuppressWarnings("unchecked")
+        public <T> T getDestination() {
+            return (T)destination;
+        }
+
+        @Override
+        public Object getLocalConnectionId() {
+            return localConnectionId;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/475a8889/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorTest.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorTest.java 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorTest.java
deleted file mode 100755
index bc59301..0000000
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/selector/SelectorTest.java
+++ /dev/null
@@ -1,444 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.jms.selector;
-
-import java.util.HashMap;
-
-import junit.framework.TestCase;
-
-import org.apache.qpid.jms.selector.filter.BooleanExpression;
-import org.apache.qpid.jms.selector.filter.FilterException;
-import org.apache.qpid.jms.selector.filter.Filterable;
-
-@SuppressWarnings("unchecked")
-public class SelectorTest extends TestCase {
-
-    static class MockMessage implements Filterable {
-
-        HashMap<String, Object> properties = new HashMap<String, Object>();
-        private String text;
-        private Object destination;
-        private String messageId;
-        private String type;
-        private Object localConnectionId;
-
-        public void setDestination(Object destination) {
-            this.destination=destination;
-        }
-        public void setJMSMessageID(String messageId) {
-            this.messageId = messageId;
-        }
-        public void setJMSType(String type) {
-            this.type = type;
-        }
-        public void setText(String text) {
-            this.text = text;
-        }
-
-        public void setBooleanProperty(String key, boolean value) {
-            properties.put(key, value);
-        }
-
-        public void setStringProperty(String key, String value) {
-            properties.put(key, value);
-        }
-
-        public void setByteProperty(String key, byte value) {
-            properties.put(key, value);
-        }
-
-        public void setDoubleProperty(String key, double value) {
-            properties.put(key, value);
-        }
-
-        public void setFloatProperty(String key, float value) {
-            properties.put(key, value);
-        }
-
-        public void setLongProperty(String key, long value) {
-            properties.put(key, value);
-        }
-
-        public void setIntProperty(String key, int value) {
-            properties.put(key, value);
-        }
-
-        public void setShortProperty(String key, short value) {
-            properties.put(key, value);
-        }
-
-        public void setObjectProperty(String key, Object value) {
-            properties.put(key, value);
-        }
-
-        @Override
-        public <T> T getBodyAs(Class<T> type) throws FilterException {
-            if( type == String.class ) {
-                return type.cast(text);
-            }
-            return null;
-        }
-
-        @Override
-        public Object getProperty(String name) {
-            if( "JMSType".equals(name) ) {
-                return type;
-            }
-            if( "JMSMessageID".equals(name) ) {
-                return messageId;
-            }
-            return properties.get(name);
-        }
-
-        public <T> T getDestination() {
-            return (T)destination;
-        }
-
-        @Override
-        public Object getLocalConnectionId() {
-            return localConnectionId;
-        }
-    }
-
-    public void testBooleanSelector() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "(trueProp OR falseProp) AND trueProp", true);
-        assertSelector(message, "(trueProp OR falseProp) AND falseProp", 
false);
-    }
-
-    public void testJMSPropertySelectors() throws Exception {
-        MockMessage message = createMessage();
-        message.setJMSType("selector-test");
-        message.setJMSMessageID("id:test:1:1:1:1");
-
-        assertSelector(message, "JMSType = 'selector-test'", true);
-        assertSelector(message, "JMSType = 'crap'", false);
-
-        assertSelector(message, "JMSMessageID = 'id:test:1:1:1:1'", true);
-        assertSelector(message, "JMSMessageID = 'id:not-test:1:1:1:1'", false);
-
-        message = createMessage();
-        message.setJMSType("1001");
-
-        assertSelector(message, "JMSType='1001'", true);
-        assertSelector(message, "JMSType='1001' OR JMSType='1002'", true);
-        assertSelector(message, "JMSType = 'crap'", false);
-    }
-
-    public void testBasicSelectors() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "name = 'James'", true);
-        assertSelector(message, "rank > 100", true);
-        assertSelector(message, "rank >= 123", true);
-        assertSelector(message, "rank >= 124", false);
-    }
-
-    public void testPropertyTypes() throws Exception {
-        MockMessage message = createMessage();
-        assertSelector(message, "byteProp = 123", true);
-        assertSelector(message, "byteProp = 10", false);
-        assertSelector(message, "byteProp2 = 33", true);
-        assertSelector(message, "byteProp2 = 10", false);
-
-        assertSelector(message, "shortProp = 123", true);
-        assertSelector(message, "shortProp = 10", false);
-
-        assertSelector(message, "shortProp = 123", true);
-        assertSelector(message, "shortProp = 10", false);
-
-        assertSelector(message, "intProp = 123", true);
-        assertSelector(message, "intProp = 10", false);
-
-        assertSelector(message, "longProp = 123", true);
-        assertSelector(message, "longProp = 10", false);
-
-        assertSelector(message, "floatProp = 123", true);
-        assertSelector(message, "floatProp = 10", false);
-
-        assertSelector(message, "doubleProp = 123", true);
-        assertSelector(message, "doubleProp = 10", false);
-    }
-
-    public void testAndSelectors() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "name = 'James' and rank < 200", true);
-        assertSelector(message, "name = 'James' and rank > 200", false);
-        assertSelector(message, "name = 'Foo' and rank < 200", false);
-        assertSelector(message, "unknown = 'Foo' and anotherUnknown < 200", 
false);
-    }
-
-    public void testOrSelectors() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "name = 'James' or rank < 200", true);
-        assertSelector(message, "name = 'James' or rank > 200", true);
-        assertSelector(message, "name = 'Foo' or rank < 200", true);
-        assertSelector(message, "name = 'Foo' or rank > 200", false);
-        assertSelector(message, "unknown = 'Foo' or anotherUnknown < 200", 
false);
-    }
-
-    public void testPlus() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "rank + 2 = 125", true);
-        assertSelector(message, "(rank + 2) = 125", true);
-        assertSelector(message, "125 = (rank + 2)", true);
-        assertSelector(message, "rank + version = 125", true);
-        assertSelector(message, "rank + 2 < 124", false);
-        assertSelector(message, "name + '!' = 'James!'", true);
-    }
-
-    public void testMinus() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "rank - 2 = 121", true);
-        assertSelector(message, "rank - version = 121", true);
-        assertSelector(message, "rank - 2 > 122", false);
-    }
-
-    public void testMultiply() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "rank * 2 = 246", true);
-        assertSelector(message, "rank * version = 246", true);
-        assertSelector(message, "rank * 2 < 130", false);
-    }
-
-    public void testDivide() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "rank / version = 61.5", true);
-        assertSelector(message, "rank / 3 > 100.0", false);
-        assertSelector(message, "rank / 3 > 100", false);
-        assertSelector(message, "version / 2 = 1", true);
-    }
-
-    public void testBetween() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "rank between 100 and 150", true);
-        assertSelector(message, "rank between 10 and 120", false);
-    }
-
-    public void testIn() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "name in ('James', 'Bob', 'Gromit')", true);
-        assertSelector(message, "name in ('Bob', 'James', 'Gromit')", true);
-        assertSelector(message, "name in ('Gromit', 'Bob', 'James')", true);
-
-        assertSelector(message, "name in ('Gromit', 'Bob', 'Cheddar')", false);
-        assertSelector(message, "name not in ('Gromit', 'Bob', 'Cheddar')", 
true);
-    }
-
-    public void testIsNull() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "dummy is null", true);
-        assertSelector(message, "dummy is not null", false);
-        assertSelector(message, "name is not null", true);
-        assertSelector(message, "name is null", false);
-    }
-
-    public void testLike() throws Exception {
-        MockMessage message = createMessage();
-        message.setStringProperty("modelClassId", 
"com.whatever.something.foo.bar");
-        message.setStringProperty("modelInstanceId", "170");
-        message.setStringProperty("modelRequestError", "abc");
-        message.setStringProperty("modelCorrelatedClientId", "whatever");
-
-        assertSelector(message, "modelClassId LIKE 'com.whatever.something.%' 
AND modelInstanceId = '170' AND (modelRequestError IS NULL OR 
modelCorrelatedClientId = 'whatever')",
-                       true);
-
-        message.setStringProperty("modelCorrelatedClientId", "shouldFailNow");
-
-        assertSelector(message, "modelClassId LIKE 'com.whatever.something.%' 
AND modelInstanceId = '170' AND (modelRequestError IS NULL OR 
modelCorrelatedClientId = 'whatever')",
-                       false);
-
-        message = createMessage();
-        message.setStringProperty("modelClassId", 
"com.whatever.something.foo.bar");
-        message.setStringProperty("modelInstanceId", "170");
-        message.setStringProperty("modelCorrelatedClientId", "shouldNotMatch");
-
-        assertSelector(message, "modelClassId LIKE 'com.whatever.something.%' 
AND modelInstanceId = '170' AND (modelRequestError IS NULL OR 
modelCorrelatedClientId = 'whatever')",
-                       true);
-    }
-
-    /**
-     * Test cases from Mats Henricson
-     */
-    public void testMatsHenricsonUseCases() throws Exception {
-        MockMessage message = createMessage();
-        assertSelector(message, "SessionserverId=1870414179", false);
-
-        message.setLongProperty("SessionserverId", 1870414179);
-        assertSelector(message, "SessionserverId=1870414179", true);
-
-        message.setLongProperty("SessionserverId", 1234);
-        assertSelector(message, "SessionserverId=1870414179", false);
-
-        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", false);
-
-        message.setStringProperty("Command", "Cheese");
-        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", true);
-
-        message.setStringProperty("Command", "MirrorLobbyRequest");
-        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", false);
-        message.setStringProperty("Command", "MirrorLobbyReply");
-        assertSelector(message, "Command NOT IN ('MirrorLobbyRequest', 
'MirrorLobbyReply')", false);
-    }
-
-    @SuppressWarnings("unused")
-    public void testFloatComparisons() throws Exception {
-        MockMessage message = createMessage();
-
-        // JMS 1.1 Section 3.8.1.1 : Approximate literals use the Java
-        // floating-point literal syntax.
-        // We will use the java variable x to demo valid floating point syntax.
-        double x;
-
-        // test decimals like x.x
-        x = 1.0;
-        x = -1.1;
-        x = 1.0E1;
-        x = 1.1E1;
-        x = -1.1E1;
-        assertSelector(message, "1.0 < 1.1", true);
-        assertSelector(message, "-1.1 < 1.0", true);
-        assertSelector(message, "1.0E1 < 1.1E1", true);
-        assertSelector(message, "-1.1E1 < 1.0E1", true);
-
-        // test decimals like x.
-        x = 1.;
-        x = 1.E1;
-        assertSelector(message, "1. < 1.1", true);
-        assertSelector(message, "-1.1 < 1.", true);
-        assertSelector(message, "1.E1 < 1.1E1", true);
-        assertSelector(message, "-1.1E1 < 1.E1", true);
-
-        // test decimals like .x
-        x = .5;
-        x = -.5;
-        x = .5E1;
-        assertSelector(message, ".1 < .5", true);
-        assertSelector(message, "-.5 < .1", true);
-        assertSelector(message, ".1E1 < .5E1", true);
-        assertSelector(message, "-.5E1 < .1E1", true);
-
-        // test exponents
-        x = 4E10;
-        x = -4E10;
-        x = 5E+10;
-        x = 5E-10;
-        assertSelector(message, "4E10 < 5E10", true);
-        assertSelector(message, "5E8 < 5E10", true);
-        assertSelector(message, "-4E10 < 2E10", true);
-        assertSelector(message, "-5E8 < 2E2", true);
-        assertSelector(message, "4E+10 < 5E+10", true);
-        assertSelector(message, "4E-10 < 5E-10", true);
-    }
-
-    public void testStringQuoteParsing() throws Exception {
-        MockMessage message = createMessage();
-        assertSelector(message, "quote = '''In God We Trust'''", true);
-    }
-
-    public void testLikeComparisons() throws Exception {
-        MockMessage message = createMessage();
-
-        assertSelector(message, "quote LIKE '''In G_d We Trust'''", true);
-        assertSelector(message, "quote LIKE '''In Gd_ We Trust'''", false);
-        assertSelector(message, "quote NOT LIKE '''In G_d We Trust'''", false);
-        assertSelector(message, "quote NOT LIKE '''In Gd_ We Trust'''", true);
-
-        assertSelector(message, "foo LIKE '%oo'", true);
-        assertSelector(message, "foo LIKE '%ar'", false);
-        assertSelector(message, "foo NOT LIKE '%oo'", false);
-        assertSelector(message, "foo NOT LIKE '%ar'", true);
-
-        assertSelector(message, "foo LIKE '!_%' ESCAPE '!'", true);
-        assertSelector(message, "quote LIKE '!_%' ESCAPE '!'", false);
-        assertSelector(message, "foo NOT LIKE '!_%' ESCAPE '!'", false);
-        assertSelector(message, "quote NOT LIKE '!_%' ESCAPE '!'", true);
-
-        assertSelector(message, "punctuation LIKE 
'!#$&()*+,-./:;<=>?@[\\]^`{|}~'", true);
-    }
-
-    public void testInvalidSelector() throws Exception {
-        MockMessage message = createMessage();
-        assertInvalidSelector(message, "3+5");
-        assertInvalidSelector(message, "True AND 3+5");
-        assertInvalidSelector(message, "=TEST 'test'");
-    }
-
-    public void testHyphenatedProperty() throws Exception {
-        MockMessage message = createMessage();
-        message.setStringProperty("hyphenated-prop", "val");
-
-        assertSelector(message, "\"hyphenated-prop\" = 'val'", true);
-        assertSelector(message, "\"hyphenated-prop\" = 'other'", false);
-    }
-
-    protected MockMessage createMessage() {
-        MockMessage message = createMessage("FOO.BAR");
-        message.setJMSType("selector-test");
-        message.setJMSMessageID("connection:1:1:1:1");
-        message.setObjectProperty("name", "James");
-        message.setObjectProperty("location", "London");
-
-        message.setByteProperty("byteProp", (byte)123);
-        message.setByteProperty("byteProp2", (byte)33);
-        message.setShortProperty("shortProp", (short)123);
-        message.setIntProperty("intProp", 123);
-        message.setLongProperty("longProp", 123);
-        message.setFloatProperty("floatProp", 123);
-        message.setDoubleProperty("doubleProp", 123);
-
-        message.setIntProperty("rank", 123);
-        message.setIntProperty("version", 2);
-        message.setStringProperty("quote", "'In God We Trust'");
-        message.setStringProperty("foo", "_foo");
-        message.setStringProperty("punctuation", 
"!#$&()*+,-./:;<=>?@[\\]^`{|}~");
-        message.setBooleanProperty("trueProp", true);
-        message.setBooleanProperty("falseProp", false);
-        return message;
-    }
-
-    protected void assertInvalidSelector(MockMessage message, String text) {
-        try {
-            SelectorParser.parse(text);
-            fail("Created a valid selector");
-        } catch (FilterException e) {
-        }
-    }
-
-    protected void assertSelector(MockMessage message, String text, boolean 
expected) throws FilterException {
-        BooleanExpression selector = SelectorParser.parse(text);
-        assertTrue("Created a valid selector", selector != null);
-        boolean value = selector.matches(message);
-        assertEquals("Selector for: " + text, expected, value);
-    }
-
-    protected MockMessage createMessage(String subject) {
-        MockMessage message = new MockMessage();
-        message.setDestination(subject);
-        return message;
-    }
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to