blob: 8f6ef126e1db8888f1f6a3fb7e00918888c5f356 [file] [log] [blame]
/*
* Copyright 2009 Red Hat, Inc.
* Red Hat 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.objectweb.jtests.jms.conform.selector;
import javax.jms.InvalidSelectorException;
import javax.jms.JMSException;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.objectweb.jtests.jms.framework.PTPTestCase;
/**
* Test the syntax of of message selector of JMS
*
* @author Jeff Mesnil (jmesnil@gmail.com)
* @version $Id: SelectorSyntaxTest.java,v 1.1 2007/03/29 04:28:35 starksm Exp $
*/
public class SelectorSyntaxTest extends PTPTestCase
{
/**
* Test that identifiers that start with a valid Java identifier start character are valid.
* A valid identifier means that the method <code>Character.isJavaIdentifierStart</code> returns
* <code>true</code> for this identifier first character.
*
* @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.html#isJavaIdentifierStart(char)">Character.isJavaIdentifierStart(char)</a>
*/
public void testValidIdentifiersStart()
{
String identifier = null;
try
{
identifier = "_correct";
Assert.assertTrue(identifier + " starts with an invalid Java identifier start character",
Character.isJavaIdentifierStart(identifier.charAt(0)));
receiver = receiverSession.createReceiver(receiverQueue, identifier + " IS NULL");
identifier = "$correct";
Assert.assertTrue(identifier + " starts with an invalid Java identifier start character",
Character.isJavaIdentifierStart(identifier.charAt(0)));
receiver = receiverSession.createReceiver(receiverQueue, identifier + " IS NULL");
}
catch (JMSException e)
{
Assert.fail(identifier + " is a correct identifier. \n" + e);
}
}
/**
* Test that identifiers that start with an invalid Java identifier start character are invalid.
*
* @see #testValidIdentifiersStart()
*/
public void testInvalidIdentifiersStart()
{
String identifier = null;
try
{
identifier = "1uncorrect";
Assert.assertTrue(identifier + " starts with an invalid Java identifier start character",
!Character.isJavaIdentifierStart(identifier.charAt(0)));
receiver = receiverSession.createReceiver(receiverQueue, identifier + " IS NULL");
Assert.fail(identifier + " starts with an invalid Java identifier start character");
}
catch (JMSException e)
{
}
try
{
identifier = "%uncorrect";
Assert.assertTrue(identifier + " starts with an invalid Java identifier start character",
!Character.isJavaIdentifierStart(identifier.charAt(0)));
receiver = receiverSession.createReceiver(receiverQueue, identifier + " IS NULL");
Assert.fail(identifier + " starts with an invalid Java identifier start character");
}
catch (JMSException e)
{
}
}
/**
* Test that message selector can be an empty string.
*/
public void testEmptyStringAsSelector()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that identifiers can't be <code>NULL</code>.
*/
public void testIdentifierNULL()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "NULL = ZERO");
Assert.fail("NULL is not a valid identifier");
}
catch (InvalidSelectorException e)
{
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test that identifiers can't be <code>TRUE</code>.
*/
public void testIdentifierTRUE()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "TRUE > 0");
Assert.fail("TRUE is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>FALSE</code>.
*/
public void testIdentifierFALSE()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "FALSE > 0");
Assert.fail("FALSE is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>NOT</code>.
*/
public void testIdentifierNOT()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "NOT > 0");
Assert.fail("NOT is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>AND</code>.
*/
public void testIdentifierAND()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "AND > 0");
Assert.fail("AND is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>OR</code>.
*/
public void testIdentifierOR()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "OR > 0");
Assert.fail("OR is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>BETWEEN</code>.
*/
public void testIdentifierBETWEEN()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "BETWEEN > 0");
Assert.fail("BETWEEN is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>LIKE</code>.
*/
public void testIdentifierLIKE()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "LIKE > 0");
Assert.fail("LIKE is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>IN</code>.
*/
public void testIdentifierIN()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "IN > 0");
Assert.fail("IN is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>IS</code>.
*/
public void testIdentifierIS()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "IS > 0");
Assert.fail("IS is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test that identifiers can't be <code>ESCAPE</code>.
*/
public void testIdentifierESCAPE()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "ESCAPE > 0");
Assert.fail("ESCAPE is not a valid identifier");
}
catch (JMSException e)
{
}
}
/**
* Test syntax of "<em>identifier</em> IS [NOT] NULL"
*/
public void testNull()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "prop_name IS NULL");
receiver = receiverSession.createReceiver(receiverQueue, "prop_name IS NOT NULL");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test syntax of "<em>identifier</em> [NOT] LIKE <em>pattern-value</em> [ESCAPE <em>escape-character</em>]"
*/
public void testLike()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "phone LIKE '12%3'");
receiver = receiverSession.createReceiver(receiverQueue, "word LIKE 'l_se'");
receiver = receiverSession.createReceiver(receiverQueue, "underscored LIKE '\\_%' ESCAPE '\\'");
receiver = receiverSession.createReceiver(receiverQueue, "phone NOT LIKE '12%3'");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test syntax of "<em>identifier</em> [NOT] IN (<em>string-literal1</em>, <em>string-literal2</em>,...)"
*/
public void testIn()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "Country IN ('UK', 'US', 'France')");
receiver = receiverSession.createReceiver(receiverQueue, "Country NOT IN ('UK', 'US', 'France')");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test syntax of "<em>arithmetic-expr1</em> [NOT] BETWEEN <em>arithmetic-expr2</em> and <em>arithmetic-expr3</em>"
*/
public void testBetween()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "age BETWEEN 15 and 19");
receiver = receiverSession.createReceiver(receiverQueue, "age NOT BETWEEN 15 and 19");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test diffent syntax for approximate numeric literal (+6.2, -95.7, 7.)
*/
public void testApproximateNumericLiteral()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "average = +6.2");
receiver = receiverSession.createReceiver(receiverQueue, "average = -95.7");
receiver = receiverSession.createReceiver(receiverQueue, "average = 7.");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test diffent syntax for exact numeric literal (+62, -957, 57)
*/
public void testExactNumericLiteral()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "average = +62");
receiver = receiverSession.createReceiver(receiverQueue, "max = -957");
receiver = receiverSession.createReceiver(receiverQueue, "max = 57");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test diffent syntax for zero as an exact or an approximate numeric literal (0, 0.0, 0.)
*/
public void testZero()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "max = 0");
receiver = receiverSession.createReceiver(receiverQueue, "max = 0.0");
receiver = receiverSession.createReceiver(receiverQueue, "max = 0.");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Test diffent syntax for string literal ('literal' and 'literal''s')
*/
public void testString()
{
try
{
receiver = receiverSession.createReceiver(receiverQueue, "string = 'literal'");
receiver = receiverSession.createReceiver(receiverQueue, "string = 'literal''s'");
}
catch (JMSException e)
{
fail(e);
}
}
/**
* Method to use this class in a Test suite
*/
public static Test suite()
{
return new TestSuite(SelectorSyntaxTest.class);
}
public SelectorSyntaxTest(final String name)
{
super(name);
}
}