Author: rgodfrey
Date: Wed Apr 16 01:27:37 2008
New Revision: 648614

URL: http://svn.apache.org/viewvc?rev=648614&view=rev
Log:
QPID-899 : Bug in AMQShortString on tokenized substrings

Modified:
    
incubator/qpid/branches/M2.1/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
    
incubator/qpid/branches/M2.1/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java

Modified: 
incubator/qpid/branches/M2.1/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java?rev=648614&r1=648613&r2=648614&view=diff
==============================================================================
--- 
incubator/qpid/branches/M2.1/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
 (original)
+++ 
incubator/qpid/branches/M2.1/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
 Wed Apr 16 01:27:37 2008
@@ -90,7 +90,7 @@
 
     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 int toIntValue()
     {
-        int pos = 0;
+        int pos = _offset;
         int val = 0;
 
 
@@ -660,7 +660,10 @@
         {
             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 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)
             {

Modified: 
incubator/qpid/branches/M2.1/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/branches/M2.1/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java?rev=648614&r1=648613&r2=648614&view=diff
==============================================================================
--- 
incubator/qpid/branches/M2.1/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
 (original)
+++ 
incubator/qpid/branches/M2.1/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
 Wed Apr 16 01:27:37 2008
@@ -51,6 +51,53 @@
     }
 
 
+    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"));


Reply via email to