/**
* 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.
*/
package com.python.pydev.analysis.additionalinfo;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.python.pydev.core.MisconfigurationException;
import org.python.pydev.core.ModulesKey;
import org.python.pydev.core.TestDependent;
import org.python.pydev.parser.jython.ast.Module;
import org.python.pydev.parser.jython.ast.stmtType;
import com.aptana.shared_core.io.FileUtils;
import com.python.pydev.analysis.additionalinfo.AdditionalInfoIntegrityChecker.IntegrityInfo;
/**
* TODO: Still doesn't check:
* 1. additional info -- where we also have to check if a module was changed (and the cache is old)
*
* @author Fabio
*
*/
public class AdditionalInfoIntegrityCheckerTest extends AdditionalInfoTestsBase {
private static final String MOD_NAME = "extendable.initially_not_existant";
private IProgressMonitor monitor = new NullProgressMonitor();
private File baseDir;
public static void main(String[] args) {
try {
AdditionalInfoIntegrityCheckerTest test = new AdditionalInfoIntegrityCheckerTest();
test.setUp();
test.testIntegrityFileHasNoMemory();
test.tearDown();
junit.textui.TestRunner.run(AdditionalInfoIntegrityCheckerTest.class);
} catch (Throwable e) {
e.printStackTrace();
}
}
@Override
public void setUp() throws Exception {
super.setUp();
baseDir = FileUtils.getTempFileAt(new File("."), "data_temp_additional_info_integrity_test");
if (baseDir.exists()) {
FileUtils.deleteDirectoryTree(baseDir);
}
baseDir.mkdir();
}
@Override
public void tearDown() throws Exception {
if (baseDir.exists()) {
FileUtils.deleteDirectoryTree(baseDir);
}
super.tearDown();
}
public void testIntegrityInModuleHasNoFile() throws MisconfigurationException {
IntegrityInfo info = AdditionalInfoIntegrityChecker.checkIntegrity(nature, monitor, false);
assertTrue(info.desc.toString(), info.allOk);
File f = FileUtils.getTempFileAt(baseDir, "integrity_no_file", ".py");
FileUtils.writeStrToFile("", f);
addFooModule(new Module(new stmtType[0]), f);
info = AdditionalInfoIntegrityChecker.checkIntegrity(nature, monitor, false);
assertFalse(info.allOk);
assertEquals(1, info.modulesNotInDisk.size());
assertEquals(info.modulesNotInDisk.get(0), new ModulesKey("foo", null));
fixAndCheckAllOk(info);
}
public void testIntegrityFileHasNoMemory() throws IOException, MisconfigurationException {
File file = new File(TestDependent.TEST_PYSRC_LOC + "extendable/initially_not_existant.py");
file.createNewFile();
try {
IntegrityInfo info = AdditionalInfoIntegrityChecker.checkIntegrity(nature, monitor, false);
assertFalse(info.allOk);
if (info.modulesNotInMemory.size() != 1) {
StringBuffer notInMemo = new StringBuffer(
"Modules not in memory (expected only: extendable/initially_not_existant.py)\n");
for (ModulesKey key : info.modulesNotInMemory) {
notInMemo.append(key);
notInMemo.append("\n");
}
fail(notInMemo.toString());
}
assertEquals(info.modulesNotInMemory.get(0), new ModulesKey(MOD_NAME, file));
fixAndCheckAllOk(info);
} finally {
file.delete();
}
IntegrityInfo info = AdditionalInfoIntegrityChecker.checkIntegrity(nature, monitor, false);
assertFalse(info.allOk);
assertEquals(1, info.modulesNotInDisk.size());
assertEquals(info.modulesNotInDisk.get(0), new ModulesKey(MOD_NAME, null));
fixAndCheckAllOk(info);
}
private void fixAndCheckAllOk(IntegrityInfo info) throws MisconfigurationException {
info = AdditionalInfoIntegrityChecker.checkIntegrity(nature, monitor, true);
assertTrue(info.desc.toString(), !info.allOk);
//the last check should've fixed it
info = AdditionalInfoIntegrityChecker.checkIntegrity(nature, monitor, false);
assertTrue(info.desc.toString(), info.allOk);
}
}