summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2008-04-16 08:27:37 +0000
committerRobert Godfrey <rgodfrey@apache.org>2008-04-16 08:27:37 +0000
commitcea42250ec300edbaa4643849017cb046621e53c (patch)
treef0a0e22bef360cf306dee36b53a70680a9876d3d
parent1046ac07e293efc782fda27b5bb60c25c52df17d (diff)
downloadqpid-python-cea42250ec300edbaa4643849017cb046621e53c.tar.gz
QPID-899 : Bug in AMQShortString on tokenized substrings
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2.1@648614 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java12
-rw-r--r--java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java47
2 files changed, 55 insertions, 4 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
index 665cbf7a84..0d78aca729 100644
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
+++ b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
@@ -90,7 +90,7 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt
private AMQShortString substring(final int from, final int to)
{
- return new AMQShortString(_data, from, to);
+ return new AMQShortString(_data, from+_offset, to+_offset);
}
@@ -651,7 +651,7 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt
public int toIntValue()
{
- int pos = 0;
+ int pos = _offset;
int val = 0;
@@ -660,7 +660,10 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt
{
pos++;
}
- while(pos < _length)
+
+ final int end = _length + _offset;
+
+ while(pos < end)
{
int digit = (int) (_data[pos++] - ZERO);
if((digit < 0) || (digit > 9))
@@ -679,7 +682,8 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt
public boolean contains(final byte b)
{
- for(int i = 0; i < _length; i++)
+ final int end = _length + _offset;
+ for(int i = _offset; i < end; i++)
{
if(_data[i] == b)
{
diff --git a/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java b/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
index 90584183ee..92e7ce0a80 100644
--- a/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
+++ b/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
@@ -51,6 +51,53 @@ public class AMQShortStringTest extends TestCase
}
+ public void testTokenize()
+ {
+ AMQShortString dotSeparatedWords = new AMQShortString("this.is.a.test.with.1.2.3.-numbers-and-then--dashes-");
+ AMQShortStringTokenizer dotTokenizer = dotSeparatedWords.tokenize((byte) '.');
+
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(new AMQShortString("this"),(dotTokenizer.nextToken()));
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(new AMQShortString("is"),(dotTokenizer.nextToken()));
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(new AMQShortString("a"),(dotTokenizer.nextToken()));
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(new AMQShortString("test"),(dotTokenizer.nextToken()));
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(new AMQShortString("with"),(dotTokenizer.nextToken()));
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(dotTokenizer.nextToken().toIntValue() , 1);
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(dotTokenizer.nextToken().toIntValue() , 2);
+ assertTrue(dotTokenizer.hasMoreTokens());
+ assertEquals(dotTokenizer.nextToken().toIntValue() , 3);
+ assertTrue(dotTokenizer.hasMoreTokens());
+ AMQShortString dashString = dotTokenizer.nextToken();
+ assertEquals(new AMQShortString("-numbers-and-then--dashes-"),(dashString));
+
+ AMQShortStringTokenizer dashTokenizer = dashString.tokenize((byte)'-');
+ assertEquals(dashTokenizer.countTokens(), 7);
+
+ AMQShortString[] expectedResults = new AMQShortString[]
+ { AMQShortString.EMPTY_STRING,
+ new AMQShortString("numbers"),
+ new AMQShortString("and"),
+ new AMQShortString("then"),
+ AMQShortString.EMPTY_STRING,
+ new AMQShortString("dashes"),
+ AMQShortString.EMPTY_STRING };
+
+ for(int i = 0; i < 7; i++)
+ {
+ assertTrue(dashTokenizer.hasMoreTokens());
+ assertEquals(dashTokenizer.nextToken(), expectedResults[i]);
+ }
+
+ assertFalse(dotTokenizer.hasMoreTokens());
+ }
+
+
public void testEquals()
{
assertEquals(GOODBYE, new AMQShortString("Goodbye"));