Yaffs site version 1.1
[yaffs-website] / vendor / gabordemooij / redbean / testing / cli / runtests.php
diff --git a/vendor/gabordemooij/redbean/testing/cli/runtests.php b/vendor/gabordemooij/redbean/testing/cli/runtests.php
new file mode 100644 (file)
index 0000000..8f75b56
--- /dev/null
@@ -0,0 +1,312 @@
+<?php
+
+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 );
+} elseif ( file_exists( 'config/test-travis.ini' ) ) {
+       $ini = parse_ini_file( "config/test-travis.ini", 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;
+
+/**
+ * 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/Pretest.php' );
+
+$extraTestsFromHook = array();
+$hookPath = '';
+
+$colorMap = array(
+                'mysql'  => '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 );