Login   Register  
PHP Classes
elePHPant
Icontem

File: Test/Files/DirectoryListing.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  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: 2007-06-24 03:26
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($elementstrrpos($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');
        }
    }
}