/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.expression.deprecated;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
import com.opengamma.financial.expression.UserExpression;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class ExpressionParserTest {
private static final Logger s_logger = LoggerFactory.getLogger(ExpressionParserTest.class);
private static void parse(final String str, final String expected) {
s_logger.debug("Parsing {}", str);
final UserExpression expr = new ExpressionParser().parse(str);
assertNotNull(expr);
assertEquals(expr.toString(), expected);
}
@Test(expectedExceptions = {IllegalArgumentException.class })
public void testEmptyString() {
final UserExpression expr = new ExpressionParser().parse("");
}
@Test(expectedExceptions = {IllegalArgumentException.class })
public void testIllegalString() {
final UserExpression expr = new ExpressionParser().parse("Foo less \"Bar\"");
}
@Test
public void testAttributeEquality() {
parse("Foo=\"Bar\"", "`EQ (`IDENTIFIER Foo) (`LITERAL Bar)");
}
@Test
public void testAttributeLessThan() {
parse("Foo<\"B\\\"ar\"", "`LT (`IDENTIFIER Foo) (`LITERAL B\"ar)");
}
@Test
public void testAttributeGreaterThan() {
parse("Foo>\"Bar\"", "`GT (`IDENTIFIER Foo) (`LITERAL Bar)");
}
@Test
public void testAttributeNotEqual() {
parse("Foo<>\"Bar\"", "`NEQ (`IDENTIFIER Foo) (`LITERAL Bar)");
}
@Test
public void testNot() {
parse("NOT Foo=\"Bar\"", "`NOT (`EQ (`IDENTIFIER Foo) (`LITERAL Bar))");
}
@Test
public void testAnd() {
parse("Foo=\"Bar\" AND Bar=\"Foo\" AND Cow=\"Foo\"", "`AND (`EQ (`IDENTIFIER Foo) (`LITERAL Bar)) (`AND (`EQ (`IDENTIFIER Bar) (`LITERAL Foo)) (`EQ (`IDENTIFIER Cow) (`LITERAL Foo)))");
}
@Test
public void testOr() {
parse("Foo=\"Bar\" OR Foo=\"Cow\" OR Bar=\"Cow\"", "`OR (`EQ (`IDENTIFIER Foo) (`LITERAL Bar)) (`OR (`EQ (`IDENTIFIER Foo) (`LITERAL Cow)) (`EQ (`IDENTIFIER Bar) (`LITERAL Cow)))");
}
@Test
public void testBrackets() {
parse("(((Foo=\"Bar\") AND (Bar=\"Foo\")) OR ((Foo=\"Bar\") AND (Bar=\"Cow\")))",
"`OR (`AND (`EQ (`IDENTIFIER Foo) (`LITERAL Bar)) (`EQ (`IDENTIFIER Bar) (`LITERAL Foo))) (`AND (`EQ (`IDENTIFIER Foo) (`LITERAL Bar)) (`EQ (`IDENTIFIER Bar) (`LITERAL Cow)))");
}
}