blob: f348da0c8ee97f9e75ba338aca9f4e9e89cbf39f [file] [log] [blame]
<?php
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved.
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @version //autogentag//
* @filesource
* @package Feed
* @subpackage Tests
*/
/**
* @package Feed
* @subpackage Tests
*/
class ezcTestRegressionTest extends ezcTestCase
{
/**
* How to sort the test files: 'mtime' sorts by modification time, any other
* value sorts by name.
*/
const SORT_MODE = 'name';
protected $files = array();
protected $currentFile;
public function __construct()
{
if ( self::SORT_MODE === 'mtime' )
{
// Sort by modification time to get updated tests first
usort( $this->files,
array( $this, 'sortTestsByMtime' ) );
}
else
{
// Sort it, then the file a.in will be processed first. Handy for development.
usort( $this->files,
array( $this, 'sortTestsByName' ) );
}
parent::__construct();
}
public function getName( $withDataSet = TRUE )
{
return $this->currentFile;
}
public function getFiles()
{
return $this->files;
}
public function setCurrentFile( $file )
{
$this->currentFile = $file;
}
protected function readDirRecursively( $dir, &$total, $onlyWithExtension = false )
{
$extensionLength = strlen( $onlyWithExtension );
$path = opendir( $dir );
if ( $path === false )
{
return;
}
while ( false !== ( $file = readdir( $path ) ) )
{
if ( $file !== "." && $file !== ".." )
{
$new = $dir . DIRECTORY_SEPARATOR . $file;
if ( is_file( $new ) )
{
if ( !$onlyWithExtension ||
substr( $file, -$extensionLength - 1 ) === ".{$onlyWithExtension}" )
{
$total[] = array( 'file' => $new,
'mtime' => filemtime( $new ) );
}
}
elseif ( is_dir( $new ) )
{
$this->readDirRecursively( $new, $total, $onlyWithExtension );
}
}
}
}
protected function sortTestsByMtime( $a, $b )
{
if ( $a['mtime'] != $b['mtime'] )
{
return $a['mtime'] < $b['mtime'] ? 1 : -1;
}
return strnatcmp( $a['file'], $b['file'] );
}
protected function sortTestsByName( $a, $b )
{
return strnatcmp( $a['file'], $b['file'] );
}
protected function outFileName( $file, $inExtension, $outExtension = '.out' )
{
$baseFile = substr( $file, 0, strlen( $file ) - strlen( $inExtension ) );
return $baseFile . $outExtension;
}
public function runTest()
{
if ( $this->currentFile === false )
{
throw new PHPUnit_Framework_ExpectationFailedException( "No currentFile set for test " . __CLASS__ );
}
$exception = null;
$this->retryTest = true;
while ( $this->retryTest )
{
try
{
$this->retryTest = false;
$this->testRunRegression( $this->currentFile );
}
catch ( Exception $e )
{
$exception = $e;
}
}
if ( $exception !== null )
{
throw $exception;
}
}
public static function suite()
{
return new ezcMvcRegressionSuite( __CLASS__ );
}
}
?>