Package org.springframework.expression.spel

Source Code of org.springframework.expression.spel.ArrayConstructorTests

/*
* Copyright 2002-2014 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;

import org.junit.Test;

import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;

import static org.junit.Assert.*;

/**
* Test construction of arrays.
*
* @author Andy Clement
*/
public class ArrayConstructorTests extends AbstractExpressionTests {

  @Test
  public void simpleArrayWithInitializer() {
    evaluateArrayBuildingExpression("new int[]{1,2,3}", "[1,2,3]");
    evaluateArrayBuildingExpression("new int[]{}", "[]");
    evaluate("new int[]{}.length", "0", Integer.class);
  }

  @Test
  public void conversion() {
    evaluate("new String[]{1,2,3}[0]", "1", String.class);
    evaluate("new int[]{'123'}[0]", 123, Integer.class);
  }

  @Test
  public void multidimensionalArrays() {
    evaluateAndCheckError("new int[][]{{1,2},{3,4}}", SpelMessage.MULTIDIM_ARRAY_INITIALIZER_NOT_SUPPORTED);
    evaluateAndCheckError("new int[3][]", SpelMessage.MISSING_ARRAY_DIMENSION);
    evaluateAndCheckError("new int[]", SpelMessage.MISSING_ARRAY_DIMENSION);
    evaluateAndCheckError("new String[]", SpelMessage.MISSING_ARRAY_DIMENSION);
    evaluateAndCheckError("new int[][1]", SpelMessage.MISSING_ARRAY_DIMENSION);
  }

  @Test
  public void primitiveTypeArrayConstructors() {
    evaluateArrayBuildingExpression("new int[]{1,2,3,4}", "[1,2,3,4]");
    evaluateArrayBuildingExpression("new boolean[]{true,false,true}", "[true,false,true]");
    evaluateArrayBuildingExpression("new char[]{'a','b','c'}", "[a,b,c]");
    evaluateArrayBuildingExpression("new long[]{1,2,3,4,5}", "[1,2,3,4,5]");
    evaluateArrayBuildingExpression("new short[]{2,3,4,5,6}", "[2,3,4,5,6]");
    evaluateArrayBuildingExpression("new double[]{1d,2d,3d,4d}", "[1.0,2.0,3.0,4.0]");
    evaluateArrayBuildingExpression("new float[]{1f,2f,3f,4f}", "[1.0,2.0,3.0,4.0]");
    evaluateArrayBuildingExpression("new byte[]{1,2,3,4}", "[1,2,3,4]");
  }

  @Test
  public void primitiveTypeArrayConstructorsElements() {
    evaluate("new int[]{1,2,3,4}[0]", 1, Integer.class);
    evaluate("new boolean[]{true,false,true}[0]", true, Boolean.class);
    evaluate("new char[]{'a','b','c'}[0]", 'a', Character.class);
    evaluate("new long[]{1,2,3,4,5}[0]", 1L, Long.class);
    evaluate("new short[]{2,3,4,5,6}[0]", (short) 2, Short.class);
    evaluate("new double[]{1d,2d,3d,4d}[0]", (double) 1, Double.class);
    evaluate("new float[]{1f,2f,3f,4f}[0]", (float) 1, Float.class);
    evaluate("new byte[]{1,2,3,4}[0]", (byte) 1, Byte.class);
    evaluate("new String(new char[]{'h','e','l','l','o'})", "hello", String.class);
  }

  @Test
  public void errorCases() {
    evaluateAndCheckError("new char[7]{'a','c','d','e'}", SpelMessage.INITIALIZER_LENGTH_INCORRECT);
    evaluateAndCheckError("new char[3]{'a','c','d','e'}", SpelMessage.INITIALIZER_LENGTH_INCORRECT);
    evaluateAndCheckError("new char[2]{'hello','world'}", SpelMessage.TYPE_CONVERSION_ERROR);
    evaluateAndCheckError("new String('a','c','d')", SpelMessage.CONSTRUCTOR_INVOCATION_PROBLEM);
  }

  @Test
  public void typeArrayConstructors() {
    evaluate("new String[]{'a','b','c','d'}[1]", "b", String.class);
    evaluateAndCheckError("new String[]{'a','b','c','d'}.size()", SpelMessage.METHOD_NOT_FOUND, 30, "size()",
      "java.lang.String[]");
    evaluate("new String[]{'a','b','c','d'}.length", 4, Integer.class);
  }

  @Test
  public void basicArray() {
    evaluate("new String[3]", "java.lang.String[3]{null,null,null}", String[].class);
  }

  @Test
  public void multiDimensionalArray() {
    evaluate("new String[2][2]", "[Ljava.lang.String;[2]{[2]{null,null},[2]{null,null}}", String[][].class);
    evaluate("new String[3][2][1]",
      "[[Ljava.lang.String;[3]{[2]{[1]{null},[1]{null}},[2]{[1]{null},[1]{null}},[2]{[1]{null},[1]{null}}}",
      String[][][].class);
  }

  @Test
  public void constructorInvocation03() {
    evaluateAndCheckError("new String[]", SpelMessage.MISSING_ARRAY_DIMENSION);
  }

  public void constructorInvocation04() {
    evaluateAndCheckError("new Integer[3]{'3','ghi','5'}", SpelMessage.INCORRECT_ELEMENT_TYPE_FOR_ARRAY, 4);
  }

  private String evaluateArrayBuildingExpression(String expression, String expectedToString) {
    SpelExpressionParser parser = new SpelExpressionParser();
    Expression e = parser.parseExpression(expression);
    Object o = e.getValue();
    assertNotNull(o);
    assertTrue(o.getClass().isArray());
    StringBuilder s = new StringBuilder();
    s.append('[');
    if (o instanceof int[]) {
      int[] array = (int[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof boolean[]) {
      boolean[] array = (boolean[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof char[]) {
      char[] array = (char[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof long[]) {
      long[] array = (long[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof short[]) {
      short[] array = (short[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof double[]) {
      double[] array = (double[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof float[]) {
      float[] array = (float[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else if (o instanceof byte[]) {
      byte[] array = (byte[]) o;
      for (int i = 0; i < array.length; i++) {
        if (i > 0) {
          s.append(',');
        }
        s.append(array[i]);
      }
    }
    else {
      fail("Not supported " + o.getClass());
    }
    s.append(']');
    assertEquals(expectedToString, s.toString());
    return s.toString();
  }

}
TOP

Related Classes of org.springframework.expression.spel.ArrayConstructorTests

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.