public static bool TryWithFileSystemConstant(this IFileSystem model, out IFileSystemConstant feature)
 {
     Ensure.NotNull(model, "model");
     return(model.TryWith <IFileSystemConstant>(out feature));
 }
            public void CompleteTest()
            {
                string rootPath = @"C:\Temp\FileSystems";

                Assert.AreEqual(true, Directory.Exists(rootPath));
                CleanUpFileSystem(rootPath);

                IFileSystem         fileSystem    = new LocalFileSystem(rootPath);
                IFileSystemConstant constants     = fileSystem.WithFileSystemConstant();
                IDirectory          rootDirectory = fileSystem.RootDirectory;

                Assert.AreEqual('\\', constants.DirectorySeparatorChar);

                // Create directory
                IDirectory d1 = rootDirectory.WithDirectoryCreator().Create("D1");

                Assert.AreEqual("D1", d1.Name);
                Assert.AreEqual(Path.Combine(rootPath, "D1"), d1.WithAbsolutePath().AbsolutePath);
                EnsureAncestors(d1.WithAncestorEnumerator(), "FileSystems", "Temp", "C:\\");

                // Rename directory.
                d1.WithDirectoryRenamer().ChangeName("D1.1");
                Assert.AreEqual("D1.1", d1.Name);
                Assert.AreEqual(Path.Combine(rootPath, "D1.1"), d1.WithAbsolutePath().AbsolutePath);
                Assert.AreEqual(false, Directory.Exists(Path.Combine(rootPath, "D1")));
                Assert.AreEqual(true, Directory.Exists(Path.Combine(rootPath, "D1.1")));


                // Create file
                IFile f1 = d1.WithFileCreator().Create("F1", "txt");

                Assert.AreEqual(true, File.Exists(Path.Combine(rootPath, d1.Name, "F1.txt")));
                Assert.AreEqual(Path.Combine(d1.WithAbsolutePath().AbsolutePath, "F1.txt"), f1.WithAbsolutePath().AbsolutePath);
                Assert.AreEqual("F1", f1.Name);
                Assert.AreEqual("txt", f1.Extension);
                Assert.AreEqual(0, f1.WithFileContentSize().FileSize);

                // Write to file
                f1.WithFileContentUpdater().SetContent("Text");
                Assert.AreEqual("Text", File.ReadAllText(f1.WithAbsolutePath().AbsolutePath));

                // Append to file
                f1.WithFileContentAppender().AppendContent(".T1");
                Assert.AreEqual("Text.T1", File.ReadAllText(f1.WithAbsolutePath().AbsolutePath));

                // Override file content
                f1.WithFileContentUpdater().SetContent("T2");
                Assert.AreEqual("T2", File.ReadAllText(f1.WithAbsolutePath().AbsolutePath));

                // Read file content
                Assert.AreEqual("T2", f1.WithFileContentReader().GetContent());
                Assert.AreEqual(2, f1.WithFileContentSize().FileSize);

                // Rename file
                f1.WithFileRenamer().ChangeName("F1.1");
                Assert.AreEqual("F1.1", f1.Name);
                Assert.AreEqual("txt", f1.Extension);
                Assert.AreEqual(Path.Combine(d1.WithAbsolutePath().AbsolutePath, "F1.1.txt"), f1.WithAbsolutePath().AbsolutePath);
                Assert.AreEqual(false, File.Exists(Path.Combine(d1.WithAbsolutePath().AbsolutePath, "F1.txt")));
                Assert.AreEqual(true, File.Exists(Path.Combine(d1.WithAbsolutePath().AbsolutePath, "F1.1.txt")));

                // Enumerate files.
                IFileEnumerator fe1 = d1.WithFileEnumerator();

                Assert.AreEqual(1, fe1.Count());

                // Create files and directories.
                IFile f2 = d1.WithFileCreator().Create("F2", "txt");
                IFile f3 = d1.WithFileCreator().Create("F3", "rtf");
                IFile f4 = d1.WithFileCreator().Create("f4", "rtf");

                IDirectory d12  = d1.WithDirectoryCreator().Create("D2");
                IFile      f121 = d12.WithFileCreator().Create("F1", "txt");
                IFile      f122 = d12.WithFileCreator().Create("F2", "txt");
                IFile      f123 = d12.WithFileCreator().Create("F3", "rtf");
                IFile      f124 = d12.WithFileCreator().Create("f4", "rtf");

                // Enumerate directories.
                IDirectoryEnumerator de1 = d1.WithDirectoryEnumerator();

                Assert.AreEqual(1, de1.Count());

                // Searching directories
                IEnumerable <IDirectory> s1 = rootDirectory.WithDirectoryNameSearch().FindDirectories(TextSearch.CreatePrefixed("D"));

                Assert.AreEqual(1, s1.Count());

                IEnumerable <IDirectory> s2 = rootDirectory.WithDirectoryPathSearch().FindDirectories(TextSearch.CreatePrefixed("D"));

                Assert.AreEqual(2, s2.Count());

                IEnumerable <IDirectory> s3 = rootDirectory.WithDirectoryPathSearch().FindDirectories(TextSearch.CreateSuffixed("2"));

                Assert.AreEqual(1, s3.Count());

                IEnumerable <IDirectory> s4 = rootDirectory.WithDirectoryPathSearch().FindDirectories(TextSearch.CreateEmpty());

                Assert.AreEqual(2, s4.Count());

                // Searching files
                IEnumerable <IFile> s5 = rootDirectory.WithFileNameSearch().FindFiles(TextSearch.CreatePrefixed("f1"), TextSearch.CreateEmpty());

                Assert.AreEqual(0, s5.Count());

                IEnumerable <IFile> s6 = d1.WithFileNameSearch().FindFiles(TextSearch.CreatePrefixed("f1"), TextSearch.CreateEmpty());

                Assert.AreEqual(1, s6.Count());

                IEnumerable <IFile> s7 = d1.WithFileNameSearch().FindFiles(TextSearch.CreateEmpty(), TextSearch.CreateMatched("txt"));

                Assert.AreEqual(2, s7.Count());

                IEnumerable <IFile> s8 = d1.WithFileNameSearch().FindFiles(TextSearch.CreateContained("f"), TextSearch.CreateEmpty());

                Assert.AreEqual(4, s8.Count());

                IEnumerable <IFile> s9 = rootDirectory.WithFilePathSearch().FindFiles(TextSearch.CreateSuffixed("2"), TextSearch.CreateEmpty());

                Assert.AreEqual(2, s9.Count());


                // Delete file
                f1.WithFileDeleter().Delete();

                //Delete directory
                d1.WithDirectoryDeleter().Delete();
                Assert.AreEqual(false, Directory.Exists(Path.Combine(rootPath, "T1")));
            }