public void OpenReadTestGZipSmallRead()
        {
            using (var res = new ImprovedStream(new SourceAccess(UnitTestInitializeCsv.GetTestPath("BasicCsV.txt.gz"), true)))
            {
                Assert.IsNotNull(res);
                var result1 = new byte[2048];
                using (var reader = new BinaryReader(res))
                {
                    reader.Read(result1, 0, result1.Length);
                }

                // should return to teh start
                res.Seek(0, SeekOrigin.Begin);
                var result2 = new byte[2048];
                using (var reader = new BinaryReader(res))
                {
                    reader.Read(result2, 0, result2.Length);
                }

                Assert.AreEqual(result1[0], result2[0]);
                Assert.AreEqual(result1[1], result2[1]);
                Assert.AreEqual(result1[2], result2[2]);
                Assert.AreEqual(result1[3], result2[3]);
                Assert.AreEqual(result1[4], result2[4]);
                Assert.AreEqual(result1[5], result2[5]);
            }
        }
        public void OpenReadTestGZipLargeRead()
        {
            using (var res = new ImprovedStream(new SourceAccess(UnitTestInitializeCsv.GetTestPath("Larger.json.gz"), true)))
            {
                Assert.IsNotNull(res);

                var result1 = new byte[10000];

                // read a potion that is larger than the buffered stream
                using (var reader = new BinaryReader(res))
                {
                    reader.Read(result1, 0, result1.Length);
                }

                // should return to the start
                res.Seek(0, SeekOrigin.Begin);
                var result2 = new byte[10000];
                using (var reader = new BinaryReader(res))
                {
                    reader.Read(result2, 0, result2.Length);
                }

                Assert.AreEqual(result1[0], result2[0]);
                Assert.AreEqual(result1[1], result2[1]);
                Assert.AreEqual(result1[2], result2[2]);
                Assert.AreEqual(result1[3], result2[3]);
                Assert.AreEqual(result1[4], result2[4]);
                Assert.AreEqual(result1[5], result2[5]);
            }
        }
        public async System.Threading.Tasks.Task AnalyseStreamAsyncFile()
        {
            var stream = FileSystemUtils.OpenRead(UnitTestInitializeCsv.GetTestPath("BasicCSV.txt"));

            ICollection <IColumn> determinedColumns;

            // Not closing the stream

            using (IProcessDisplay process = new CustomProcessDisplay(UnitTestInitializeCsv.Token))
            {
                using (var impStream = new ImprovedStream(stream))
                {
                    var result = await impStream.GetDetectionResult("stream", process, false, true, true, true, true, true, false);

                    impStream.Seek(0, System.IO.SeekOrigin.Begin);

                    using (var reader = new CsvFileReader(impStream, result.CodePageId, result.SkipRows, result.HasFieldHeader,
                                                          new ColumnCollection(), TrimmingOption.Unquoted, result.FieldDelimiter, result.FieldQualifier,
                                                          result.EscapeCharacter, 0, false, false, result.CommentLine, 0, true, string.Empty, string.Empty,
                                                          string.Empty, true, false, true, false, false, false, false, false, false, true, true))
                    {
                        await reader.OpenAsync(process.CancellationToken);

                        var(info, columns) = await reader.FillGuessColumnFormatReaderAsyncReader(new FillGuessSettings(),
                                                                                                 new ColumnCollection(), false, true, "null", process.CancellationToken);

                        determinedColumns = columns.ToList();
                        Assert.AreEqual(6, determinedColumns.Count(), "Recognized columns");
                        Assert.AreEqual(6, info.Count, "Information Lines");
                    }

                    impStream.Seek(0, SeekOrigin.Begin);

                    using (var reader = new CsvFileReader(impStream, result.CodePageId, result.SkipRows, result.HasFieldHeader,
                                                          determinedColumns, TrimmingOption.Unquoted, result.FieldDelimiter, result.FieldQualifier,
                                                          result.EscapeCharacter, 0, false, false, result.CommentLine, 0, true, string.Empty, string.Empty,
                                                          string.Empty, true, false, true, false, false, false, false, false, false, true, true))
                    {
                        await reader.OpenAsync(process.CancellationToken);

                        Assert.AreEqual(6, reader.FieldCount);
                    }
                }
            }
        }
        public void OpenReadTestZipSmallRead()
        {
            var sourceAccess = new SourceAccess(UnitTestInitializeCsv.GetTestPath("AllFormatsPipe.zip"), true);

            // opeing without IdentifierInContainer should return teh first file entry
            using (var res = new ImprovedStream(sourceAccess))
            {
                Assert.AreEqual("AllFormatsPipe.txt", sourceAccess.IdentifierInContainer);
                Assert.IsNotNull(res);
                var result1 = new byte[2048];
                using (var reader = new BinaryReader(res))
                {
                    reader.Read(result1, 0, result1.Length);
                }

                // should return to teh start
                res.Seek(0, SeekOrigin.Begin);
                var result2 = new byte[2048];
                using (var reader = new BinaryReader(res))
                {
                    reader.Read(result2, 0, result2.Length);
                }

                Assert.AreEqual(result1[0], result2[0]);
                Assert.AreEqual(result1[1], result2[1]);
                Assert.AreEqual(result1[2], result2[2]);
                Assert.AreEqual(result1[3], result2[3]);
                Assert.AreEqual(result1[4], result2[4]);
                Assert.AreEqual(result1[5], result2[5]);
            }

            // now sourceAccess.IdentifierInContainer is set,
            using (var res = new ImprovedStream(sourceAccess))
            {
                Assert.IsNotNull(res);
            }
        }