Repository: qpid-jms
Updated Branches:
  refs/heads/master 466975eba -> 6045f0aee


Finish covering JMS message property handling tests pulling in old tests
from previous client work. 

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

Branch: refs/heads/master
Commit: 6045f0aeea54d9ddece50d1666e9126db043e138
Parents: 466975e
Author: Timothy Bish <tabish...@gmail.com>
Authored: Fri Oct 10 12:28:21 2014 -0400
Committer: Timothy Bish <tabish...@gmail.com>
Committed: Fri Oct 10 12:28:21 2014 -0400

----------------------------------------------------------------------
 .../apache/qpid/jms/message/JmsMessageTest.java | 277 +++++++++++++++++++
 1 file changed, 277 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/6045f0ae/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
index 42d7b62..8c17dfc 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
@@ -1057,4 +1057,281 @@ public class JmsMessageTest {
         } catch (JMSException e) {
         }
     }
+
+    //---- Test that message property getters throw expected exceptions 
------//
+
+    /**
+     * When a property is not set, the behaviour of JMS specifies that it is 
equivalent to a null value,
+     * and the primitive property accessors should behave in the same fashion 
as <primitive>.valueOf(String).
+     * Test that this is the case.
+     */
+    @Test
+    public void testGetMissingPrimitivePropertyResultsInExpectedBehaviour() 
throws Exception {
+        String propertyName = "does_not_exist";
+        JmsMessage testMessage = factory.createMessage();
+
+        //expect false from Boolean.valueOf(null).
+        assertFalse(testMessage.getBooleanProperty(propertyName));
+
+        //expect an NFE from the primitive integral <type>.valueOf(null) 
conversions
+        assertGetMissingPropertyThrowsNumberFormatException(testMessage, 
propertyName, Byte.class);
+        assertGetMissingPropertyThrowsNumberFormatException(testMessage, 
propertyName, Short.class);
+        assertGetMissingPropertyThrowsNumberFormatException(testMessage, 
propertyName, Integer.class);
+        assertGetMissingPropertyThrowsNumberFormatException(testMessage, 
propertyName, Long.class);
+
+        // expect an NPE from the primitive floating point .valueOf(null)
+        // conversions
+        try {
+            testMessage.getFloatProperty(propertyName);
+            fail("expected NPE from Float.valueOf(null) was not thrown");
+        } catch (NullPointerException npe) {
+        }
+
+        try {
+            testMessage.getDoubleProperty(propertyName);
+            fail("expected NPE from Double.valueOf(null) was not thrown");
+        } catch (NullPointerException npe) {
+        }
+    }
+
+    //---------- Test Message Properties enforce compliant names 
-------------//
+
+    /**
+     * Property 'identifiers' (i.e. names) must begin with a letter for which
+     * {@link Character#isJavaLetter(char)} is true, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * beginning with a non-letter character.
+     */
+    @Test
+    public void testSetPropertyWithNonLetterAsFirstCharacterThrowsIAE() throws 
Exception {
+        String propertyName = "1name";
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty(propertyName, "value");
+            fail("expected rejection of identifier starting with non-letter 
character");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) must continue with a letter or digit
+     * for which {@link Character#isJavaLetterOrDigit(char)} is true, as
+     * described in {@link javax.jms.Message}. Verify an IAE is thrown if
+     * setting a property continuing with a non-letter-or-digit character.
+     */
+    @Test
+    public void testSetPropertyWithNonLetterOrDigitCharacterThrowsIAE() throws 
Exception {
+        String propertyName = "name-invalid";
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty(propertyName, "value");
+            fail("expected rejection of identifier starting with non-letter 
character");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NULL, TRUE, or
+     * FALSE, as described in {@link javax.jms.Message}. Verify an IAE is 
thrown
+     * if setting a property with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameNULL() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("NULL", "value");
+            fail("expected rejection of identifier named NULL");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NULL, TRUE, or
+     * FALSE, as described in {@link javax.jms.Message}. Verify an IAE is 
thrown
+     * if setting a property with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameTRUE() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("TRUE", "value");
+            fail("expected rejection of identifier named TRUE");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NULL, TRUE, or
+     * FALSE, as described in {@link javax.jms.Message}. Verify an IAE is 
thrown
+     * if setting a property with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameFALSE() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("FALSE", "value");
+            fail("expected rejection of identifier named FALSE");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameNOT() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("NOT", "value");
+            fail("expected rejection of identifier named NOT");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameAND() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("AND", "value");
+            fail("expected rejection of identifier named AND");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameOR() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("OR", "value");
+            fail("expected rejection of identifier named OR");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameBETWEEN() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("BETWEEN", "value");
+            fail("expected rejection of identifier named BETWEEN");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameLIKE() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("LIKE", "value");
+            fail("expected rejection of identifier named LIKE");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameIN() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("IN", "value");
+            fail("expected rejection of identifier named IN");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameIS() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("IS", "value");
+            fail("expected rejection of identifier named IS");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    /**
+     * Property 'identifiers' (i.e. names) are not allowed to be NOT, AND, OR,
+     * BETWEEN, LIKE, IN, IS, or ESCAPE, as described in
+     * {@link javax.jms.Message}. Verify an IAE is thrown if setting a property
+     * with these values.
+     */
+    @Test
+    public void testSetPropertyWithNameESCAPE() throws Exception {
+        JmsMessage testMessage = factory.createMessage();
+        try {
+            testMessage.setObjectProperty("ESCAPE", "value");
+            fail("expected rejection of identifier named ESCAPE");
+        } catch (IllegalArgumentException iae) {
+        }
+    }
+
+    //--------- Test support method 
------------------------------------------//
+
+    private void 
assertGetMissingPropertyThrowsNumberFormatException(JmsMessage testMessage, 
String propertyName, Class<?> clazz) throws JMSException {
+        try {
+            getMessagePropertyUsingTypeMethod(testMessage, propertyName, 
clazz);
+            fail("expected exception to be thrown");
+        } catch (NumberFormatException nfe) {
+        }
+    }
+
+    private Object getMessagePropertyUsingTypeMethod(JmsMessage testMessage, 
String propertyName, Class<?> clazz) throws JMSException {
+        if (clazz == Boolean.class) {
+            return testMessage.getBooleanProperty(propertyName);
+        } else if (clazz == Byte.class) {
+            return testMessage.getByteProperty(propertyName);
+        } else if (clazz == Short.class) {
+            return testMessage.getShortProperty(propertyName);
+        } else if (clazz == Integer.class) {
+            return testMessage.getIntProperty(propertyName);
+        } else if (clazz == Long.class) {
+            return testMessage.getLongProperty(propertyName);
+        } else if (clazz == Float.class) {
+            return testMessage.getFloatProperty(propertyName);
+        } else if (clazz == Double.class) {
+            return testMessage.getDoubleProperty(propertyName);
+        } else if (clazz == String.class) {
+            return testMessage.getStringProperty(propertyName);
+        } else {
+            throw new RuntimeException("Unexpected property type class");
+        }
+    }
 }


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

Reply via email to