예제 #1
0
        public void SearchInTailedFilesAndScrollIntoTheEnds()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                    files[i].Append(Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row").ToArray());
                }


                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => int.Parse(str.Split('.')[0]) % 2 != 0);

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    var lines         = fileSearchResult.ReadLines(new ScrollRequest(20, 30)).Select(line => line.Text);
                    var expectedLines = Enumerable.Range(7, 3).Select(i =>
                    {
                        return(i % 2 != 0 ? Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row") : null);
                    })
                                        .Where(t => t != null)
                                        .SelectMany(t => t).ToArray();

                    lines.ShouldAllBeEquivalentTo(expectedLines);
                }
            }
        }
예제 #2
0
        public void SearchInTailedFilesAndAfterAppendOneLineIntoOneFileAndSrollBegins()
        {
            var pulse = new Subject <Unit>();

            using (var files = new TestFileCollection())
            {
                for (int i = 0; i < 10; i++)
                {
                    files.Add(new TestFile());
                    files[i].Append(Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row").ToArray());
                }


                FileSearchResult fileSearchResult = null;
                var search = files.Select(t => t.Info.WatchFile(pulse))
                             .Merge()
                             .Search(str => int.Parse(str.Split('.')[0]) % 2 != 0);

                using (search.Subscribe(x => fileSearchResult = x))
                {
                    pulse.Once();
                    files[0].Append("1. file added new row");
                    pulse.Once();
                    while (fileSearchResult?.Next != null)
                    {
                        fileSearchResult = fileSearchResult?.Next as FileSearchResult;
                    }
                    var lines         = fileSearchResult.ReadLines(new ScrollRequest(20, 0)).Select(line => line.Text);
                    var expectedLines = Enumerable.Range(1, 3).Select(i =>
                    {
                        return(i % 2 != 0 ? Enumerable.Range(1, 10).Select(j => $"{i}. files {j}. row") : null);
                    })
                                        .Where(t => t != null)
                                        .SelectMany(t => t).ToList();
                    expectedLines.RemoveAt(expectedLines.Count - 1);
                    expectedLines =
                        new[] { new[] { "1. file added new row" }, expectedLines.ToArray() }.SelectMany(t => t).ToList();
                    lines.ShouldAllBeEquivalentTo(expectedLines.ToArray());
                }
            }
        }