diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2008-04-16 08:27:37 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2008-04-16 08:27:37 +0000 |
commit | cea42250ec300edbaa4643849017cb046621e53c (patch) | |
tree | f0a0e22bef360cf306dee36b53a70680a9876d3d | |
parent | 1046ac07e293efc782fda27b5bb60c25c52df17d (diff) | |
download | qpid-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.java | 12 | ||||
-rw-r--r-- | java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java | 47 |
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")); |