public async Task TextFileRamDisk_Tests_GetDirectories_DiskName_UnknownDirectory()
        {
            // ILogger will only print to Output when tests are run in Debug mode.
            ILogger logger = new Logger();

            logger.SetWorker(
                (type, loggingLevel, logAction, message) =>
                {
                    Debug.WriteLine("ILogger: {0}, {1}, {2}, {3}", type, loggingLevel, logAction, message);
                }
                );

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestStart, "TextFileRamDisk_Tests_GetDirectories_DiskName_UnknownDirectory");

            const string name = "C";
            var disk = new TextFileRamDisk.TextFileRamDisk(name, logger);

            Assert.IsFalse(disk.DiskName.Equals(name.ToUpper()));
            Assert.IsTrue(disk.DiskName.Equals(name.ToLower()));

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestEnd, "TextFileRamDisk_Tests_GetDirectories_DiskName_UnknownDirectory");
        }
        public async Task TextFileRamDisk_Tests_GetDirectories_IsOfType_List_String()
        {
            // ILogger will only print to Output when tests are run in Debug mode.
            ILogger logger = new Logger();

            logger.SetWorker(
                (type, loggingLevel, logAction, message) =>
                {
                    Debug.WriteLine("ILogger: {0}, {1}, {2}, {3}", type, loggingLevel, logAction, message);
                }
                );

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestStart, "TextFileRamDisk_Tests_GetDirectories_IsOfType_List_String");

            var disk = new TextFileRamDisk.TextFileRamDisk("C", logger);

            var dirs = disk.GetDirectoryNames();

            Assert.IsTrue(dirs.Count.Equals(0));
            Assert.IsInstanceOfType(dirs, typeof (List<string>));

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestEnd, "TextFileRamDisk_Tests_GetDirectories_IsOfType_List_String");
        }
        public async Task TextFileRamDisk_Tests_GetDirectory()
        {
            // ILogger will only print to Output when tests are run in Debug mode.
            ILogger logger = new Logger();

            logger.SetWorker(
                (type, loggingLevel, logAction, message) =>
                {
                    Debug.WriteLine("ILogger: {0}, {1}, {2}, {3}", type, loggingLevel, logAction, message);
                }
                );

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestStart, "TextFileRamDisk_Tests_GetDirectory");

            var diskName = "C";

            var disk = new TextFileRamDisk.TextFileRamDisk(diskName, logger);

            ITextFileRamDiskDirectory dir = null;

            try
            {
                dir = disk.GetDirectory("TestName");
            }
            catch (DirectoryNotFoundException ex)
            {
                Assert.IsTrue(
                    ex.Message.Equals(
                        "DirectoryNotFoundException: The directory 'TestName' was not found. [Com.Xamtastic.Patterns.TextFileRamDisk.Exceptions]"));
            }

            disk.AddDirectory("something");

            Assert.IsTrue(disk.DirectoryCount.Equals(1));

            dir = disk.GetDirectory("something");

            Assert.IsNotNull(dir);

            Assert.IsTrue(dir.DirectoryName.Equals("something"));

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestEnd, "TextFileRamDisk_Tests_GetDirectory");
        }
        public async Task TextFileRamDisk_Tests_GetDirectory_Write_Read_File()
        {
            // ILogger will only print to Output when tests are run in Debug mode.
            ILogger logger = new Logger();

            logger.SetWorker(
                (type, loggingLevel, logAction, message) =>
                {
                    Debug.WriteLine("ILogger: {0}, {1}, {2}, {3}", type, loggingLevel, logAction, message);
                }
                );

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestStart, "TextFileRamDisk_Tests_GetDirectory_Write_Read_File");

            var diskName = "C";

            var disk = new TextFileRamDisk.TextFileRamDisk(diskName, logger);

            ITextFileRamDiskDirectory dir = null;

            try
            {
                dir = disk.GetDirectory("TestName");
            }
            catch (DirectoryNotFoundException ex)
            {
                Assert.IsTrue(
                    ex.Message.Equals(
                        "DirectoryNotFoundException: The directory 'TestName' was not found. [Com.Xamtastic.Patterns.TextFileRamDisk.Exceptions]"));
            }

            disk.AddDirectory("something");

            Assert.IsTrue(disk.DirectoryCount.Equals(1));

            dir = disk.GetDirectory("something");

            Assert.IsNotNull(dir);

            Assert.IsTrue(dir.DirectoryName.Equals("something"));

            Assert.IsFalse(dir.FileExists("something.txt"));

            var file = dir.OpenWriter("something.txt", false);

            Assert.IsNotNull(file);
            Assert.IsInstanceOfType(file, typeof (TextWriter));
            Assert.IsInstanceOfType(file, typeof (StreamWriter));

            Assert.IsTrue(dir.FileExists("something.txt"));

            await file.WriteAsync("The quick brown fox");

            file.Close(); // Remember to close the file to flush the text

            var letUsFindIt = disk.GetDirectory("something");

            Assert.IsTrue(letUsFindIt.FileExists("something.txt"));

            var thefoundfile = letUsFindIt.OpenReader("something.txt");

            var thefoundtextTask = await thefoundfile.ReadToEndAsync();

            Assert.IsTrue(thefoundtextTask.Equals("The quick brown fox"));

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestEnd, "TextFileRamDisk_Tests_GetDirectory_Write_Read_File");
        }
        public async Task TextFileRamDisk_Tests_GetDirectories()
        {
            // ILogger will only print to Output when tests are run in Debug mode.
            ILogger logger = new Logger();

            logger.SetWorker(
                (type, loggingLevel, logAction, message) =>
                {
                    Debug.WriteLine("ILogger: {0}, {1}, {2}, {3}", type, loggingLevel, logAction, message);
                }
                );

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestStart, "TextFileRamDisk_Tests_GetDirectories");

            var diskName = "C";

            var disk = new TextFileRamDisk.TextFileRamDisk(diskName, logger);

            disk.AddDirectory("a");
            disk.AddDirectory("b");

            var directories = disk.GetDirectoryNames();

            Assert.IsTrue(directories[0].Equals("a"));
            Assert.IsTrue(directories[1].Equals("b"));

            logger.Log(this.GetType(), LoggingLevel.System, LogAction.UnitTestEnd, "TextFileRamDisk_Tests_GetDirectory");
        }