Package org.springframework.expression.spel.ast

Source Code of org.springframework.expression.spel.ast.OpPlusTests

/*
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.expression.spel.ast;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.junit.Test;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.expression.TypedValue;
import org.springframework.expression.spel.ExpressionState;
import org.springframework.expression.spel.SpelEvaluationException;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.expression.spel.support.StandardTypeConverter;

import static org.junit.Assert.*;

/**
* Unit tests for SpEL's plus operator.
*
* @author Ivo Smid
* @author Chris Beams
* @since 3.2
* @see OpPlus
*/
public class OpPlusTests {

  @Test(expected = IllegalArgumentException.class)
  public void test_emptyOperands() {
    new OpPlus(-1);
  }

  @Test(expected = SpelEvaluationException.class)
  public void test_unaryPlusWithStringLiteral() {
    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    StringLiteral str = new StringLiteral("word", -1, "word");

    OpPlus o = new OpPlus(-1, str);
    o.getValueInternal(expressionState);
  }

  @Test
  public void test_unaryPlusWithNumberOperand() {
    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    {
      RealLiteral realLiteral = new RealLiteral("123.00", -1, 123.0);
      OpPlus o = new OpPlus(-1, realLiteral);
      TypedValue value = o.getValueInternal(expressionState);

      assertEquals(Double.class, value.getTypeDescriptor().getObjectType());
      assertEquals(Double.class, value.getTypeDescriptor().getType());
      assertEquals(realLiteral.getLiteralValue().getValue(), value.getValue());
    }

    {
      IntLiteral intLiteral = new IntLiteral("123", -1, 123);
      OpPlus o = new OpPlus(-1, intLiteral);
      TypedValue value = o.getValueInternal(expressionState);

      assertEquals(Integer.class, value.getTypeDescriptor().getObjectType());
      assertEquals(Integer.class, value.getTypeDescriptor().getType());
      assertEquals(intLiteral.getLiteralValue().getValue(), value.getValue());
    }

    {
      LongLiteral longLiteral = new LongLiteral("123", -1, 123L);
      OpPlus o = new OpPlus(-1, longLiteral);
      TypedValue value = o.getValueInternal(expressionState);

      assertEquals(Long.class, value.getTypeDescriptor().getObjectType());
      assertEquals(Long.class, value.getTypeDescriptor().getType());
      assertEquals(longLiteral.getLiteralValue().getValue(), value.getValue());
    }
  }

  @Test
  public void test_binaryPlusWithNumberOperands() {
    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    {
      RealLiteral n1 = new RealLiteral("123.00", -1, 123.0);
      RealLiteral n2 = new RealLiteral("456.00", -1, 456.0);
      OpPlus o = new OpPlus(-1, n1, n2);
      TypedValue value = o.getValueInternal(expressionState);

      assertEquals(Double.class, value.getTypeDescriptor().getObjectType());
      assertEquals(Double.class, value.getTypeDescriptor().getType());
      assertEquals(Double.valueOf(123.0 + 456.0), value.getValue());
    }

    {
      LongLiteral n1 = new LongLiteral("123", -1, 123L);
      LongLiteral n2 = new LongLiteral("456", -1, 456L);
      OpPlus o = new OpPlus(-1, n1, n2);
      TypedValue value = o.getValueInternal(expressionState);

      assertEquals(Long.class, value.getTypeDescriptor().getObjectType());
      assertEquals(Long.class, value.getTypeDescriptor().getType());
      assertEquals(Long.valueOf(123L + 456L), value.getValue());
    }

    {
      IntLiteral n1 = new IntLiteral("123", -1, 123);
      IntLiteral n2 = new IntLiteral("456", -1, 456);
      OpPlus o = new OpPlus(-1, n1, n2);
      TypedValue value = o.getValueInternal(expressionState);

      assertEquals(Integer.class, value.getTypeDescriptor().getObjectType());
      assertEquals(Integer.class, value.getTypeDescriptor().getType());
      assertEquals(Integer.valueOf(123 + 456), value.getValue());
    }
  }

  @Test
  public void test_binaryPlusWithStringOperands() {
    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    StringLiteral n1 = new StringLiteral("\"foo\"", -1, "\"foo\"");
    StringLiteral n2 = new StringLiteral("\"bar\"", -1, "\"bar\"");
    OpPlus o = new OpPlus(-1, n1, n2);
    TypedValue value = o.getValueInternal(expressionState);

    assertEquals(String.class, value.getTypeDescriptor().getObjectType());
    assertEquals(String.class, value.getTypeDescriptor().getType());
    assertEquals("foobar", value.getValue());
  }

  @Test
  public void test_binaryPlusWithLeftStringOperand() {
    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    StringLiteral n1 = new StringLiteral("\"number is \"", -1, "\"number is \"");
    LongLiteral n2 = new LongLiteral("123", -1, 123);
    OpPlus o = new OpPlus(-1, n1, n2);
    TypedValue value = o.getValueInternal(expressionState);

    assertEquals(String.class, value.getTypeDescriptor().getObjectType());
    assertEquals(String.class, value.getTypeDescriptor().getType());
    assertEquals("number is 123", value.getValue());
  }

  @Test
  public void test_binaryPlusWithRightStringOperand() {
    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    LongLiteral n1 = new LongLiteral("123", -1, 123);
    StringLiteral n2 = new StringLiteral("\" is a number\"", -1, "\" is a number\"");
    OpPlus o = new OpPlus(-1, n1, n2);
    TypedValue value = o.getValueInternal(expressionState);

    assertEquals(String.class, value.getTypeDescriptor().getObjectType());
    assertEquals(String.class, value.getTypeDescriptor().getType());
    assertEquals("123 is a number", value.getValue());
  }

  @Test
  public void test_binaryPlusWithTime_ToString() {

    ExpressionState expressionState = new ExpressionState(new StandardEvaluationContext());

    Time time = new Time(new Date().getTime());

    VariableReference var = new VariableReference("timeVar", -1);
    var.setValue(expressionState, time);

    StringLiteral n2 = new StringLiteral("\" is now\"", -1, "\" is now\"");
    OpPlus o = new OpPlus(-1, var, n2);
    TypedValue value = o.getValueInternal(expressionState);

    assertEquals(String.class, value.getTypeDescriptor().getObjectType());
    assertEquals(String.class, value.getTypeDescriptor().getType());
    assertEquals(time + " is now", value.getValue());
  }

  @Test
  public void test_binaryPlusWithTimeConverted() {

    final SimpleDateFormat format = new SimpleDateFormat("hh :--: mm :--: ss", Locale.ENGLISH);

    GenericConversionService conversionService = new GenericConversionService();
    conversionService.addConverter(new Converter<Time, String>() {
      @Override
      public String convert(Time source) {
        return format.format(source);
      }
    });

    StandardEvaluationContext evaluationContextConverter = new StandardEvaluationContext();
    evaluationContextConverter.setTypeConverter(new StandardTypeConverter(conversionService));

    ExpressionState expressionState = new ExpressionState(evaluationContextConverter);

    Time time = new Time(new Date().getTime());

    VariableReference var = new VariableReference("timeVar", -1);
    var.setValue(expressionState, time);

    StringLiteral n2 = new StringLiteral("\" is now\"", -1, "\" is now\"");
    OpPlus o = new OpPlus(-1, var, n2);
    TypedValue value = o.getValueInternal(expressionState);

    assertEquals(String.class, value.getTypeDescriptor().getObjectType());
    assertEquals(String.class, value.getTypeDescriptor().getType());
    assertEquals(format.format(time) + " is now", value.getValue());
  }

}
TOP

Related Classes of org.springframework.expression.spel.ast.OpPlusTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.