Search in sources :

Example 1 with ManageLruProjectFilesTask

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());
}
Also used : ManageLruProjectFilesTask(com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask) MockProgressIndicator(com.intellij.mock.MockProgressIndicator) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File)

Example 2 with ManageLruProjectFilesTask

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());
        }
    }
}
Also used : Path(java.nio.file.Path) ManageLruProjectFilesTask(com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File)

Example 3 with ManageLruProjectFilesTask

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());
}
Also used : Path(java.nio.file.Path) ManageLruProjectFilesTask(com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File) CacheInvalidator(com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.CacheInvalidator)

Aggregations

ManageLruProjectFilesTask (com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.ManageLruProjectFilesTask)3 VirtualFile (com.intellij.openapi.vfs.VirtualFile)3 File (java.io.File)3 Path (java.nio.file.Path)2 CacheInvalidator (com.android.tools.idea.res.ResourceFolderRepositoryFileCacheImpl.CacheInvalidator)1 MockProgressIndicator (com.intellij.mock.MockProgressIndicator)1