private void AssertEventCounters(EventCounters expected)
 {
     Assert.AreEqual(expected.Start, actualEventCounters.Start, "Start event counter after iteration.");
     Assert.AreEqual(expected.Finish, actualEventCounters.Finish, "Finish event counter after iteration.");
     Assert.AreEqual(expected.DirectoriesFind, actualEventCounters.DirectoriesFind, "DirectoryFinded event counter after iteration.");
     Assert.AreEqual(expected.FilesFind, actualEventCounters.FilesFind, "FileFinded event counter after iteration.");
     Assert.AreEqual(expected.FilteredDirectoriesFind, actualEventCounters.FilteredDirectoriesFind, "FilteredDirectoryFinded event counter after iteration.");
     Assert.AreEqual(expected.FilteredFilesFind, actualEventCounters.FilteredFilesFind, "FilteredFileFinded event counter after iteration.");
 }
        public void Search_Events_Skip_5(IEnumerable <string> directories, IEnumerable <string> files, IEnumerable <string> expected, EventCounters expectedEventCounters)
        {
            int count = 5;

            expected = expected.Skip(count);
            var mock = CreateMock(directories, files);

            mock.Protected().Setup("OnDirectoryFinded", ItExpr.IsAny <FileSystemVisitorEventArgs>())
            .Callback((FileSystemVisitorEventArgs e) =>
            {
                actualEventCounters.DirectoriesFind++;
                if (count-- > 0)
                {
                    e.Skip = true;
                }
            });
            mock.Protected().Setup("OnFileFinded", ItExpr.IsAny <FileSystemVisitorEventArgs>())
            .Callback((FileSystemVisitorEventArgs e) =>
            {
                actualEventCounters.FilesFind++;
                if (count-- > 0)
                {
                    e.Skip = true;
                }
            });

            var actual = mock.Object.Search();

            AssertActualEventCountersIsZero();
            CollectionAssert.AreEqual(expected, actual);
            AssertEventCounters(expectedEventCounters);
        }
        public void Search_Events_Abort_3_WithPredicate(IEnumerable <string> directories, IEnumerable <string> files, Predicate <string> predicate, IEnumerable <string> expected, EventCounters expectedEventCounters)
        {
            int count       = 3;
            int eventsCount = count + 1;

            expected = expected.Take(count);
            expectedEventCounters.FilteredDirectoriesFind = Math.Min(expectedEventCounters.FilteredDirectoriesFind, eventsCount);
            expectedEventCounters.FilteredFilesFind       = Math.Min(expectedEventCounters.FilteredFilesFind, eventsCount - expectedEventCounters.FilteredDirectoriesFind);

            var mock = CreateMock(directories, files, predicate);

            mock.Protected().Setup("OnFilteredDirectoryFinded", ItExpr.IsAny <FileSystemVisitorEventArgs>())
            .Callback((FileSystemVisitorEventArgs e) =>
            {
                actualEventCounters.FilteredDirectoriesFind++;
                if (--count < 0)
                {
                    e.Abort = true;
                }
            });
            mock.Protected().Setup("OnFilteredFileFinded", ItExpr.IsAny <FileSystemVisitorEventArgs>())
            .Callback((FileSystemVisitorEventArgs e) =>
            {
                actualEventCounters.FilteredFilesFind++;
                if (--count < 0)
                {
                    e.Abort = true;
                }
            });

            var actual = mock.Object.Search();

            AssertActualEventCountersIsZero();
            CollectionAssert.AreEqual(expected, actual);

            expectedEventCounters.DirectoriesFind = actualEventCounters.DirectoriesFind;
            expectedEventCounters.FilesFind       = actualEventCounters.FilesFind;
            AssertEventCounters(expectedEventCounters);
        }
        public void Search_Events_WithPredicate(IEnumerable <string> directories, IEnumerable <string> files, Predicate <string> predicate, IEnumerable <string> expected, EventCounters expectedEventCounters)
        {
            var mock   = CreateMock(directories, files, predicate);
            var actual = mock.Object.Search();

            AssertActualEventCountersIsZero();
            CollectionAssert.AreEqual(expected, actual);
            AssertEventCounters(expectedEventCounters);
        }