public void TestCreateStorage()
        {
            DynamicDefaultDiskStorage storage = CreateInternalCacheDirStorage();

            DirectoryInfo cacheDir   = new DirectoryInfo(ApplicationData.Current.LocalCacheFolder.Path);
            DirectoryInfo baseDir    = new DirectoryInfo(Path.Combine(cacheDir.FullName, _baseDirectoryName));
            DirectoryInfo versionDir = GetStorageSubdirectory(baseDir, _version);

            Assert.IsFalse(versionDir.Exists);
            Assert.IsFalse(baseDir.Exists);
            storage.Get();
            versionDir.Refresh();
            baseDir.Refresh();
            Assert.IsTrue(baseDir.Exists);
            Assert.IsTrue(versionDir.Exists);
        }
        public void TestCreateRootDirectoryIfNecessary()
        {
            DynamicDefaultDiskStorage supplier = CreateInternalCacheDirStorage();

            Assert.IsNull(supplier._currentState.DiskStorageDelegate);
            DirectoryInfo cacheDir = new DirectoryInfo(ApplicationData.Current.LocalCacheFolder.Path);
            DirectoryInfo baseDir  = new DirectoryInfo(Path.Combine(cacheDir.FullName, _baseDirectoryName));

            // Directory is clean
            supplier.CreateRootDirectoryIfNecessary(baseDir);
            baseDir.Refresh();
            Assert.IsTrue(baseDir.Exists);

            // Cleanup
            FileTree.DeleteRecursively(baseDir);

            // A file with the same name exists - this should clobber the file, and create a directory
            // instead
            FileInfo dummyFile = new FileInfo(Path.Combine(cacheDir.FullName, _baseDirectoryName));

            Assert.IsTrue(dummyFile.CreateEmpty());
            Assert.IsTrue(dummyFile.Exists);
            supplier.CreateRootDirectoryIfNecessary(baseDir);
            baseDir.Refresh();
            Assert.IsTrue(baseDir.Exists);

            // Cleanup
            FileTree.DeleteRecursively(baseDir);

            // A directory with the same name exists - and with a file in it.
            // Everything should stay the same
            baseDir.Create();
            FileInfo dummyFile2 = new FileInfo(Path.Combine(baseDir.FullName, "dummy1"));

            Assert.IsTrue(dummyFile2.CreateEmpty());
            Assert.IsTrue(dummyFile2.Exists);
            supplier.CreateRootDirectoryIfNecessary(baseDir);
            baseDir.Refresh();
            dummyFile2.Refresh();
            Assert.IsTrue(dummyFile2.Exists);
        }
        public void TestGet_InternalCacheDir()
        {
            DirectoryInfo cacheDir = new DirectoryInfo(ApplicationData.Current.LocalCacheFolder.Path);

            DynamicDefaultDiskStorage storage = CreateInternalCacheDirStorage();

            // Initial state
            Assert.IsNull(storage._currentState.DiskStorageDelegate);

            // After first initialization
            IDiskStorage diskStorageDelegate = storage.Get();

            Assert.AreEqual(diskStorageDelegate, storage._currentState.DiskStorageDelegate);
            Assert.IsTrue(diskStorageDelegate.GetType() == typeof(DefaultDiskStorage));

            DirectoryInfo baseDir = new DirectoryInfo(Path.Combine(cacheDir.FullName, _baseDirectoryName));

            Assert.IsTrue(baseDir.Exists);
            Assert.IsTrue(GetStorageSubdirectory(baseDir, 1).Exists);

            // no change => should get back the same storage instance
            IDiskStorage storage2 = storage.Get();

            Assert.AreEqual(diskStorageDelegate, storage2);

            // Root directory has been moved (proxy for delete). So we should get back a different instance
            DirectoryInfo baseDirOrig = new DirectoryInfo(baseDir.FullName);

            Assert.IsTrue(baseDirOrig.RenameTo(new DirectoryInfo(
                                                   Path.Combine(cacheDir.FullName, "dummydir"))));
            IDiskStorage storage3 = storage.Get();

            Assert.AreNotEqual(diskStorageDelegate, storage3);
            Assert.IsTrue(storage3.GetType() == typeof(DefaultDiskStorage));
            baseDir.Refresh();
            Assert.IsTrue(baseDir.Exists);
            Assert.IsTrue(GetStorageSubdirectory(baseDir, 1).Exists);
        }
        public void TestDeleteStorage()
        {
            DynamicDefaultDiskStorage storage = CreateInternalCacheDirStorage();

            Assert.IsNull(storage._currentState.DiskStorageDelegate);
            storage.DeleteOldStorageIfNecessary();

            storage.Get();
            DirectoryInfo cacheDir   = new DirectoryInfo(ApplicationData.Current.LocalCacheFolder.Path);
            DirectoryInfo versionDir = GetStorageSubdirectory(
                new DirectoryInfo(Path.Combine(cacheDir.FullName, _baseDirectoryName)), _version);

            Assert.IsTrue(versionDir.Exists);
            FileInfo dummyFile = new FileInfo(Path.Combine(versionDir.FullName, "dummy"));

            Assert.IsTrue(dummyFile.CreateEmpty());
            Assert.IsTrue(dummyFile.Exists);
            storage.DeleteOldStorageIfNecessary();
            dummyFile.Refresh();
            versionDir.Refresh();
            Assert.IsFalse(dummyFile.Exists);
            Assert.IsFalse(versionDir.Exists);
            Assert.IsFalse(versionDir.Parent.Exists);
        }