/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.index.queryexpression;
import org.junit.Test;
import static org.junit.Assert.*;
public class IntegerFieldEvaluatorTest
{
@Test
public void evaluate_turns_integer_as_string_into_double_when_left_is_integer_field()
{
IntegerFieldEvaluator evaluator = new IntegerFieldEvaluator();
CompareExpr compareExpr =
(CompareExpr) evaluator.evaluate( new CompareExpr( CompareExpr.EQ, new FieldExpr( "status" ), new ValueExpr( "0" ) ) );
assertTrue( ( (ValueExpr) compareExpr.getRight() ).isNumber() );
assertEquals( 0.0, ( (ValueExpr) compareExpr.getRight() ).getValue() );
}
@Test
public void evaluate_does_not_change_value_when_left_is_not_an_integer_field()
{
IntegerFieldEvaluator evaluator = new IntegerFieldEvaluator();
CompareExpr compareExpr =
(CompareExpr) evaluator.evaluate( new CompareExpr( CompareExpr.EQ, new FieldExpr( "fullText" ), new ValueExpr( "abc" ) ) );
assertTrue( ( (ValueExpr) compareExpr.getRight() ).isString() );
assertEquals( "abc", ( (ValueExpr) compareExpr.getRight() ).getValue() );
}
@Test
public void evaluate_does_not_change_value_when_right_is_double_but_actual_integer()
{
IntegerFieldEvaluator evaluator = new IntegerFieldEvaluator();
CompareExpr compareExpr =
(CompareExpr) evaluator.evaluate( new CompareExpr( CompareExpr.EQ, new FieldExpr( "status" ), new ValueExpr( 2.0 ) ) );
assertTrue( ( (ValueExpr) compareExpr.getRight() ).isNumber() );
assertEquals( 2.0, ( (ValueExpr) compareExpr.getRight() ).getValue() );
}
@Test
public void evaluate_turns_number_value_as_string_into_a_double_value()
{
IntegerFieldEvaluator evaluator = new IntegerFieldEvaluator();
CompareExpr compareExpr =
(CompareExpr) evaluator.evaluate( new CompareExpr( CompareExpr.EQ, new FieldExpr( "status" ), new ValueExpr( "0" ) ) );
assertTrue( ( (ValueExpr) compareExpr.getRight() ).isNumber() );
assertEquals( 0.0, ( (ValueExpr) compareExpr.getRight() ).getValue() );
}
@Test(expected = QueryParserException.class)
public void evaluate_throws_exception_when_left_is_integer_field_and_right_is_letter()
{
IntegerFieldEvaluator evaluator = new IntegerFieldEvaluator();
evaluator.evaluate( new CompareExpr( CompareExpr.EQ, new FieldExpr( "status" ), new ValueExpr( "a" ) ) );
}
@Test(expected = QueryParserException.class)
public void evaluate_throws_exception_when_left_is_integer_field_and_right_is_decimal()
{
IntegerFieldEvaluator evaluator = new IntegerFieldEvaluator();
evaluator.evaluate( new CompareExpr( CompareExpr.EQ, new FieldExpr( "status" ), new ValueExpr( 1.1 ) ) );
}
}