/* * Copyright (C) 2006, 2007 Dennis Hunziker, Ueli Kistler * Copyright (C) 2007 Reto Schuettel, Robin Stocker */ package org.python.pydev.refactoring.tests.core; import java.util.ArrayList; import junit.framework.TestCase; import org.eclipse.jface.text.Document; import org.python.pydev.core.IGrammarVersionProvider; import org.python.pydev.core.IModulesManager; import org.python.pydev.core.MisconfigurationException; import org.python.pydev.core.docutils.StringUtils; import org.python.pydev.editor.codecompletion.revisited.CodeCompletionTestsBase; import org.python.pydev.editor.codecompletion.revisited.SystemModulesManager; import org.python.pydev.refactoring.ast.PythonModuleManager; import org.python.pydev.refactoring.ast.adapters.ModuleAdapter; import org.python.pydev.refactoring.ast.visitors.VisitorFactory; import org.python.pydev.ui.pythonpathconf.InterpreterInfo; import com.aptana.shared_core.io.FileUtils; public abstract class AbstractIOTestCase extends TestCase implements IInputOutputTestCase { private String generated; protected TestData data; protected CodeCompletionTestsBase codeCompletionTestsBase = new CodeCompletionTestsBase(); protected ModuleAdapter createModuleAdapterFromDataSource() throws Throwable { return createModuleAdapterFromDataSource(null); } /** * @param version IPythonNature.PYTHON_VERSION_XXX */ protected ModuleAdapter createModuleAdapterFromDataSource(String version) throws Throwable { codeCompletionTestsBase.restorePythonPath(FileUtils.getFileAbsolutePath(data.file.getParentFile()), true); PythonModuleManager pythonModuleManager = new PythonModuleManager(CodeCompletionTestsBase.nature); if (version != null) { //As the files will be found in the system, we need to set the system modules manager info. IModulesManager modulesManager = pythonModuleManager.getIModuleManager(); SystemModulesManager systemModulesManager = (SystemModulesManager) modulesManager.getSystemModulesManager(); systemModulesManager.setInfo(new InterpreterInfo(version, "", new ArrayList<String>())); CodeCompletionTestsBase.nature.setVersion(version, null); } ModuleAdapter module = VisitorFactory.createModuleAdapter(pythonModuleManager, data.file, new Document( data.source), CodeCompletionTestsBase.nature, CodeCompletionTestsBase.nature); return module; } protected IGrammarVersionProvider createVersionProvider() { IGrammarVersionProvider versionProvider = new IGrammarVersionProvider() { public int getGrammarVersion() throws MisconfigurationException { if (data.file.toString().contains("_grammar3")) { return IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_3_0; } return IGrammarVersionProvider.GRAMMAR_PYTHON_VERSION_2_7; } }; return versionProvider; } public AbstractIOTestCase(String name) { this(name, false); } public AbstractIOTestCase(String name, boolean ignoreEmptyLines) { super(name); } protected void assertContentsEqual(String expected, String generated) { assertEquals(StringUtils.replaceNewLines(expected, "\n"), StringUtils.replaceNewLines(generated, "\n")); } @Override protected void setUp() throws Exception { PythonModuleManager.setTesting(true); codeCompletionTestsBase.setUp(); } @Override protected void tearDown() throws Exception { PythonModuleManager.setTesting(false); codeCompletionTestsBase.tearDown(); } protected String getGenerated() { return StringUtils.replaceNewLines(generated.trim(), "\n"); } public void setTestGenerated(String source) { this.generated = source; } public void setData(TestData data) { this.data = data; } public String getExpected() { return StringUtils.replaceNewLines(data.result, "\n"); } }