Repository: olingo-odata4 Updated Branches: refs/heads/OLINGO-834_Filter_Parser 208f26c74 -> 2f3bc2866
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/2f3bc286/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/UriTokenizerTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/UriTokenizerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/UriTokenizerTest.java index 177a396..b5614ad 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/UriTokenizerTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/parser/UriTokenizerTest.java @@ -22,6 +22,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.util.Locale; + import org.apache.olingo.server.core.uri.parser.UriTokenizer.TokenKind; import org.junit.Test; @@ -44,6 +46,8 @@ public class UriTokenizerTest { assertTrue(new UriTokenizer("$value").next(TokenKind.VALUE)); assertTrue(new UriTokenizer("$count").next(TokenKind.COUNT)); assertTrue(new UriTokenizer("$crossjoin").next(TokenKind.CROSSJOIN)); + assertTrue(new UriTokenizer("$root").next(TokenKind.ROOT)); + assertTrue(new UriTokenizer("$it").next(TokenKind.IT)); assertTrue(new UriTokenizer("null").next(TokenKind.NULL)); wrongToken(TokenKind.REF, "$ref", 'x'); @@ -51,19 +55,19 @@ public class UriTokenizerTest { @Test public void sequence() { - final UriTokenizer tokenizer = new UriTokenizer("(A=1,B=2);.*/+"); + final UriTokenizer tokenizer = new UriTokenizer("(A=1,B=2);.*/+-"); assertTrue(tokenizer.next(TokenKind.OPEN)); assertFalse(tokenizer.next(TokenKind.OPEN)); assertTrue(tokenizer.next(TokenKind.ODataIdentifier)); assertEquals("A", tokenizer.getText()); assertTrue(tokenizer.next(TokenKind.EQ)); - assertTrue(tokenizer.next(TokenKind.PrimitiveIntegerValue)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); assertEquals("1", tokenizer.getText()); assertTrue(tokenizer.next(TokenKind.COMMA)); assertTrue(tokenizer.next(TokenKind.ODataIdentifier)); assertEquals("B", tokenizer.getText()); assertTrue(tokenizer.next(TokenKind.EQ)); - assertTrue(tokenizer.next(TokenKind.PrimitiveIntegerValue)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); assertEquals("2", tokenizer.getText()); assertFalse(tokenizer.next(TokenKind.EOF)); assertTrue(tokenizer.next(TokenKind.CLOSE)); @@ -72,6 +76,7 @@ public class UriTokenizerTest { assertTrue(tokenizer.next(TokenKind.STAR)); assertTrue(tokenizer.next(TokenKind.SLASH)); assertTrue(tokenizer.next(TokenKind.PLUS)); + assertTrue(tokenizer.next(TokenKind.MINUS)); assertTrue(tokenizer.next(TokenKind.EOF)); } @@ -107,7 +112,7 @@ public class UriTokenizerTest { final UriTokenizer tokenizer = new UriTokenizer("multi.part.namespace.name.1"); assertTrue(tokenizer.next(TokenKind.QualifiedName)); assertTrue(tokenizer.next(TokenKind.DOT)); - assertTrue(tokenizer.next(TokenKind.PrimitiveIntegerValue)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); assertTrue(tokenizer.next(TokenKind.EOF)); assertFalse(new UriTokenizer("name").next(TokenKind.QualifiedName)); @@ -127,174 +132,174 @@ public class UriTokenizerTest { @Test public void booleanValue() { - assertTrue(new UriTokenizer("true").next(TokenKind.PrimitiveBooleanValue)); - assertTrue(new UriTokenizer("tRuE").next(TokenKind.PrimitiveBooleanValue)); - assertTrue(new UriTokenizer("false").next(TokenKind.PrimitiveBooleanValue)); - assertTrue(new UriTokenizer("False").next(TokenKind.PrimitiveBooleanValue)); + assertTrue(new UriTokenizer("true").next(TokenKind.BooleanValue)); + assertTrue(new UriTokenizer("tRuE").next(TokenKind.BooleanValue)); + assertTrue(new UriTokenizer("false").next(TokenKind.BooleanValue)); + assertTrue(new UriTokenizer("False").next(TokenKind.BooleanValue)); - wrongToken(TokenKind.PrimitiveBooleanValue, "true", 'x'); + wrongToken(TokenKind.BooleanValue, "true", 'x'); } @Test public void string() { - assertTrue(new UriTokenizer("'ABC'").next(TokenKind.PrimitiveStringValue)); - assertTrue(new UriTokenizer("'â¬\uFDFC'").next(TokenKind.PrimitiveStringValue)); + assertTrue(new UriTokenizer("'ABC'").next(TokenKind.StringValue)); + assertTrue(new UriTokenizer("'â¬\uFDFC'").next(TokenKind.StringValue)); assertTrue(new UriTokenizer('\'' + String.valueOf(Character.toChars(0x1F603)) + '\'') - .next(TokenKind.PrimitiveStringValue)); + .next(TokenKind.StringValue)); final UriTokenizer tokenizer = new UriTokenizer("'AB''''C'''D"); - assertTrue(tokenizer.next(TokenKind.PrimitiveStringValue)); + assertTrue(tokenizer.next(TokenKind.StringValue)); assertEquals("'AB''''C'''", tokenizer.getText()); assertTrue(tokenizer.next(TokenKind.ODataIdentifier)); assertEquals("D", tokenizer.getText()); - assertFalse(new UriTokenizer("A").next(TokenKind.PrimitiveStringValue)); - assertFalse(new UriTokenizer("'A").next(TokenKind.PrimitiveStringValue)); + assertFalse(new UriTokenizer("A").next(TokenKind.StringValue)); + assertFalse(new UriTokenizer("'A").next(TokenKind.StringValue)); } @Test public void integer() { - assertTrue(new UriTokenizer("1").next(TokenKind.PrimitiveIntegerValue)); - assertTrue(new UriTokenizer("1.").next(TokenKind.PrimitiveIntegerValue)); - assertFalse(new UriTokenizer(".1").next(TokenKind.PrimitiveIntegerValue)); - assertTrue(new UriTokenizer("-1").next(TokenKind.PrimitiveIntegerValue)); - assertTrue(new UriTokenizer("1234567890").next(TokenKind.PrimitiveIntegerValue)); + assertTrue(new UriTokenizer("1").next(TokenKind.IntegerValue)); + assertTrue(new UriTokenizer("1.").next(TokenKind.IntegerValue)); + assertFalse(new UriTokenizer(".1").next(TokenKind.IntegerValue)); + assertTrue(new UriTokenizer("-1").next(TokenKind.IntegerValue)); + assertTrue(new UriTokenizer("1234567890").next(TokenKind.IntegerValue)); } @Test public void guid() { - assertTrue(new UriTokenizer("12345678-abcd-ef12-1234-567890ABCDEF").next(TokenKind.PrimitiveGuidValue)); - wrongToken(TokenKind.PrimitiveGuidValue, "12345678-1234-1234-1234-123456789ABC", 'G'); + assertTrue(new UriTokenizer("12345678-abcd-ef12-1234-567890ABCDEF").next(TokenKind.GuidValue)); + wrongToken(TokenKind.GuidValue, "12345678-1234-1234-1234-123456789ABC", 'G'); } @Test public void date() { - assertTrue(new UriTokenizer("12345-12-25").next(TokenKind.PrimitiveDateValue)); - assertTrue(new UriTokenizer("-0001-12-24").next(TokenKind.PrimitiveDateValue)); - assertFalse(new UriTokenizer("1234-13-01").next(TokenKind.PrimitiveDateValue)); - assertFalse(new UriTokenizer("1234-12-32").next(TokenKind.PrimitiveDateValue)); - assertFalse(new UriTokenizer("123-01-01").next(TokenKind.PrimitiveDateValue)); - assertFalse(new UriTokenizer("1234-00-01").next(TokenKind.PrimitiveDateValue)); - assertFalse(new UriTokenizer("1234-01-00").next(TokenKind.PrimitiveDateValue)); - wrongToken(TokenKind.PrimitiveDateValue, "2000-12-29", 'A'); - wrongToken(TokenKind.PrimitiveDateValue, "0001-01-01", 'A'); - wrongToken(TokenKind.PrimitiveDateValue, "-12345-01-31", 'A'); + assertTrue(new UriTokenizer("12345-12-25").next(TokenKind.DateValue)); + assertTrue(new UriTokenizer("-0001-12-24").next(TokenKind.DateValue)); + assertFalse(new UriTokenizer("1234-13-01").next(TokenKind.DateValue)); + assertFalse(new UriTokenizer("1234-12-32").next(TokenKind.DateValue)); + assertFalse(new UriTokenizer("123-01-01").next(TokenKind.DateValue)); + assertFalse(new UriTokenizer("1234-00-01").next(TokenKind.DateValue)); + assertFalse(new UriTokenizer("1234-01-00").next(TokenKind.DateValue)); + wrongToken(TokenKind.DateValue, "2000-12-29", 'A'); + wrongToken(TokenKind.DateValue, "0001-01-01", 'A'); + wrongToken(TokenKind.DateValue, "-12345-01-31", 'A'); } @Test public void dateTimeOffset() { - assertTrue(new UriTokenizer("1234-12-25T11:12:13.456Z").next(TokenKind.PrimitiveDateTimeOffsetValue)); - assertTrue(new UriTokenizer("-1234-12-25t01:12z").next(TokenKind.PrimitiveDateTimeOffsetValue)); - assertTrue(new UriTokenizer("-1234-12-25T21:22:23+01:00").next(TokenKind.PrimitiveDateTimeOffsetValue)); - assertTrue(new UriTokenizer("1234-12-25T11:12:13-00:30").next(TokenKind.PrimitiveDateTimeOffsetValue)); - assertFalse(new UriTokenizer("1234-10-01").next(TokenKind.PrimitiveDateTimeOffsetValue)); - wrongToken(TokenKind.PrimitiveDateTimeOffsetValue, "-1234-12-25T11:12:13.456+01:00", 'P'); + assertTrue(new UriTokenizer("1234-12-25T11:12:13.456Z").next(TokenKind.DateTimeOffsetValue)); + assertTrue(new UriTokenizer("-1234-12-25t01:12z").next(TokenKind.DateTimeOffsetValue)); + assertTrue(new UriTokenizer("-1234-12-25T21:22:23+01:00").next(TokenKind.DateTimeOffsetValue)); + assertTrue(new UriTokenizer("1234-12-25T11:12:13-00:30").next(TokenKind.DateTimeOffsetValue)); + assertFalse(new UriTokenizer("1234-10-01").next(TokenKind.DateTimeOffsetValue)); + wrongToken(TokenKind.DateTimeOffsetValue, "-1234-12-25T11:12:13.456+01:00", 'P'); } @Test public void timeOfDay() { - assertTrue(new UriTokenizer("11:12:13").next(TokenKind.PrimitiveTimeOfDayValue)); - assertTrue(new UriTokenizer("11:12:13.456").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("24:00:00").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("01:60:00").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("01:00:60").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("01:00:00.").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("0:02:03").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("01:0:03").next(TokenKind.PrimitiveTimeOfDayValue)); - assertFalse(new UriTokenizer("01:02:0").next(TokenKind.PrimitiveTimeOfDayValue)); - wrongToken(TokenKind.PrimitiveTimeOfDayValue, "11:12", '-'); + assertTrue(new UriTokenizer("11:12:13").next(TokenKind.TimeOfDayValue)); + assertTrue(new UriTokenizer("11:12:13.456").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("24:00:00").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("01:60:00").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("01:00:60").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("01:00:00.").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("0:02:03").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("01:0:03").next(TokenKind.TimeOfDayValue)); + assertFalse(new UriTokenizer("01:02:0").next(TokenKind.TimeOfDayValue)); + wrongToken(TokenKind.TimeOfDayValue, "11:12", '-'); } @Test public void decimal() { - assertTrue(new UriTokenizer("1.2").next(TokenKind.PrimitiveDecimalValue)); - assertFalse(new UriTokenizer(".1").next(TokenKind.PrimitiveDecimalValue)); - assertTrue(new UriTokenizer("-12.34").next(TokenKind.PrimitiveDecimalValue)); - assertTrue(new UriTokenizer("1234567890.0123456789").next(TokenKind.PrimitiveDecimalValue)); - assertFalse(new UriTokenizer("0,1").next(TokenKind.PrimitiveDecimalValue)); - assertFalse(new UriTokenizer("0..1").next(TokenKind.PrimitiveDecimalValue)); + assertTrue(new UriTokenizer("1.2").next(TokenKind.DecimalValue)); + assertFalse(new UriTokenizer(".1").next(TokenKind.DecimalValue)); + assertTrue(new UriTokenizer("-12.34").next(TokenKind.DecimalValue)); + assertTrue(new UriTokenizer("1234567890.0123456789").next(TokenKind.DecimalValue)); + assertFalse(new UriTokenizer("0,1").next(TokenKind.DecimalValue)); + assertFalse(new UriTokenizer("0..1").next(TokenKind.DecimalValue)); } @Test public void doubleValue() { - assertTrue(new UriTokenizer("NaN").next(TokenKind.PrimitiveDoubleValue)); - assertTrue(new UriTokenizer("-INF").next(TokenKind.PrimitiveDoubleValue)); - assertTrue(new UriTokenizer("INF").next(TokenKind.PrimitiveDoubleValue)); - assertFalse(new UriTokenizer("inf").next(TokenKind.PrimitiveDoubleValue)); - assertTrue(new UriTokenizer("1.2E3").next(TokenKind.PrimitiveDoubleValue)); - assertTrue(new UriTokenizer("-12.34e-05").next(TokenKind.PrimitiveDoubleValue)); - assertTrue(new UriTokenizer("1E2").next(TokenKind.PrimitiveDoubleValue)); - assertFalse(new UriTokenizer("1.E2").next(TokenKind.PrimitiveDoubleValue)); - wrongToken(TokenKind.PrimitiveDoubleValue, "-12.34E+5", 'i'); + assertTrue(new UriTokenizer("NaN").next(TokenKind.DoubleValue)); + assertTrue(new UriTokenizer("-INF").next(TokenKind.DoubleValue)); + assertTrue(new UriTokenizer("INF").next(TokenKind.DoubleValue)); + assertFalse(new UriTokenizer("inf").next(TokenKind.DoubleValue)); + assertTrue(new UriTokenizer("1.2E3").next(TokenKind.DoubleValue)); + assertTrue(new UriTokenizer("-12.34e-05").next(TokenKind.DoubleValue)); + assertTrue(new UriTokenizer("1E2").next(TokenKind.DoubleValue)); + assertFalse(new UriTokenizer("1.E2").next(TokenKind.DoubleValue)); + wrongToken(TokenKind.DoubleValue, "-12.34E+5", 'i'); } @Test public void duration() { - assertTrue(new UriTokenizer("duration'P'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("DURATION'P1D'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("duration'PT'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("duration'PT1H'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("duration'pt1M'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("duration'PT1S'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("duration'PT1.2s'").next(TokenKind.PrimitiveDurationValue)); - assertTrue(new UriTokenizer("duration'-p1dt2h3m4.5s'").next(TokenKind.PrimitiveDurationValue)); - assertFalse(new UriTokenizer("-p1dt2h3m4.5s").next(TokenKind.PrimitiveDurationValue)); - assertFalse(new UriTokenizer("duration'-p1dt2h3m4.5s").next(TokenKind.PrimitiveDurationValue)); - assertFalse(new UriTokenizer("duration'2h3m4s'").next(TokenKind.PrimitiveDurationValue)); - wrongToken(TokenKind.PrimitiveDurationValue, "duration'P1DT2H3M4.5S'", ':'); + assertTrue(new UriTokenizer("duration'P'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("DURATION'P1D'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("duration'PT'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("duration'PT1H'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("duration'pt1M'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("duration'PT1S'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("duration'PT1.2s'").next(TokenKind.DurationValue)); + assertTrue(new UriTokenizer("duration'-p1dt2h3m4.5s'").next(TokenKind.DurationValue)); + assertFalse(new UriTokenizer("-p1dt2h3m4.5s").next(TokenKind.DurationValue)); + assertFalse(new UriTokenizer("duration'-p1dt2h3m4.5s").next(TokenKind.DurationValue)); + assertFalse(new UriTokenizer("duration'2h3m4s'").next(TokenKind.DurationValue)); + wrongToken(TokenKind.DurationValue, "duration'P1DT2H3M4.5S'", ':'); } @Test public void binary() { - assertTrue(new UriTokenizer("binary''").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("Binary'bm93'").next(TokenKind.PrimitiveBinaryValue)); + assertTrue(new UriTokenizer("binary''").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("Binary'bm93'").next(TokenKind.BinaryValue)); // all cases with three base64 characters (and one fill character) at the end - assertTrue(new UriTokenizer("binary'QUA='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUE='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUI='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUM='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUQ='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUU='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUY='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUc='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUg='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUk='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUo='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUs='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QUw='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QU0='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QU4='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'QU8='").next(TokenKind.PrimitiveBinaryValue)); - assertFalse(new UriTokenizer("binary'QUB='").next(TokenKind.PrimitiveBinaryValue)); + assertTrue(new UriTokenizer("binary'QUA='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUE='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUI='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUM='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUQ='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUU='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUY='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUc='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUg='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUk='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUo='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUs='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QUw='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QU0='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QU4='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'QU8='").next(TokenKind.BinaryValue)); + assertFalse(new UriTokenizer("binary'QUB='").next(TokenKind.BinaryValue)); // all cases with two base64 characters (and two fill characters) at the end - assertTrue(new UriTokenizer("BINARY'VGVzdA=='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'U-RnZQ=='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'Yg=='").next(TokenKind.PrimitiveBinaryValue)); - assertTrue(new UriTokenizer("binary'Yw=='").next(TokenKind.PrimitiveBinaryValue)); + assertTrue(new UriTokenizer("BINARY'VGVzdA=='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'U-RnZQ=='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'Yg=='").next(TokenKind.BinaryValue)); + assertTrue(new UriTokenizer("binary'Yw=='").next(TokenKind.BinaryValue)); // without optional fill character - assertTrue(new UriTokenizer("binary'T0RhdGE'").next(TokenKind.PrimitiveBinaryValue)); + assertTrue(new UriTokenizer("binary'T0RhdGE'").next(TokenKind.BinaryValue)); // special character '_' (the other, '-', already has been used above) - assertTrue(new UriTokenizer("binary'V_ZydGVy'").next(TokenKind.PrimitiveBinaryValue)); + assertTrue(new UriTokenizer("binary'V_ZydGVy'").next(TokenKind.BinaryValue)); - wrongToken(TokenKind.PrimitiveBinaryValue, "binary'VGVzdA=='", '+'); + wrongToken(TokenKind.BinaryValue, "binary'VGVzdA=='", '+'); } @Test public void enumValue() { - assertTrue(new UriTokenizer("namespace.name'value'").next(TokenKind.PrimitiveEnumValue)); - assertTrue(new UriTokenizer("namespace.name'flag1,flag2,-3'").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("namespace.name'1flag'").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("namespace.name'flag1,,flag2'").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("namespace.name',value'").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("namespace.name'value,'").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("namespace.name''").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("'1'").next(TokenKind.PrimitiveEnumValue)); - assertFalse(new UriTokenizer("1").next(TokenKind.PrimitiveEnumValue)); - wrongToken(TokenKind.PrimitiveEnumValue, "namespace.name'_1,_2,3'", ';'); + assertTrue(new UriTokenizer("namespace.name'value'").next(TokenKind.EnumValue)); + assertTrue(new UriTokenizer("namespace.name'flag1,flag2,-3'").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("namespace.name'1flag'").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("namespace.name'flag1,,flag2'").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("namespace.name',value'").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("namespace.name'value,'").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("namespace.name''").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("'1'").next(TokenKind.EnumValue)); + assertFalse(new UriTokenizer("1").next(TokenKind.EnumValue)); + wrongToken(TokenKind.EnumValue, "namespace.name'_1,_2,3'", ';'); } @Test @@ -360,6 +365,92 @@ public class UriTokenizerTest { wrongToken(TokenKind.jsonArrayOrObject, "[{\"name\":+123.456},null]", '\\'); } + @Test + public void operators() { + UriTokenizer tokenizer = new UriTokenizer("1 ne 2"); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertFalse(tokenizer.next(TokenKind.EqualsOperator)); + assertTrue(tokenizer.next(TokenKind.NotEqualsOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.EOF)); + + tokenizer = new UriTokenizer("1ne 2"); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertFalse(tokenizer.next(TokenKind.NotEqualsOperator)); + + tokenizer = new UriTokenizer("1 ne2"); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertFalse(tokenizer.next(TokenKind.NotEqualsOperator)); + + tokenizer = new UriTokenizer("1 \tle\t\t\t2"); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.LessThanOrEqualsOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.EOF)); + + assertFalse(new UriTokenizer("nottrue").next(TokenKind.NotOperator)); + assertFalse(new UriTokenizer("no true").next(TokenKind.NotOperator)); + + tokenizer = new UriTokenizer("true or not false and 1 eq 2 add 3 sub 4 mul 5 div 6 mod 7"); + assertTrue(tokenizer.next(TokenKind.BooleanValue)); + assertTrue(tokenizer.next(TokenKind.OrOperator)); + assertTrue(tokenizer.next(TokenKind.NotOperator)); + assertTrue(tokenizer.next(TokenKind.BooleanValue)); + assertTrue(tokenizer.next(TokenKind.AndOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.EqualsOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.AddOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.SubOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.MulOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.DivOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.ModOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.EOF)); + + tokenizer = new UriTokenizer("1 gt 2 or 3 ge 4 or 5 lt 6"); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.GreaterThanOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.OrOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.GreaterThanOrEqualsOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.OrOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.LessThanOperator)); + assertTrue(tokenizer.next(TokenKind.IntegerValue)); + assertTrue(tokenizer.next(TokenKind.EOF)); + } + + @Test + public void methods() { + UriTokenizer tokenizer = new UriTokenizer("now()"); + assertTrue(tokenizer.next(TokenKind.NowMethod)); + assertTrue(tokenizer.next(TokenKind.CLOSE)); + assertTrue(tokenizer.next(TokenKind.EOF)); + + assertFalse(new UriTokenizer("no w()").next(TokenKind.NowMethod)); + assertFalse(new UriTokenizer("now ()").next(TokenKind.NowMethod)); + + assertTrue(new UriTokenizer("maxdatetime()").next(TokenKind.MaxdatetimeMethod)); + assertTrue(new UriTokenizer("mindatetime()").next(TokenKind.MindatetimeMethod)); + + for (final TokenKind tokenKind : TokenKind.values()) { + if (tokenKind.name().endsWith("Method")) { + assertTrue(tokenKind.name(), + new UriTokenizer( + tokenKind.name().substring(0, tokenKind.name().indexOf("Method")) + .toLowerCase(Locale.ROOT).replace("geo", "geo.") + '(') + .next(tokenKind)); + } + } + } + private void wrongToken(final TokenKind kind, final String value, final char disturbCharacter) { assertFalse(new UriTokenizer(disturbCharacter + value).next(kind));
