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); } } }
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()); } } }