/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Created on 13/08/2005
*/
package org.python.pydev.editor.codecompletion.revisited.jython;
import java.io.File;
import java.util.ArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.python.copiedfromeclipsesrc.JavaVmLocationFinder;
import org.python.pydev.core.IInterpreterInfo;
import org.python.pydev.core.IInterpreterManager;
import org.python.pydev.core.IPythonNature;
import org.python.pydev.core.TestDependent;
import org.python.pydev.editor.codecompletion.revisited.CodeCompletionTestsBase;
import org.python.pydev.editor.codecompletion.revisited.PythonPathHelper;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.plugin.nature.PythonNature;
import org.python.pydev.ui.interpreters.AbstractInterpreterManager;
import org.python.pydev.ui.interpreters.JythonInterpreterManager;
import org.python.pydev.ui.pythonpathconf.InterpreterInfo;
import org.python.pydev.utils.ICallback;
public class JythonCodeCompletionTestsBase extends CodeCompletionTestsBase {
protected boolean calledJavaExecutable = false;
protected boolean calledJavaJars = false;
@Override
public void setUp() throws Exception {
super.setUp();
//we also need to set from where the info on the java env
JavaVmLocationFinder.callbackJavaExecutable = new ICallback() {
public Object call(Object args) {
calledJavaExecutable = true;
return new File(TestDependent.JAVA_LOCATION);
}
};
//and on the associated jars to the java runtime
JavaVmLocationFinder.callbackJavaJars = new ICallback() {
public Object call(Object args) {
calledJavaJars = true;
ArrayList<File> jars = new ArrayList<File>();
jars.add(new File(TestDependent.JAVA_RT_JAR_LOCATION));
return jars;
}
};
}
@Override
protected void afterRestorSystemPythonPath(InterpreterInfo info) {
super.afterRestorSystemPythonPath(info);
assertTrue(calledJavaExecutable);
assertTrue(calledJavaJars);
boolean foundRtJar = false;
for (Object lib : info.libs) {
String s = (String) lib;
if (s.endsWith("rt.jar")) {
foundRtJar = true;
}
}
assertTrue(foundRtJar);
}
@Override
protected PythonNature createNature() {
return new PythonNature() {
@Override
public int getInterpreterType() throws CoreException {
return IInterpreterManager.INTERPRETER_TYPE_JYTHON;
}
@Override
public int getGrammarVersion() {
return IPythonNature.GRAMMAR_PYTHON_VERSION_2_4;
}
};
}
@Override
protected IInterpreterManager getInterpreterManager() {
return PydevPlugin.getJythonInterpreterManager();
}
@Override
protected void setInterpreterManager(String path) {
AbstractInterpreterManager interpreterManager = new JythonInterpreterManager(this.getPreferences());
InterpreterInfo info;
info = (InterpreterInfo) interpreterManager.createInterpreterInfo(TestDependent.JYTHON_JAR_LOCATION,
new NullProgressMonitor(), false);
if (!info.executableOrJar.equals(TestDependent.JYTHON_JAR_LOCATION)) {
throw new RuntimeException("expected same");
}
if (path != null) {
info = new InterpreterInfo(info.getVersion(), TestDependent.JYTHON_JAR_LOCATION,
PythonPathHelper.parsePythonPathFromStr(path, new ArrayList<String>()));
}
interpreterManager.setInfos(new IInterpreterInfo[] { info }, null, null);
PydevPlugin.setJythonInterpreterManager(interpreterManager);
}
/**
* @see #restorePythonPath(boolean)
*
* same as the restorePythonPath function but also includes the site packages in the distribution
*/
public void restorePythonPathWithSitePackages(boolean force) {
throw new RuntimeException("not available for jython");
}
/**
* restores the pythonpath with the source library (system manager) and the source location for the tests (project manager)
*
* @param force whether this should be forced, even if it was previously created for this class
*/
public void restorePythonPath(boolean force) {
restoreSystemPythonPath(force, TestDependent.JYTHON_LIB_LOCATION + "|" + TestDependent.JAVA_RT_JAR_LOCATION);
restoreProjectPythonPath(force, TestDependent.TEST_PYSRC_LOC);
restoreProjectPythonPath2(force, TestDependent.TEST_PYSRC_LOC2);
checkSize();
}
}