public async Task TestClear()
        {
            TaskCompletionSource <bool> source = new TaskCompletionSource <bool>();

            IQueuedFileWriter fileWriter = new QueuedFileWriter(ApplicationData.Current.LocalFolder, "test.txt");
            await fileWriter.WriteLine("1");

            await fileWriter.WriteLine("2");

            await fileWriter.WriteLine("3");

            fileWriter.QueueEmpty += () => source.SetResult(true);
            await fileWriter.WriteLine("4");

            await source.Task;
            List <string> list = new List <string>()
            {
                "1", "2", "3", "4"
            };
            List <string> collection = (await FileIO.ReadLinesAsync(await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt", CreationCollisionOption.OpenIfExists))).ToList();

            Assert.AreEqual(list.Count, collection.Count, "Not 4 elements");
            CollectionAssert.AreEqual(list, collection);

            await fileWriter.Clear();

            collection = (await FileIO.ReadLinesAsync(await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt", CreationCollisionOption.OpenIfExists))).ToList();
            Assert.AreEqual(0, collection.Count, "Not 0 elements");

            collection = await fileWriter.ReadLines();

            Assert.AreEqual(0, collection.Count, "Not 0 elements");
        }
        public async Task TestReadWriteFile()
        {
            IQueuedFileWriter fileWriter = new QueuedFileWriter(ApplicationData.Current.LocalFolder, "test.txt");
            List <string>     list       = new List <string>();

            for (int i = 0; i < 40; i++)
            {
                await fileWriter.WriteLine(i.ToString());

                list.Add(i.ToString());
            }
            Assert.IsNotNull(await fileWriter.ReadLines());
        }
        public async Task TestReadCacheFile()
        {
            TaskCompletionSource <bool> source     = new TaskCompletionSource <bool>();
            IQueuedFileWriter           fileWriter = new QueuedFileWriter(ApplicationData.Current.LocalFolder, "test.txt");
            List <string> list = new List <string>();

            for (int i = 0; i < 40; i++)
            {
                if (i >= 39)
                {
                    fileWriter.QueueEmpty += () => source.SetResult(true);
                }
                await fileWriter.WriteLine(i.ToString());

                list.Add(i.ToString());
            }
            await source.Task;
            List <string> collection = await fileWriter.ReadLines();

            Assert.AreEqual(list.Count, collection.Count, "Not 40 elements");
            CollectionAssert.AreEqual(list, collection);
        }
        public async Task TestMultipleWriteFile()
        {
            TaskCompletionSource <bool> source1 = new TaskCompletionSource <bool>();

            IQueuedFileWriter fileWriter = new QueuedFileWriter(ApplicationData.Current.LocalFolder, "test.txt");
            await fileWriter.WriteLine("1");

            await fileWriter.WriteLine("2");

            await fileWriter.WriteLine("3");

            fileWriter.QueueEmpty += () => source1.TrySetResult(true);
            await fileWriter.WriteLine("4");

            await source1.Task;
            List <string> list = new List <string>()
            {
                "1", "2", "3", "4"
            };
            StorageFile storageFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("test.txt", CreationCollisionOption.OpenIfExists);

            List <string> collection = (await FileIO.ReadLinesAsync(storageFile)).ToList();

            Assert.AreEqual(list.Count, collection.Count, "Not 4 elements");
            CollectionAssert.AreEqual(list, collection);

            //second write on same object
            TaskCompletionSource <bool> source2 = new TaskCompletionSource <bool>();

            await fileWriter.WriteLine("1");

            await fileWriter.WriteLine("2");

            await fileWriter.WriteLine("3");

            fileWriter.QueueEmpty += () => source2.TrySetResult(true);
            await fileWriter.WriteLine("4");

            await source2.Task;

            list = new List <string>()
            {
                "1", "2", "3", "4", "1", "2", "3", "4"
            };

            collection = (await FileIO.ReadLinesAsync(storageFile)).ToList();
            Assert.AreEqual(list.Count, collection.Count, "Not 8 elements");
            CollectionAssert.AreEqual(list, collection);

            //thrid write on new object
            TaskCompletionSource <bool> source3 = new TaskCompletionSource <bool>();

            fileWriter.Dispose();
            fileWriter = new QueuedFileWriter(ApplicationData.Current.LocalFolder, "test.txt");
            await fileWriter.WriteLine("1");

            await fileWriter.WriteLine("2");

            await fileWriter.WriteLine("3");

            fileWriter.QueueEmpty += () => source3.TrySetResult(true);
            await fileWriter.WriteLine("4");

            await source3.Task;

            list = new List <string>()
            {
                "1", "2", "3", "4", "1", "2", "3", "4", "1", "2", "3", "4"
            };
            collection = (await FileIO.ReadLinesAsync(storageFile)).ToList();
            Assert.AreEqual(list.Count, collection.Count, "Not 12 elements");
            CollectionAssert.AreEqual(list, collection);
        }