Создайте класс FileSystemVisitor, который позволяет обходить дерево папок в файловой системе, начиная с указанной точки. Указанный класс должен:
- Возвращать все найденные файлы и папки в виде линейной последовательности, для чего реализовать свой итератор (по возможности используя оператор yield)
- Давать возможность задать алгоритм фильтрации найденных файлов и папок в момент создания экземпляра FileSystemVisitor (через специальный перегруженный конструктор). Алгоритм должен задаваться в виде делегата/лямбды
- Генерировать уведомления (через механизм событий) о этапах своей работы. В частности, должны быть реализованы следующие события
- Start и Finish (для начала и конца поиска)
- FileFinded/DirectoryFinded для всех найденных файлов и папок до фильтрации, и FilteredFileFinded/filteredDirectoryFinded для файлов и папок прошедших фильтрацию. Данные события должны позволять (через установку специальных флагов в переданных параметрах):
- прервать поиск
- исключить файлы/папки из конечного списка
Напишите библиотеку тестов, демонстрирующих различные режимы работы FileSystemVisitor. Необходимость использования моков (mock) согласуйте с ментором.