Exemple #1
0
 /**
  * Получает кол-во элементов указанной директории
  */
 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;
 }
Exemple #2
0
 /**
  * Имплементация тестирования получения содержимого поддиректорий
  */
 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);
     }
 }