package net.sourceforge.stripes.util.bean;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
*
*/
public class PropertyExpressionTests {
@Test(groups="fast")
public void testDotNotation() {
PropertyExpression expr = PropertyExpression.getExpression("foo.bar.splat");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "bar");
Assert.assertEquals(root.getNext().getNext().getStringValue(), "splat");
}
@Test(groups="fast")
public void testDotNotationWithEscapes() {
PropertyExpression expr = PropertyExpression.getExpression("fo\\\"o\\\".bar.splat");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "fo\"o\"");
Assert.assertEquals(root.getNext().getStringValue(), "bar");
Assert.assertEquals(root.getNext().getNext().getStringValue(), "splat");
}
@Test(groups="fast")
public void testSquareBracketNotation() {
PropertyExpression expr = PropertyExpression.getExpression("foo[index].bar");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "index");
Assert.assertEquals(root.getNext().getNext().getStringValue(), "bar");
}
@Test(groups="fast")
public void testSquareBracketNotation2() {
PropertyExpression expr = PropertyExpression.getExpression("foo[index][bar]");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "index");
Assert.assertEquals(root.getNext().getNext().getStringValue(), "bar");
}
@Test(groups="fast")
public void testSquareBracketWithSingleQuoteNotation() {
PropertyExpression expr = PropertyExpression.getExpression("foo['index'].bar");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "index");
Assert.assertEquals(root.getNext().getNext().getStringValue(), "bar");
}
@Test(groups="fast")
public void testSquareBracketWithDoubleQuoteNotation() {
PropertyExpression expr = PropertyExpression.getExpression("foo[\"index\"].bar");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "index");
Assert.assertEquals(root.getNext().getNext().getStringValue(), "bar");
}
@Test(groups="fast", expectedExceptions=ParseException.class)
public void testBackToBackQuotedStrings() {
@SuppressWarnings("unused")
PropertyExpression expr = PropertyExpression.getExpression("foo['bar''splat']");
}
@Test(groups="fast")
public void testIntIndex() {
PropertyExpression expr = PropertyExpression.getExpression("foo[123]");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "123");
Assert.assertEquals(root.getNext().getTypedValue(), new Integer(123));
}
@Test(groups="fast")
public void testDoubleIndex() {
PropertyExpression expr = PropertyExpression.getExpression("foo[123.4]");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "123.4");
Assert.assertEquals(root.getNext().getTypedValue(), new Double(123.4));
}
@Test(groups="fast")
public void testLongIndex() {
PropertyExpression expr = PropertyExpression.getExpression("foo[123l]");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "123l");
Assert.assertEquals(root.getNext().getTypedValue(), new Long(123));
}
@Test(groups="fast")
public void testFloatIndex() {
PropertyExpression expr = PropertyExpression.getExpression("foo[123F]");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "123F");
Assert.assertEquals(root.getNext().getTypedValue(), new Float(123f));
}
@Test(groups="fast")
public void testBooleanIndex() {
PropertyExpression expr = PropertyExpression.getExpression("foo[false]");
Node root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "false");
Assert.assertEquals(root.getNext().getTypedValue(), Boolean.FALSE);
expr = PropertyExpression.getExpression("foo[tRue]");
root = expr.getRootNode();
Assert.assertEquals(root.getStringValue(), "foo");
Assert.assertEquals(root.getNext().getStringValue(), "tRue");
Assert.assertEquals(root.getNext().getTypedValue(), Boolean.TRUE);
}
}