| /******************************************************************************* |
| * Copyright (c) 2000, 2014 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.core.tests.eval; |
| |
| import junit.framework.Test; |
| |
| import org.eclipse.jdt.internal.eval.GlobalVariable; |
| /** |
| * Test the global variable evaluation. |
| * This assumes that the EvaluationContext class and that the GlobalVariable class |
| * are working correctly. |
| */ |
| @SuppressWarnings({ "rawtypes" }) |
| public class VariableTest extends EvaluationTest { |
| /** |
| * Creates a new EvaluationContextTest. |
| */ |
| public VariableTest(String name) { |
| super(name); |
| } |
| public static Test suite() { |
| return setupSuite(testClass()); |
| } |
| /** |
| * Tests the individual evaluation of variables with expected values of all kind of types. |
| */ |
| public void testAllKindOfValues() { |
| try { |
| // Creates the variables |
| GlobalVariable var1 = this.context.newVariable("int".toCharArray(), "var1".toCharArray(), "1".toCharArray()); |
| GlobalVariable var2 = this.context.newVariable("boolean".toCharArray(), "var2".toCharArray(), "true".toCharArray()); |
| GlobalVariable var3 = this.context.newVariable("char".toCharArray(), "var3".toCharArray(), "'c'".toCharArray()); |
| GlobalVariable var4 = this.context.newVariable("float".toCharArray(), "var4".toCharArray(), "(float)1.0".toCharArray()); |
| GlobalVariable var5 = this.context.newVariable("double".toCharArray(), "var5".toCharArray(), "1.0".toCharArray()); |
| GlobalVariable var6 = this.context.newVariable("short".toCharArray(), "var6".toCharArray(), "(short)1".toCharArray()); |
| GlobalVariable var7 = this.context.newVariable("long".toCharArray(), "var7".toCharArray(), "(long)1".toCharArray()); |
| GlobalVariable var8 = this.context.newVariable("String".toCharArray(), "var8".toCharArray(), "\"hello\"".toCharArray()); |
| GlobalVariable var9 = this.context.newVariable("Object".toCharArray(), "var9".toCharArray(), buildCharArray(new String[] { |
| "new Object() {", |
| " public String toString() {", |
| " return \"an object\";", |
| " }", |
| "}"})); |
| GlobalVariable var10 = this.context.newVariable("Object".toCharArray(), "var10".toCharArray(), null); |
| |
| // Install them |
| installVariables(10); |
| |
| // Get values one by one |
| evaluateWithExpectedValue(var1, "1".toCharArray(), "int".toCharArray()); |
| evaluateWithExpectedValue(var2, "true".toCharArray(), "boolean".toCharArray()); |
| evaluateWithExpectedValue(var3, "c".toCharArray(), "char".toCharArray()); |
| evaluateWithExpectedValue(var4, "1.0".toCharArray(), "float".toCharArray()); |
| evaluateWithExpectedValue(var5, "1.0".toCharArray(), "double".toCharArray()); |
| evaluateWithExpectedValue(var6, "1".toCharArray(), "short".toCharArray()); |
| evaluateWithExpectedValue(var7, "1".toCharArray(), "long".toCharArray()); |
| evaluateWithExpectedValue(var8, "hello".toCharArray(), "java.lang.String".toCharArray()); |
| evaluateWithExpectedValue(var9, "an object".toCharArray(), "java.lang.Object".toCharArray()); |
| evaluateWithExpectedValue(var10, "null".toCharArray(), "java.lang.Object".toCharArray()); |
| } finally { |
| // Clean up |
| GlobalVariable[] vars = this.context.allVariables(); |
| for (int i = 0; i < vars.length; i++) { |
| this.context.deleteVariable(vars[i]); |
| } |
| } |
| } |
| public static Class testClass() { |
| return VariableTest.class; |
| } |
| /** |
| * Tests the assignment of a global variable in a code snippet. |
| */ |
| public void testCodeSnippetVarAssign() { |
| try { |
| // Creates the variables |
| GlobalVariable var1 = this.context.newVariable("int".toCharArray(), "var1".toCharArray(), null); |
| GlobalVariable var2 = this.context.newVariable("boolean".toCharArray(), "var2".toCharArray(), null); |
| GlobalVariable var3 = this.context.newVariable("char".toCharArray(), "var3".toCharArray(), null); |
| GlobalVariable var4 = this.context.newVariable("float".toCharArray(), "var4".toCharArray(), null); |
| GlobalVariable var5 = this.context.newVariable("double".toCharArray(), "var5".toCharArray(), null); |
| GlobalVariable var6 = this.context.newVariable("short".toCharArray(), "var6".toCharArray(), null); |
| GlobalVariable var7 = this.context.newVariable("long".toCharArray(), "var7".toCharArray(), null); |
| GlobalVariable var8 = this.context.newVariable("String".toCharArray(), "var8".toCharArray(), null); |
| GlobalVariable var9 = this.context.newVariable("Object".toCharArray(), "var9".toCharArray(), null); |
| GlobalVariable var10 = this.context.newVariable("Object".toCharArray(), "var10".toCharArray(), null); |
| |
| // Install them |
| installVariables(10); |
| |
| // Assign each of the variable and get its value |
| evaluateWithExpectedDisplayString("var1 = 1;".toCharArray(), "1".toCharArray()); |
| evaluateWithExpectedValue(var1, "1".toCharArray(), "int".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var2 = true;".toCharArray(), "true".toCharArray()); |
| evaluateWithExpectedValue(var2, "true".toCharArray(), "boolean".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var3 = 'c';".toCharArray(), "c".toCharArray()); |
| evaluateWithExpectedValue(var3, "c".toCharArray(), "char".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var4 = (float)1.0;".toCharArray(), "1.0".toCharArray()); |
| evaluateWithExpectedValue(var4, "1.0".toCharArray(), "float".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var5 = 1.0;".toCharArray(), "1.0".toCharArray()); |
| evaluateWithExpectedValue(var5, "1.0".toCharArray(), "double".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var6 = (short)1;".toCharArray(), "1".toCharArray()); |
| evaluateWithExpectedValue(var6, "1".toCharArray(), "short".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var7 = (long)1;".toCharArray(), "1".toCharArray()); |
| evaluateWithExpectedValue(var7, "1".toCharArray(), "long".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var8 = \"hello\";".toCharArray(), "hello".toCharArray()); |
| evaluateWithExpectedValue(var8, "hello".toCharArray(), "java.lang.String".toCharArray()); |
| |
| evaluateWithExpectedDisplayString(buildCharArray(new String[] { |
| "var9 = new Object() {", |
| " public String toString() {", |
| " return \"an object\";", |
| " }", |
| "};"}), "an object".toCharArray()); |
| evaluateWithExpectedValue(var9, "an object".toCharArray(), "java.lang.Object".toCharArray()); |
| |
| evaluateWithExpectedDisplayString("var10 = null;".toCharArray(), "null".toCharArray()); |
| evaluateWithExpectedValue(var10, "null".toCharArray(), "java.lang.Object".toCharArray()); |
| } finally { |
| // Clean up |
| GlobalVariable[] vars = this.context.allVariables(); |
| for (int i = 0; i < vars.length; i++) { |
| this.context.deleteVariable(vars[i]); |
| } |
| } |
| } |
| /** |
| * Tests the retrieval of a global variable from a code snippet. |
| */ |
| public void testCodeSnippetVarRetrieval() { |
| try { |
| // Creates the variables |
| GlobalVariable var1 = this.context.newVariable("int".toCharArray(), "var1".toCharArray(), "1".toCharArray()); |
| GlobalVariable var2 = this.context.newVariable("boolean".toCharArray(), "var2".toCharArray(), "true".toCharArray()); |
| GlobalVariable var3 = this.context.newVariable("char".toCharArray(), "var3".toCharArray(), "'c'".toCharArray()); |
| GlobalVariable var4 = this.context.newVariable("float".toCharArray(), "var4".toCharArray(), "(float)1.0".toCharArray()); |
| GlobalVariable var5 = this.context.newVariable("double".toCharArray(), "var5".toCharArray(), "1.0".toCharArray()); |
| GlobalVariable var6 = this.context.newVariable("short".toCharArray(), "var6".toCharArray(), "(short)1".toCharArray()); |
| GlobalVariable var7 = this.context.newVariable("long".toCharArray(), "var7".toCharArray(), "(long)1".toCharArray()); |
| GlobalVariable var8 = this.context.newVariable("String".toCharArray(), "var8".toCharArray(), "\"hello\"".toCharArray()); |
| GlobalVariable var9 = this.context.newVariable("Object".toCharArray(), "var9".toCharArray(), buildCharArray(new String[] { |
| "new Object() {", |
| " public String toString() {", |
| " return \"an object\";", |
| " }", |
| "}"})); |
| GlobalVariable var10 = this.context.newVariable("Object".toCharArray(), "var10".toCharArray(), null); |
| |
| // Install them |
| installVariables(10); |
| |
| // Get values one by one |
| evaluateWithExpectedValue(var1, "1".toCharArray(), "int".toCharArray()); |
| evaluateWithExpectedValue(var2, "true".toCharArray(), "boolean".toCharArray()); |
| evaluateWithExpectedValue(var3, "c".toCharArray(), "char".toCharArray()); |
| evaluateWithExpectedValue(var4, "1.0".toCharArray(), "float".toCharArray()); |
| evaluateWithExpectedValue(var5, "1.0".toCharArray(), "double".toCharArray()); |
| evaluateWithExpectedValue(var6, "1".toCharArray(), "short".toCharArray()); |
| evaluateWithExpectedValue(var7, "1".toCharArray(), "long".toCharArray()); |
| evaluateWithExpectedValue(var8, "hello".toCharArray(), "java.lang.String".toCharArray()); |
| evaluateWithExpectedValue(var9, "an object".toCharArray(), "java.lang.Object".toCharArray()); |
| evaluateWithExpectedValue(var10, "null".toCharArray(), "java.lang.Object".toCharArray()); |
| } finally { |
| // Clean up |
| GlobalVariable[] vars = this.context.allVariables(); |
| for (int i = 0; i < vars.length; i++) { |
| this.context.deleteVariable(vars[i]); |
| } |
| } |
| } |
| /** |
| * Tests variables that include one or more imports. |
| */ |
| public void testImports() { |
| try { |
| // import a package |
| this.context.setImports(new char[][] {"java.io.*".toCharArray()}); |
| GlobalVariable file = this.context.newVariable("boolean".toCharArray(), "file".toCharArray(), "new File(\"!@#%\").exists()".toCharArray()); |
| installVariables(1); |
| evaluateWithExpectedValue(file, "false".toCharArray(), "boolean".toCharArray()); |
| this.context.deleteVariable(file); |
| |
| // import a type |
| this.context.setImports(new char[][] {"java.math.BigInteger".toCharArray()}); |
| GlobalVariable big = this.context.newVariable("BigInteger".toCharArray(), "big".toCharArray(), "new BigInteger(\"123456789012345678901234567890\")".toCharArray()); |
| installVariables(1); |
| evaluateWithExpectedValue(big, "123456789012345678901234567890".toCharArray(), "java.math.BigInteger".toCharArray()); |
| this.context.deleteVariable(big); |
| |
| // import a type and a package |
| this.context.setImports(new char[][] {"java.util.Enumeration".toCharArray(), "java.lang.reflect.*".toCharArray()}); |
| GlobalVariable fields = this.context.newVariable("Field[]".toCharArray(), "fields".toCharArray(), "Enumeration.class.getDeclaredFields()".toCharArray()); |
| installVariables(1); |
| evaluateWithExpectedType("return fields;".toCharArray(), "[Ljava.lang.reflect.Field;".toCharArray()); |
| this.context.deleteVariable(fields); |
| } finally { |
| // clean up |
| this.context.setImports(new char[0][]); |
| } |
| } |
| /** |
| * Tests the additions and deletion of variables, installing them each time. |
| */ |
| public void testSeveralVariableInstallations() { |
| try { |
| // Creates 6 variables |
| GlobalVariable var1 = this.context.newVariable("int".toCharArray(), "var1".toCharArray(), "1".toCharArray()); |
| GlobalVariable var2 = this.context.newVariable("boolean".toCharArray(), "var2".toCharArray(), "true".toCharArray()); |
| GlobalVariable var3 = this.context.newVariable("char".toCharArray(), "var3".toCharArray(), "'c'".toCharArray()); |
| GlobalVariable var4 = this.context.newVariable("float".toCharArray(), "var4".toCharArray(), "(float)1.0".toCharArray()); |
| GlobalVariable var5 = this.context.newVariable("double".toCharArray(), "var5".toCharArray(), "1.0".toCharArray()); |
| GlobalVariable var6 = this.context.newVariable("short".toCharArray(), "var6".toCharArray(), "(short)1".toCharArray()); |
| |
| // Install the variables |
| installVariables(6); |
| |
| // Get their values |
| evaluateWithExpectedValue(var1, "1".toCharArray(), "int".toCharArray()); |
| evaluateWithExpectedValue(var2, "true".toCharArray(), "boolean".toCharArray()); |
| evaluateWithExpectedValue(var3, "c".toCharArray(), "char".toCharArray()); |
| evaluateWithExpectedValue(var4, "1.0".toCharArray(), "float".toCharArray()); |
| evaluateWithExpectedValue(var5, "1.0".toCharArray(), "double".toCharArray()); |
| evaluateWithExpectedValue(var6, "1".toCharArray(), "short".toCharArray()); |
| |
| // Delete 3 variables |
| this.context.deleteVariable(var2); |
| this.context.deleteVariable(var5); |
| this.context.deleteVariable(var6); |
| |
| // Install the variables |
| installVariables(3); |
| |
| // Get their values |
| evaluateWithExpectedValue(var1, "1".toCharArray(), "int".toCharArray()); |
| evaluateWithExpectedValue(var3, "c".toCharArray(), "char".toCharArray()); |
| evaluateWithExpectedValue(var4, "1.0".toCharArray(), "float".toCharArray()); |
| |
| // Add 4 more variables |
| GlobalVariable var7 = this.context.newVariable("long".toCharArray(), "var7".toCharArray(), "(long)1".toCharArray()); |
| GlobalVariable var8 = this.context.newVariable("String".toCharArray(), "var8".toCharArray(), "\"hello\"".toCharArray()); |
| GlobalVariable var9 = this.context.newVariable("Object".toCharArray(), "var9".toCharArray(), buildCharArray(new String[] { |
| "new Object() {", |
| " public String toString() {", |
| " return \"an object\";", |
| " }", |
| "}"})); |
| GlobalVariable var10 = this.context.newVariable("Object".toCharArray(), "var10".toCharArray(), null); |
| |
| // Install the variables |
| installVariables(7); |
| |
| // Change value of a variable using a code snippet and move it |
| evaluateWithExpectedValue("var3 = 'z'; return var3;".toCharArray(), "z".toCharArray(), "char".toCharArray()); |
| this.context.deleteVariable(var3); |
| |
| // Change the type of another variable to an incompatible type |
| this.context.deleteVariable(var4); |
| installVariables(5); |
| |
| // Recreate the variables |
| var3 = this.context.newVariable(var3.getTypeName(), var3.getName(), var3.getInitializer()); |
| var4 = this.context.newVariable("java.net.URL".toCharArray(), "var4".toCharArray(), "new java.net.URL(\"http://www.ibm.com/index.html\")".toCharArray()); |
| installVariables(7); |
| |
| // Get their values |
| evaluateWithExpectedValue(var1, "1".toCharArray(), "int".toCharArray()); |
| evaluateWithExpectedValue(var3, "c".toCharArray(), "char".toCharArray()); |
| evaluateWithExpectedValue(var4, "http://www.ibm.com/index.html".toCharArray(), "java.net.URL".toCharArray()); |
| evaluateWithExpectedValue(var7, "1".toCharArray(), "long".toCharArray()); |
| evaluateWithExpectedValue(var8, "hello".toCharArray(), "java.lang.String".toCharArray()); |
| evaluateWithExpectedValue(var9, "an object".toCharArray(), "java.lang.Object".toCharArray()); |
| evaluateWithExpectedValue(var10, "null".toCharArray(), "java.lang.Object".toCharArray()); |
| } finally { |
| // Clean up |
| GlobalVariable[] vars = this.context.allVariables(); |
| for (int i = 0; i < vars.length; i++) { |
| this.context.deleteVariable(vars[i]); |
| } |
| } |
| } |
| } |