PHP Classes

File: vendor/gabordemooij/redbean/testing/cli/runtests.php

Recommend this page to a friend!
  Classes of Adrian M   upMVC   vendor/gabordemooij/redbean/testing/cli/runtests.php   Download  
File: vendor/gabordemooij/redbean/testing/cli/runtests.php
Role: Example script
Content type: text/plain
Description: Example script
Class: upMVC
Pure PHP web development without other frameworks
Author: By
Last change:
Date: 1 month ago
Size: 8,599 bytes
 

Contents

Class file image Download
<?php

function redunit_error_handler($errno,$errstr,$errfile,$errline) {
   
$err = "REDUNITERROR: $errno,$errstr,$errfile,$errline";
   
/* ignore certain errors like deprecated notices that have already been checked in main code */
   
if (strpos($err,'PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT') !== FALSE) {
        return
FALSE;
    }
    echo
$err;
    throw new \
Exception($err);
    return
TRUE;
}

chdir( '..' );
$xdebugSupported = (function_exists('xdebug_start_code_coverage'));

if (
$xdebugSupported) xdebug_start_code_coverage( XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE );
require
'testcontainer/rb.php';

//load core classes
require 'RedUNIT.php';
error_reporting( E_ALL );

//Load configuration file
if ( file_exists( 'config/test.ini' ) ) {
   
$ini = parse_ini_file( "config/test.ini", TRUE );
   
$travis = FALSE;
} elseif (
file_exists( 'config/test-travis.ini' ) ) {
   
$ini = parse_ini_file( "config/test-travis.ini", TRUE );
   
$travis = TRUE;
} else {
    die(
'Cant find configuration file.' );
}

echo
'*** RedUNIT ***'.PHP_EOL;
echo
'Welcome to RedUNIT Unit testing framework for RedBeanPHP.'.PHP_EOL;
echo
PHP_EOL;

echo
sprintf('PHP version: %s', phpversion());
echo
PHP_EOL;

/**
 * Define some globals.
 */
global $pdo;
global
$currentDriver;

//Load basic functions and classes
require_once( 'helpers/functions.php' );
require_once(
'helpers/classes.php' );

//Load main classes
require_once( 'RedUNIT/Base.php' );
require_once(
'RedUNIT/Blackhole.php' );
require_once(
'RedUNIT/Mysql.php' );
require_once(
'RedUNIT/Postgres.php' );
require_once(
'RedUNIT/Sqlite.php' );
require_once(
'RedUNIT/CUBRID.php' );
require_once(
'RedUNIT/Pretest.php' );

$extraTestsFromHook = array();
$hookPath = '';

$colorMap = array(
        
'mysql' => '0;31',
        
'pgsql' => '0;32',
        
'sqlite' => '0;34',
        
'CUBRID' => '0;35',
);

@include
'cli/test_hook.php';

//Configure the databases
if ( isset( $ini['mysql'] ) ) {
   
$dsn = "mysql:host={$ini['mysql']['host']};dbname={$ini['mysql']['schema']}";

   
R::addDatabase( 'mysql', $dsn, $ini['mysql']['user'], $ini['mysql']['pass'], FALSE );
   
R::addDatabase( 'mysqlc', $dsn, $ini['mysql']['user'], $ini['mysql']['pass'], FALSE );
   
R::addDatabase( 'mysqlc2', $dsn, $ini['mysql']['user'], $ini['mysql']['pass'], FALSE );

   
R::selectDatabase( 'mysql' );

   
R::exec( ' SET GLOBAL sql_mode="" ' );
}

//HHVM on Travis does not yet support PostgreSQL.
if ( defined( 'HHVM_VERSION' ) ) {
    unset(
$ini['pgsql'] );
} else {
    if ( isset(
$ini['pgsql'] ) ) {
       
$dsn = "pgsql:host={$ini['pgsql']['host']};dbname={$ini['pgsql']['schema']}";
       
R::addDatabase( 'pgsql', $dsn, $ini['pgsql']['user'], $ini['pgsql']['pass'], FALSE );
       
R::addDatabase( 'pgsqlc', $dsn, $ini['pgsql']['user'], $ini['pgsql']['pass'], FALSE );
       
R::addDatabase( 'pgsqlc2', $dsn, $ini['pgsql']['user'], $ini['pgsql']['pass'], FALSE );
    }
}

if ( isset(
$ini['sqlite'] ) ) {
   
R::addDatabase( 'sqlite', 'sqlite:' . $ini['sqlite']['file'], NULL, NULL, FALSE );
   
R::selectDatabase( 'sqlite' );
}

if ( isset(
$ini['CUBRID'] ) ) {
      
$dsn = "cubrid:host={$ini['CUBRID']['host']};port=33000;dbname={$ini['CUBRID']['schema']}";
      
R::addDatabase( 'CUBRID', $dsn, $ini['CUBRID']['user'], $ini['CUBRID']['pass'], FALSE );
      
R::selectDatabase( 'CUBRID' );
      
R::exec( 'AUTOCOMMIT IS ON' );
}

// Function to activate a driver
function activate_driver( $d )
{
   
R::selectDatabase( $d );
}

$arguments = $_SERVER['argc'];

$mode = 'all';
if (
$arguments > 1 ) {
   
$mode = $_SERVER['argv'][1];
}

$classSpec = null;
if (
$arguments > 2 ) {
   
$classSpec = $_SERVER['argv'][2];
}

$covFilter = null;
if (
$arguments > 3 ) {
   
$covFilter = $_SERVER['argv'][3];
}

$path = 'RedUNIT/';

// Possible Selections
$packList = array();

$allPacks = array(
   
'Blackhole/Version',
   
'Blackhole/Toolbox',
   
'Blackhole/Fusebox',
   
'Blackhole/Labels',
   
'Blackhole/Tainted',
   
'Blackhole/Meta',
   
'Blackhole/Import',
   
'Blackhole/Export',
   
'Blackhole/Glue',
   
'Blackhole/Plugins',
   
'Blackhole/Debug',
   
'Blackhole/Stub',
   
'Base/Productivity',
   
'Base/Quickexport',
   
'Base/Hybrid',
   
'Base/Concurrency',
   
'Base/Dispense',
   
'Base/Logging',
   
'Base/Cursors',
   
'Base/Indexes',
   
'Base/Issue408',
   
'Base/Threeway',
   
'Base/Chill',
   
'Base/Arrays',
   
'Base/Boxing',
   
'Base/Typechecking',
   
'Base/Observers',
   
'Base/Database',
   
'Base/Exceptions',
   
'Base/Foreignkeys',
   
'Base/Namedparams',
   
'Base/Prefixes',
   
'Base/Copy',
   
'Base/Dup',
   
'Base/Update',
   
'Base/Utf8',
   
'Base/Batch',
   
'Base/Bean',
   
'Base/Writecache',
   
'Base/Relations',
   
'Base/Association',
   
'Base/Aliasing',
   
'Base/Cross',
   
'Base/Finding',
   
'Base/Partial',
   
'Base/Facade',
   
'Base/Frozen',
   
'Base/Fuse',
   
'Base/Tags',
   
'Base/Xnull',
   
'Base/Largenum',
   
'Base/Issue90',
   
'Base/Issue259',
   
'Base/Issue303',
   
'Base/Nuke',
   
'Base/Keywords',
   
'Base/Count',
   
'Base/With',
   
'Base/Joins',
   
'Base/Traverse',
   
'Base/Misc',
   
'Base/Via',
   
'Base/PullRequest530',
   
'Base/Issue841',
   
'Base/Either',
   
'Mysql/Preexist',
   
'Mysql/Double',
   
'Mysql/Writer',
   
'Mysql/Freeze',
   
'Mysql/Setget',
   
'Mysql/Foreignkeys',
   
'Mysql/Parambind',
   
'Mysql/Uuid',
   
'Mysql/Bigint',
   
'Mysql/Issue411',
   
'Postgres/Setget',
   
'Postgres/Foreignkeys',
   
'Postgres/Parambind',
   
'Postgres/Writer',
   
'Postgres/Uuid',
   
'Postgres/Bigint',
   
'Postgres/Partial',
   
'Postgres/Trees',
   
'Sqlite/Setget',
   
'Sqlite/Foreignkeys',
   
'Sqlite/Parambind',
   
'Sqlite/Writer',
   
'Sqlite/Rebuild',
   
'CUBRID/Writer',
   
'CUBRID/Setget',
);

$suffix = array(
   
'Blackhole/Misc',
   
'Base/Close'
);

// Default (mode == all)
if ( $mode == 'all' ) {
   
$packList = $allPacks;
} else {
    foreach (
$allPacks as $pack ) {
        if (
strpos( $pack, $mode ) === 0 ) $packList[] = $pack;
    }
   
//Add plugin pack to list.
   
if ( count($packList) === 0 && count($extraTestsFromHook) === 0 ) {
       
$packList[] = $mode;
    }
}

// Always include the last ones.
$packList = array_unique(array_merge( $packList, $suffix, $extraTestsFromHook ));
$j = 0;
foreach (
$packList as $testPack ) {
   
$j++;
    if (
file_exists( $path . $testPack . '.php' ) ) require( $path . $testPack . '.php' );
    elseif (
file_exists( $hookPath . $testPack . '.php') ) require( $hookPath . $testPack . '.php' );
   
$testPack = str_replace( '../', '', $testPack );
    if (
$j === 1 && $classSpec) {
       
$testClass = $classSpec;
    } else {
       
$testClassName = str_replace( ' ', '\\', ( str_replace( '/', ' ', $testPack ) ) );
       
$testClass = '\\RedUNIT\\' . ucfirst( $testClassName );
    }
   
$test = new $testClass();
   
$drivers = $test->getTargetDrivers();
   
maintestpack( str_replace( '_', ' ', get_class( $test ) ) );
   
$round = 0;
   
$test->setRound( $round );
    if (
$drivers && is_array( $drivers ) ) {
        foreach (
$drivers as $driver ) {
            if ( !isset(
$ini[$driver] ) ) continue;
            echo
PHP_EOL;
            echo
'===== DRIVER : (' . $driver . ') =====';
            echo
PHP_EOL;
            echo
PHP_EOL;
            if ( isset(
$colorMap[$driver] ) ) {
                echo
"\033[{$colorMap[$driver]}m";
            }
           
activate_driver( $driver );
           
$currentDriver = $driver;
           
$test->setCurrentDriver( $driver );
           
$test->prepare();
           
$test->run();
           
$test->cleanUp();
            if ( isset (
$colorMap[$driver] ) ) {
                echo
"\033[0m";
            }
            echo
PHP_EOL;
           
$test->setRound( ++$round );
        }
    } else {
       
$test->prepare();
       
$test->run();
       
$test->cleanUp();
    }
}

if (!
$xdebugSupported) {
    echo
'Done. No report - XDEBUG not installed.';
    exit(
0);
}

$report = xdebug_get_code_coverage();
$misses = 0;
$hits = 0;

$covLines = array();
foreach(
$report as $file => $lines ) {

   
$pi = pathinfo( $file );

    if (
$covFilter !== null ) {
        if (
strpos( $file, $covFilter ) === FALSE ) continue;
    } else {
        if (
strpos( $file, '/rb.php' ) === FALSE ) {
            if (
strpos( $file, 'phar/' ) === FALSE ) continue;
            if (
strpos( $file, '.php' ) === FALSE ) continue;
            if (
strpos( $file, 'RedBeanPHP' ) === FALSE ) continue;
        }
    }
   
$covLines[] = '***** File:'.$file.' ******';
   
$fileData = file_get_contents( $file );
   
$fileLines = explode( "\n", $fileData );
   
$i = 1;
    foreach(
$fileLines as $covLine ) {
        if ( isset(
$lines [$i] ) ) {
            if (
$lines[$i] === 1 ) {
               
$covLines[] = '[ OK ] '.$covLine;
               
$hits ++;
            } else if (
$lines[$i] === -1 ){
               
$covLines[] = '[ MISSED! ] '.$covLine;
               
$misses ++;
            } else {
               
$covLines[] = '[ - ] '.$covLine;
            }
        } else {
           
$covLines[] = '[ - ] '.$covLine;
        }
       
$i ++;
    }
}
$covFile = implode( "\n", $covLines );
@
file_put_contents( 'cli/coverage_log.txt', $covFile );
if (
$hits > 0 ) {
   
$perc = ( $hits / ( $hits + $misses ) ) * 100;
} else {
   
$perc = 0;
}
echo
'Code Coverage: '.PHP_EOL;
echo
'Hits: '.$hits.PHP_EOL;
echo
'Misses: '.$misses.PHP_EOL;
echo
'Percentage: '.$perc.' %'.PHP_EOL;
exit(
0 );