PHP Classes

File: Test/Files/DirectoryListing.php

Recommend this page to a friend!
  Classes of MARY Matthieu   Files_DirectoryListing   Test/Files/DirectoryListing.php   Download  
File: Test/Files/DirectoryListing.php
Role: Unit test script
Content type: text/plain
Description: Unit test class for Files_DirectoryListing
Class: Files_DirectoryListing
Browse directories and their files
Author: By
Last change: move file in framework
Date: 16 years ago
Size: 5,453 bytes
 

Contents

Class file image Download
<?php
/**
 * $Id: Dir.class.php 562 2006-09-28 16:38:53Z matthieu $
 */
if (!class_exists('Test_Files_DirectoryListing')) {
    if (!
defined('__CLASS_PATH__')) {
       
define('__CLASS_PATH__', realpath(dirname(__FILE__) . '/../../'));
    }
    if (!
defined('__SIMPLETEST_PATH__')) {
       
define('__SIMPLETEST_PATH__', realpath(__CLASS_PATH__ . '/simpletest/'));
    }
    require_once
__SIMPLETEST_PATH__ . '/shell_tester.php';
    require_once
__SIMPLETEST_PATH__ . '/reporter.php';
    require_once
__CLASS_PATH__ . '/Autoload.php';
   
/**
     * unit test case for Files_DirectoryListing
     * @author matthieu <matthieu@phplibrairies.com>
     * @package files
     * @subpackage unit_test_case
     */
   
class Test_Files_DirectoryListing extends ShellTestCase {
       
/**
         * @var array $references references values
         * @access private
         */
       
private $references = array ();
       
/**
         * @var mixed $dir_obj : the directory object
         * @access private
         */
       
private $dir_obj = null;
       
/**
         * constructor
         * @access public
         * @return void
         */
       
public function __construct() {
           
parent :: __construct();
           
// use the class path reference as default
           
$this->references = $this->getFileListFromFolder(__CLASS_PATH__, true);
           
sort($this->references);
           
$this->dir_obj = new Files_DirectoryListing(__CLASS_PATH__);
        }
       
/**
         * return a list of file in a folder
         * @access private
         * @return array
         * @param string $folder : folder to analyse
         * @param boolean $throw_exception : does we need to throw exception if we can open the folder?
         */
       
private function getFileListFromFolder($folder, $throw_exception = false) {
           
$filelist = array ();
           
$dir = opendir($folder);
            if (!
$dir) {
                if (
$throw_exception) {
                    throw
Exception('Cannot browse the reference folder. Abort');
                }
            }
            else {
               
$full_path = '';
                while ((
$file = readdir($dir)) !== false) {
                    if (!
in_array($file, array (
                           
'.',
                           
'..'
                       
))) {
                       
$full_path = $folder . '/' . $file;
                        if (
is_dir($full_path)) {
                           
$filelist = array_merge($filelist, $this->getFileListFromFolder($full_path));
                        }
                       
$filelist[] = $full_path;
                    }
                }
               
closedir($dir);
            }
            return
$filelist;
        }
       
/**
         * test the LIST_files method
         * @access public
         * @return void
         */
       
public function test_LIST_files_with_subfolders() {
           
$files = $this->dir_obj->LIST_files('--s');
           
$expected_results = array ();
            foreach (
$this->references as $element) {
                if (
is_file($element)) {
                   
$expected_results[] = $element;
                }
            }
           
$this->_testAnswer($files, $expected_results);
        }
       
/**
         * test the LIST_files method for subfolders and extension query
         * @access public
         * @return void
         */
       
public function test_LIST_files_with_subfolders_and_extensions() {
           
$files = $this->dir_obj->LIST_files('--s --e php,php5,inc');
           
$expected_results = array ();
            foreach (
$this->references as $element) {
                if (
is_file($element)) {
                   
$extension = substr($element, strrpos($element, '.') + 1);
                    if (
in_array($extension, array (
                           
'php',
                           
'php5',
                           
'inc'
                       
))) {
                       
$expected_results[] = $element;
                    }
                }
            }
           
$this->_testAnswer($files, $expected_results);
        }
       
/**
         * test the LIST_files method
         * @access public
         * @return void
         */
       
public function test_LIST_dir_with_subfolders() {
           
$files = $this->dir_obj->LIST_dir('--s');
           
$expected_results = array ();
            foreach (
$this->references as $element) {
                if (
is_dir($element)) {
                   
$expected_results[] = $element;
                }
            }
           
$this->_testAnswer($files, $expected_results);
        }
       
/**
         * test the LIST_files method
         * @access public
         * @return void
         * @throws Exception
         */
       
public function test_LIST_dir_with_creation_date() {
           
$create_dir = dirname(__FILE__) . '/temp';
            if (
mkdir($create_dir)) {
               
$this->references[] = $create_dir;
               
$current_date = date("dmY");
               
$files = $this->dir_obj->LIST_dir('--s --dc = ' . $current_date);
               
$expected_results = array ();
                foreach (
$this->references as $element) {
                    if (
is_dir($element) && (date("dmY", filectime($element)) == $current_date)) {
                       
$expected_results[] = $element;
                    }
                }
               
$this->_testAnswer($files, $expected_results);
               
$this->assertTrue(in_array($create_dir, $files), "We cannot found with pattern --s --dc = " . $current_date . " the folder $create_dir make today by this test class");
                if (!
rmdir($create_dir)) {
                    throw new
Exception('test folder ' . $create_dir . ' cannot be deleted. You must do it self');
                }
                else {
                   
array_pop($this->references);
                }
            }
            else {
                throw new
Exception('We cannot create the folder ' . $create_dir . ' this, test is aborded');
            }
        }
       
/**
         * @param array $answer : the list of object found
         * @acces private
         * @return void
         */
       
private function _testAnswer($list, $expected_number_of_results = array ()) {
           
$this->assertTrue(is_array($list), 'Answer is not an array');
            if (
count($expected_number_of_results) > 0) {
               
$this->assertTrue((count($list) > 0), 'File list must not be empty');
            }
           
$this->assertTrue((count($list) == count($expected_number_of_results)), 'List doesnt return the expected element. set the __DEBUG_MODE__ on true to analyse answers');
        }
    }
}