/** * Получает кол-во элементов указанной директории */ public final function getDirContentCnt($dirs = null, $filterName = null) { $cnt = 0; $absDirPath = $this->absDirPath($dirs); if (is_dir($absDirPath)) { $dir = openDir($absDirPath); if ($dir) { while ($file = readdir($dir)) { if (!is_valid_file_name($file)) { continue; } if (!$filterName || DirItemFilter::filter($filterName, $this->getDirItem($dirs, $file))) { ++$cnt; } } closedir($dir); } } return $cnt; }
/** * Имплементация тестирования получения содержимого поддиректорий */ private function doTestGetDirContentFull($deepLevel, $filterType, $exceptDirs = array(), $forceEnableDirs = array()) { $dm = DirManager::inst(DirManagerTestHelper::dirsAbsPath()); $dm->cd(DirManagerTestHelper::SCRAP); //Найденные элементы кучи, отфильтрованные по текстовому фильтру (фильтр/расширение) $itemsFound = $dm->getDirContentFull(null, $filterType, $exceptDirs, $forceEnableDirs); //Найденные элементы кучи, отфильтрованные при помощи функции обратного вызова $itemsFoundCallback = $dm->getDirContentFull(null, function (DirItem $di) use($filterType) { return DirItemFilter::filter($filterType, $di); }, $exceptDirs, $forceEnableDirs); $this->assertEquals($itemsFound, $itemsFoundCallback); $itemsFiltered = DirManagerTestHelper::SCRAP_FILTER($filterType); //Проверим, что для фильтра есть проверка $this->assertTrue(count($itemsFound) > 0, 'No items filtered for: ' . $filterType); //Проверим, что было извлечено кол-во элементов по кол-ву вложения кучи $this->assertTrue(count($itemsFound) == count($itemsFiltered) * $deepLevel, "filterType={$filterType}, deepLevel={$deepLevel}"); //Пробежимся по мапу и проверим, что все элементы действительно фильтруются //Параллельно разобъём элементы в группы по названиям $GROUPS = array(); /* @var $item DirItem */ foreach ($itemsFound as $item) { $this->assertTrue(DirItemFilter::filter($filterType, $item)); $this->assertTrue(DirItemFilter::filter(function (DirItem $di) use($filterType) { return DirItemFilter::filter($filterType, $di); }, $item)); //Будем сразу складывать в ассоциативный массив, чтобы потом не думать о проверке уникальности $GROUPS[$item->getName()][$item->getDirname()] = 1; } //Проверим вложенность подпапок. Достаточно проверить, что они не пересекаются foreach ($GROUPS as $pathes) { $this->assertTrue(count($pathes) == $deepLevel); } }