/******************************************************************************* * 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.EvaluationResult; import org.eclipse.jdt.internal.eval.GlobalVariable; import org.eclipse.jdt.internal.eval.IRequestor; import org.eclipse.jdt.internal.eval.InstallException; /** * Sanity test the IEvaluationContext interface. * For in depth tests, see VariableTest or CodeSnippetTest. */ @SuppressWarnings({ "rawtypes" }) public class SanityTestEvaluationContext extends EvaluationTest { /** * Creates a new SanityEvaluationContextTest. */ public SanityTestEvaluationContext(String name) { super(name); } public static Test suite() { return setupSuite(testClass()); } /** * Sanity test of IEvaluationContext.allVariables() */ public void testAllVariables() { // No variables defined yet GlobalVariable[] vars = this.context.allVariables(); assertEquals("No variables should be defined", 0, vars.length); // Define 3 variables this.context.newVariable("int".toCharArray(), "foo".toCharArray(), "1".toCharArray()); this.context.newVariable("Object".toCharArray(), "bar".toCharArray(), null); this.context.newVariable("String".toCharArray(), "zip".toCharArray(), "\"abcdefg\"".toCharArray()); vars = this.context.allVariables(); assertEquals("3 variables should be defined", 3, vars.length); assertEquals("1st variable", "foo".toCharArray(), vars[0].getName()); assertEquals("2nd variable", "bar".toCharArray(), vars[1].getName()); assertEquals("3rd variable", "zip".toCharArray(), vars[2].getName()); // Remove 2nd variable this.context.deleteVariable(vars[1]); vars = this.context.allVariables(); assertEquals("2 variables should be defined", 2, vars.length); assertEquals("1st variable", "foo".toCharArray(), vars[0].getName()); assertEquals("2nd variable", "zip".toCharArray(), vars[1].getName()); // Remove last variable this.context.deleteVariable(vars[1]); vars = this.context.allVariables(); assertEquals("1 variable should be defined", 1, vars.length); assertEquals("1st variable", "foo".toCharArray(), vars[0].getName()); // Remove 1st variable this.context.deleteVariable(vars[0]); vars = this.context.allVariables(); assertEquals("No variables should be defined", 0, vars.length); } public static Class testClass() { return SanityTestEvaluationContext.class; } /** * Sanity test of IEvaluationContext.evaluate(char[], INameEnvironment, ConfigurableOption[], IRequestor , IProblemFactory) */ public void testEvaluate() { Requestor requestor = new Requestor(); char[] snippet = "return 1;".toCharArray(); try { this.context.evaluate(snippet, getEnv(), getCompilerOptions(), requestor, getProblemFactory()); } catch (InstallException e) { assertTrue("No targetException " + e.getMessage(), false); } assertTrue("Got one result", requestor.resultIndex == 0); EvaluationResult result = requestor.results[0]; assertTrue("No problems with the code snippet", !result.hasProblems()); assertTrue("Result has a value", result.hasValue()); assertEquals("Value", "1".toCharArray(), result.getValueDisplayString()); assertEquals("Type", "int".toCharArray(), result.getValueTypeName()); } /** * Sanity test of IEvaluationContext.evaluateImports(INameEnvironment, IRequestor , IProblemFactory) */ public void testEvaluateImports() { try { // Define imports this.context.setImports(new char[][] {"java.util.*".toCharArray(), "java.lang.reflect.Method".toCharArray()}); // Evaluate them IRequestor requestor = new Requestor() { public void acceptResult(EvaluationResult result) { assertTrue("No problems with the imports", !result.hasProblems()); } }; this.context.evaluateImports(getEnv(), requestor, getProblemFactory()); } finally { // Clean up this.context.setImports(new char[0][]); } } /** * Sanity test of IEvaluationContext.evaluateVariable(IGlobalVariable, IRequestor) */ public void testEvaluateVariable() { GlobalVariable var = null; try { // Create the variable var = this.context.newVariable("int".toCharArray(), "foo".toCharArray(), "1".toCharArray()); // Install it class NoPbRequestor extends Requestor { public void acceptResult(EvaluationResult result) { assertTrue("No problems with the variable", !result.hasProblems()); } } try { this.context.evaluateVariables(getEnv(), getCompilerOptions(), new NoPbRequestor(), getProblemFactory()); } catch (InstallException e) { assertTrue("No targetException " + e.getMessage(), false); } // Get its value Requestor requestor = new Requestor(); try { this.context.evaluateVariable(var, getEnv(), getCompilerOptions(), requestor, getProblemFactory()); } catch (InstallException e) { assertTrue("No targetException " + e.getMessage(), false); } assertTrue("Got one result", requestor.resultIndex == 0); EvaluationResult result = requestor.results[0]; assertTrue("Result has value", result.hasValue()); assertEquals("Value", "1".toCharArray(), result.getValueDisplayString()); assertEquals("Type", "int".toCharArray(), result.getValueTypeName()); } finally { // Clean up if (var != null) { this.context.deleteVariable(var); } } } /** * Sanity test of IEvaluationContext.evaluateVariables(INameEnvironment, ConfigurableOption[], IRequestor, IProblemFactory) */ public void testEvaluateVariables() { GlobalVariable var = null; try { // Create 1 variable var = this.context.newVariable("int".toCharArray(), "foo".toCharArray(), "1".toCharArray()); // Install it and get its value Requestor requestor = new Requestor(); try { this.context.evaluateVariables(getEnv(), getCompilerOptions(), requestor, getProblemFactory()); } catch (InstallException e) { assertTrue("No targetException " + e.getMessage(), false); } assertTrue("Got one result", requestor.resultIndex == 0); EvaluationResult result = requestor.results[0]; assertTrue("No problems with the variable", !result.hasProblems()); assertTrue("Result has value", result.hasValue()); assertEquals("Value", "1".toCharArray(), result.getValueDisplayString()); assertEquals("Type", "int".toCharArray(), result.getValueTypeName()); } finally { // Clean up if (var != null) { this.context.deleteVariable(var); } } } /** * Sanity test of IEvaluationContext.getImports() and IEvaluationContext.setImports(char[][]) */ public void testGetSetImports() { try { // No imports assertTrue("No imports defined", this.context.getImports().length == 0); // Define some imports char[][] imports = new char[][] {"java.util".toCharArray(), "java.lang.reflect.Method".toCharArray()}; this.context.setImports(imports); char[][] storedImports = this.context.getImports(); assertEquals("Same length", imports.length, storedImports.length); for (int i = 0; i < imports.length; i++){ assertEquals("Import #" + i, imports[i], storedImports[i]); } } finally { // Clean up this.context.setImports(new char[0][]); } } /** * Sanity test of IEvaluationContext.getPackageName() and IEvaluationContext.setPackageName(char[]) */ public void testGetSetPackageName() { try { // Default package assertTrue("Default package", this.context.getPackageName().length == 0); // Define a package char[] packageName = "x.y.z".toCharArray(); this.context.setPackageName(packageName); char[] storedPackageName = this.context.getPackageName(); assertEquals("Same package name", packageName, storedPackageName); } finally { // Clean up this.context.setPackageName(new char[0]); } } /** * Sanity test of IEvaluationContext.newVariable(char[], char[], char[]) and * IEvaluationContext.deleteVariable(IGlobalVariable) */ public void testNewDeleteVariable() { // Define 1 variable GlobalVariable var = this.context.newVariable("int".toCharArray(), "deleted".toCharArray(), null); // Delete it this.context.deleteVariable(var); GlobalVariable[] vars = this.context.allVariables(); for (int i = 0; i < vars.length; i++) { assertTrue("Variable should not exist", !var.getName().equals(vars[i].getName())); } } }