'0;31', 'pgsql' => '0;32', 'sqlite' => '0;34', ); @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::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 ); } } if ( isset( $ini['sqlite'] ) ) { R::addDatabase( 'sqlite', 'sqlite:' . $ini['sqlite']['file'], NULL, NULL, FALSE ); } R::selectDatabase( 'sqlite' ); // 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', '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/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/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', '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', 'Sqlite/Setget', 'Sqlite/Foreignkeys', 'Sqlite/Parambind', 'Sqlite/Writer', 'Sqlite/Rebuild', ); $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 );