use of com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask in project android by JetBrains.
the class ResourceFolderRepositoryFileCacheTest method testCacheVersionCheck.
public void testCacheVersionCheck() throws IOException {
ResourceFolderRepositoryFileCacheImpl cache = (ResourceFolderRepositoryFileCacheImpl) ResourceFolderRepositoryFileCacheService.get();
// Creating the root dir the first time gives us a stamp file.
File rootDir = cache.getRootDir();
assertNotNull(rootDir);
assertTrue(cache.isVersionSame(rootDir));
// If we delete the cache, it'll be empty without a stamp file.
cache.delete();
assertFalse(rootDir.exists());
assertFalse(cache.isVersionSame(rootDir));
// If we imagine a situation before the stamp file was introduced into the codebase
// (root dir is made and it has content, but no stamp file) it is not valid.
assertTrue(rootDir.mkdirs());
List<File> files = addProjectDirectories(3, 0);
for (File file : files) {
assertTrue(file.exists());
}
assertFalse(cache.isVersionSame(rootDir));
assertFalse(cache.isValid());
// Now try setting up the correct version and a few directories (stamping happens automatically).
cache.delete();
files = addProjectDirectories(3, 0);
for (File file : files) {
assertTrue(file.exists());
}
assertTrue(cache.isVersionSame(rootDir));
assertTrue(cache.isValid());
// Now try overwriting version stamp with a too old version.
cache.stampVersion(rootDir, ResourceFolderRepositoryFileCacheImpl.EXPECTED_CACHE_VERSION - 1);
assertFalse(cache.isVersionSame(rootDir));
assertFalse(cache.isValid());
// The management task should clean up old files if the version is invalid.
ManageLruProjectFilesTask task = new ManageLruProjectFilesTask(getProject());
task.performInDumbMode(new MockProgressIndicator());
assertFalse(rootDir.exists());
for (File file : files) {
assertFalse(file.exists());
}
assertFalse(cache.isVersionSame(rootDir));
// However, once anything grabs the root dir again, it is stamped and valid again.
rootDir = cache.getRootDir();
assertNotNull(rootDir);
assertTrue(cache.isVersionSame(rootDir));
assertTrue(cache.isValid());
}
use of com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask in project android by JetBrains.
the class ResourceFolderRepositoryFileCacheTest method testManageLRUProjectFilesTrims.
public void testManageLRUProjectFilesTrims() throws IOException {
int lruLimit = 3;
int overLimit = 1;
List<File> projectDirList = addProjectDirectories(lruLimit, overLimit);
// Now add current project to front, sweep, and check.
ResourceFolderRepositoryFileCache cache = ResourceFolderRepositoryFileCacheService.get();
Path curProjectCacheDir = cache.getProjectDir(getProject());
assertNotNull(curProjectCacheDir);
FileUtil.ensureExists(curProjectCacheDir.toFile());
List<File> removed = ManageLruProjectFilesTask.updateLRUList(getProject(), projectDirList, lruLimit * 2);
assertEmpty(removed);
++overLimit;
ManageLruProjectFilesTask task = new ManageLruProjectFilesTask(getProject());
task.maintainLRUCache(lruLimit);
for (int i = 0; i < lruLimit + overLimit; ++i) {
if (i < lruLimit) {
assertTrue(projectDirList.get(i).exists());
} else {
assertFalse(projectDirList.get(i).exists());
}
}
}
use of com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask in project android by JetBrains.
the class ResourceFolderRepositoryFileCacheTest method testManagerLRUProjectFilesInvalidationClears.
public void testManagerLRUProjectFilesInvalidationClears() throws IOException {
int lruLimit = 3;
int overLimit = 1;
List<File> projectDirList = addProjectDirectories(lruLimit, overLimit);
// Check that the expected directories exist before invalidation.
ResourceFolderRepositoryFileCache cache = ResourceFolderRepositoryFileCacheService.get();
assertTrue(cache.isValid());
ManageLruProjectFilesTask task = new ManageLruProjectFilesTask(getProject());
task.maintainLRUCache(lruLimit);
Path curProjectCacheDir = cache.getProjectDir(getProject());
assertNotNull(curProjectCacheDir);
FileUtil.ensureExists(curProjectCacheDir.toFile());
List<File> removed = ManageLruProjectFilesTask.updateLRUList(getProject(), projectDirList, lruLimit * 2);
assertEmpty(removed);
++overLimit;
for (int i = 0; i < lruLimit + overLimit; ++i) {
if (i < lruLimit) {
assertTrue(projectDirList.get(i).exists());
} else {
assertFalse(projectDirList.get(i).exists());
}
}
// Now invalidate and check that everything is deleted, including the stamp.
CacheInvalidator invalidator = new CacheInvalidator();
invalidator.invalidateCaches();
assertFalse(cache.isValid());
task.maintainLRUCache(lruLimit);
for (int i = 0; i < lruLimit + overLimit; ++i) {
assertFalse(projectDirList.get(i).exists());
}
assertTrue(cache.isValid());
}
Aggregations