Author: rhauch
Date: 2009-09-23 14:56:31 -0400 (Wed, 23 Sep 2009)
New Revision: 1254
Modified:
trunk/dna-common/src/main/java/org/jboss/dna/common/text/TokenStream.java
trunk/dna-common/src/test/java/org/jboss/dna/common/text/TokenStreamTest.java
Log:
DNA-IllegalStateException calling TokenStream.canConsume(String str) after consuming all
tokens via canConsume(String[])
Fix to ensure that the TokenStream.canConsume(...) methods that take multiple values or
types properly sets the close state if it reaches the end of the tokens.
Modified: trunk/dna-common/src/main/java/org/jboss/dna/common/text/TokenStream.java
===================================================================
--- trunk/dna-common/src/main/java/org/jboss/dna/common/text/TokenStream.java 2009-09-22
18:27:32 UTC (rev 1253)
+++ trunk/dna-common/src/main/java/org/jboss/dna/common/text/TokenStream.java 2009-09-23
18:56:31 UTC (rev 1254)
@@ -754,6 +754,7 @@
}
this.tokenIterator = iter;
this.currentToken = tokenIterator.hasNext() ? tokenIterator.next() : null;
+ this.completed = this.currentToken == null;
return true;
}
@@ -794,6 +795,7 @@
}
this.tokenIterator = iter;
this.currentToken = tokenIterator.hasNext() ? tokenIterator.next() : null;
+ this.completed = this.currentToken == null;
return true;
}
@@ -834,6 +836,7 @@
}
this.tokenIterator = iter;
this.currentToken = tokenIterator.hasNext() ? tokenIterator.next() : null;
+ this.completed = this.currentToken == null;
return true;
}
Modified: trunk/dna-common/src/test/java/org/jboss/dna/common/text/TokenStreamTest.java
===================================================================
---
trunk/dna-common/src/test/java/org/jboss/dna/common/text/TokenStreamTest.java 2009-09-22
18:27:32 UTC (rev 1253)
+++
trunk/dna-common/src/test/java/org/jboss/dna/common/text/TokenStreamTest.java 2009-09-23
18:56:31 UTC (rev 1254)
@@ -23,8 +23,12 @@
*/
package org.jboss.dna.common.text;
+import java.util.Arrays;
+
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
+
+import org.jboss.dna.common.text.TokenStream.BasicTokenizer;
import org.jboss.dna.common.text.TokenStream.Tokenizer;
import org.junit.Before;
import org.junit.Test;
@@ -354,4 +358,37 @@
assertThat(tokens.canConsume("SELECT", "ALL",
"COLUMNS", "FROM", TokenStream.ANY_VALUE, "TABLE"),
is(true));
assertThat(tokens.hasNext(), is(false));
}
+
+ @Test
+ public void shouldCanConsumeSingleAfterTokensCompleteFromCanConsumeStringList() {
+ makeCaseInsensitive();
+ // consume ALL the tokens using canConsume()
+ tokens.canConsume("SELECT", "ALL", "COLUMNS",
"FROM", "THIS", "TABLE");
+ // try to canConsume() single word
+ assertThat(tokens.canConsume("SELECT"), is(false));
+ assertThat(tokens.canConsume(TokenStream.ANY_VALUE), is(false));
+ assertThat(tokens.canConsume(BasicTokenizer.SYMBOL), is(false));
+ }
+
+ @Test
+ public void shouldCanConsumeStringAfterTokensCompleteFromCanConsumeStringArray() {
+ makeCaseInsensitive();
+ // consume ALL the tokens using canConsume()
+ tokens.canConsume(new String[] {"SELECT", "ALL",
"COLUMNS", "FROM", "THIS", "TABLE"});
+ // try to canConsume() single word
+ assertThat(tokens.canConsume("SELECT"), is(false));
+ assertThat(tokens.canConsume(TokenStream.ANY_VALUE), is(false));
+ assertThat(tokens.canConsume(BasicTokenizer.SYMBOL), is(false));
+ }
+
+ @Test
+ public void shouldCanConsumeStringAfterTokensCompleteFromCanConsumeStringIterator()
{
+ makeCaseInsensitive();
+ // consume ALL the tokens using canConsume()
+ tokens.canConsume(Arrays.asList(new String[] {"SELECT",
"ALL", "COLUMNS", "FROM", "THIS",
"TABLE"}));
+ // try to canConsume() single word
+ assertThat(tokens.canConsume("SELECT"), is(false));
+ assertThat(tokens.canConsume(TokenStream.ANY_VALUE), is(false));
+ assertThat(tokens.canConsume(BasicTokenizer.SYMBOL), is(false));
+ }
}
Show replies by date