Switch build tool to Robo, use composer for autoloading

This commit is contained in:
Timothy Warren 2016-09-07 13:06:28 -04:00
parent eef3a30ad0
commit 559c76f8d2
12 changed files with 528 additions and 252 deletions

332
RoboFile.php Normal file
View File

@ -0,0 +1,332 @@
<?php
if ( ! function_exists('glob_recursive'))
{
// Does not support flag GLOB_BRACE
function glob_recursive($pattern, $flags = 0)
{
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir)
{
$files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
}
return $files;
}
}
/**
* This is project's console commands configuration for Robo task runner.
*
* @see http://robo.li/
*/
class RoboFile extends \Robo\Tasks {
/**
* Directories used by analysis tools
*
* @var array
*/
protected $taskDirs = [
'build/logs',
'build/pdepend',
'build/phpdox',
];
/**
* Directories to remove with the clean task
*
* @var array
*/
protected $cleanDirs = [
'coverage',
'docs',
'phpdoc',
'build/logs',
'build/phpdox',
'build/pdepend'
];
/**
* Do static analysis tasks
*/
public function analyze()
{
$this->prepare();
$this->lint();
$this->phploc(TRUE);
$this->phpcs(TRUE);
$this->dependencyReport();
$this->phpcpdReport();
}
/**
* Run all tests, generate coverage, generate docs, generate code statistics
*/
public function build()
{
$this->analyze();
$this->coverage();
$this->docs();
}
/**
* Cleanup temporary files
*/
public function clean()
{
$cleanFiles = [
'build/humbug.json',
'build/humbug-log.txt',
];
array_map(function ($file) {
@unlink($file);
}, $cleanFiles);
// So the task doesn't complain,
// make any 'missing' dirs to cleanup
array_map(function ($dir) {
if ( ! is_dir($dir))
{
`mkdir -p {$dir}`;
}
}, $this->cleanDirs);
$this->_cleanDir($this->cleanDirs);
$this->_deleteDir($this->cleanDirs);
}
/**
* Run unit tests and generate coverage reports
*/
public function coverage()
{
$this->taskPhpUnit()
->configFile('build/phpunit.xml')
->printed(true)
->run();
}
/**
* Generate documentation with phpdox
*/
public function docs()
{
$cmd_parts = [
'cd build',
'../vendor/bin/phpdox',
'cd ..'
];
$this->_run($cmd_parts, ' && ');
}
/**
* Verify that source files are valid
*/
public function lint()
{
$files = $this->getAllSourceFiles();
$chunks = array_chunk($files, (int)`getconf _NPROCESSORS_ONLN`);
foreach($chunks as $chunk)
{
$this->parallelLint($chunk);
}
}
/**
* Run mutation tests with humbug
*
* @param bool $stats - if true, generates stats rather than running mutation tests
*/
public function mutate($stats = FALSE)
{
$test_parts = [
'vendor/bin/humbug'
];
$stat_parts = [
'vendor/bin/humbug',
'--skip-killed=yes',
'-v',
'./build/humbug.json'
];
$cmd_parts = ($stats) ? $stat_parts : $test_parts;
$this->_run($cmd_parts);
}
/**
* Run the phpcs tool
*
* @param bool $report - if true, generates reports instead of direct output
*/
public function phpcs($report = FALSE)
{
$dir = __DIR__;
$report_cmd_parts = [
'vendor/bin/phpcs',
"--standard=./build/CodeIgniter",
"--report-checkstyle=./build/logs/phpcs.xml",
];
$normal_cmd_parts = [
'vendor/bin/phpcs',
"--standard=./build/CodeIgniter",
];
$cmd_parts = ($report) ? $report_cmd_parts : $normal_cmd_parts;
$this->_run($cmd_parts);
}
/**
* Run the phploc tool
*
* @param bool $report - if true, generates reports instead of direct output
*/
public function phploc($report = FALSE)
{
// Command for generating reports
$report_cmd_parts = [
'vendor/bin/phploc',
'--count-tests',
'--log-csv=build/logs/phploc.csv',
'--log-xml=build/logs/phploc.xml',
'src',
'tests'
];
// Command for generating direct output
$normal_cmd_parts = [
'vendor/bin/phploc',
'--count-tests',
'src',
'tests'
];
$cmd_parts = ($report) ? $report_cmd_parts : $normal_cmd_parts;
$this->_run($cmd_parts);
}
/**
* Create temporary directories
*/
public function prepare()
{
array_map([$this, '_mkdir'], $this->taskDirs);
}
/**
* Lint php files and run unit tests
*/
public function test()
{
$this->lint();
$this->taskPHPUnit()
->configFile('phpunit.xml')
->printed(true)
->run();
}
/**
* Watches for file updates, and automatically runs appropriate actions
*/
public function watch()
{
$this->taskWatch()
->monitor('composer.json', function() {
$this->taskComposerUpdate()->run();
})
->monitor('src', function () {
$this->taskExec('test')->run();
})
->monitor('tests', function () {
$this->taskExec('test')->run();
})
->run();
}
/**
* Create pdepend reports
*/
protected function dependencyReport()
{
$cmd_parts = [
'vendor/bin/pdepend',
'--jdepend-xml=build/logs/jdepend.xml',
'--jdepend-chart=build/pdepend/dependencies.svg',
'--overview-pyramid=build/pdepend/overview-pyramid.svg',
'src'
];
$this->_run($cmd_parts);
}
/**
* Get the total list of source files, including tests
*
* @return array
*/
protected function getAllSourceFiles()
{
$files = array_merge(
glob_recursive('build/*.php'),
glob_recursive('src/*.php'),
glob_recursive('tests/*.php'),
glob('*.php')
);
sort($files);
return $files;
}
/**
* Run php's linter in one parallel task for the passed chunk
*
* @param array $chunk
*/
protected function parallelLint(array $chunk)
{
$task = $this->taskParallelExec()
->timeout(5)
->printed(FALSE);
foreach($chunk as $file)
{
$task = $task->process("php -l {$file}");
}
$task->run();
}
/**
* Generate copy paste detector report
*/
protected function phpcpdReport()
{
$cmd_parts = [
'vendor/bin/phpcpd',
'--log-pmd build/logs/pmd-cpd.xml',
'src'
];
$this->_run($cmd_parts);
}
/**
* Shortcut for joining an array of command arguments
* and then running it
*
* @param array $cmd_parts - command arguments
* @param string $join_on - what to join the command arguments with
*/
protected function _run(array $cmd_parts, $join_on = ' ')
{
$this->taskExec(implode($join_on, $cmd_parts))->run();
}
}

View File

@ -1,56 +0,0 @@
<?php
/**
* Query
*
* Free Query Builder / Database Abstraction Layer
*
* @package Query
* @author Timothy J. Warren
* @copyright Copyright (c) 2012 - 2015
* @link https://github.com/aviat4ion/Query
* @license http://philsturgeon.co.uk/code/dbad-license
*/
// --------------------------------------------------------------------------
/**
* Autoloader for loading available database classes
*
* @package Query
*/
namespace Query;
/**
* Reference to root path
* @subpackage Core
*/
if ( ! defined('QBASE_PATH'))
{
define('QBASE_PATH', __DIR__.'/src/');
}
/**
* Path to driver classes
* @subpackage Core
*/
if ( ! defined('QDRIVER_PATH'))
{
define('QDRIVER_PATH', QBASE_PATH.'drivers/');
}
// Require some common functions
require(QBASE_PATH.'common.php');
// Load Query Classes
spl_autoload_register(function ($class) {
// Load by namespace
$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
$file = QBASE_PATH . "{$path}.php";
if (file_exists($file))
{
require_once($file);
}
});
// End of autoload.php

165
build.xml
View File

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="query" default="full-build">
<!-- By default, we assume all tools to be on the $PATH -->
<property name="pdepend" value="pdepend"/>
<property name="phpcpd" value="phpcpd"/>
<property name="phpdox" value="phpdox"/>
<property name="phploc" value="phploc"/>
<property name="phpmd" value="phpmd"/>
<property name="phpunit" value="phpunit"/>
<property name="sonar" value="sonar-runner"/>
<target name="full-build" depends="prepare,static-analysis,phpunit,phpdox,sonar" description="Performs static analysis, runs the tests, and generates project documentation"/>
<target name="quick-build" depends="prepare,lint,phpunit-no-coverage" description="Performs a lint check and runs the tests (without generating code coverage reports)"/>
<target name="static-analysis" depends="lint,phploc-ci,pdepend,phpcpd-ci" description="Performs static analysis"/>
<target name="clean" unless="clean.done" description="Cleanup build artifacts">
<delete dir="build/api"/>
<delete dir="build/coverage"/>
<delete dir="build/logs"/>
<delete dir="build/pdepend"/>
<delete dir="build/phpdox"/>
<property name="clean.done" value="true"/>
</target>
<target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build">
<mkdir dir="build/api"/>
<mkdir dir="build/coverage"/>
<mkdir dir="build/logs"/>
<mkdir dir="build/pdepend"/>
<mkdir dir="build/phpdox"/>
<property name="prepare.done" value="true"/>
</target>
<target name="lint" unless="lint.done" description="Perform syntax check of sourcecode files">
<parallel threadcount="6">
<apply executable="php" taskname="lint" passthru="true">
<arg value="-l"/>
<fileset dir="src">
<include name="*.php"/>
</fileset>
</apply>
<apply executable="php" taskname="lint" passthru="true">
<arg value="-l"/>
<fileset dir="src">
<include name="Query/*.php"/>
</fileset>
</apply>
<apply executable="php" taskname="lint" passthru="true">
<arg value="-l"/>
<fileset dir="src">
<include name="Query/Drivers/*.php"/>
</fileset>
</apply>
<apply executable="php" taskname="lint" passthru="true">
<arg value="-l"/>
<fileset dir="tests">
<include name="*.php"/>
</fileset>
</apply>
<apply executable="php" taskname="lint" passthru="true">
<arg value="-l"/>
<fileset dir="tests">
<include name="core/*.php"/>
</fileset>
</apply>
<apply executable="php" taskname="lint" passthru="true">
<arg value="-l"/>
<fileset dir="tests">
<include name="databases/**/*.php"/>
</fileset>
</apply>
</parallel>
<property name="lint.done" value="true"/>
</target>
<target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
<exec executable="${phploc}" taskname="phploc" passthru="true">
<arg value="--count-tests"/>
<arg path="src"/>
<arg path="tests"/>
</exec>
<property name="phploc.done" value="true"/>
</target>
<target name="phploc-ci" unless="phploc.done" depends="prepare" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
<exec executable="${phploc}" taskname="phploc" passthru="true">
<arg value="--count-tests"/>
<arg value="--log-csv"/>
<arg path="build/logs/phploc.csv"/>
<arg value="--log-xml"/>
<arg path="build/logs/phploc.xml"/>
<arg path="src"/>
<arg path="tests"/>
</exec>
<property name="phploc.done" value="true"/>
</target>
<target name="pdepend" unless="pdepend.done" depends="prepare" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
<exec executable="${pdepend}" taskname="pdepend" passthru="true">
<arg value="--jdepend-xml=build/logs/jdepend.xml"/>
<arg value="--jdepend-chart=build/pdepend/dependencies.svg"/>
<arg value="--overview-pyramid=build/pdepend/overview-pyramid.svg"/>
<arg path="src"/>
</exec>
<property name="pdepend.done" value="true"/>
</target>
<target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
<exec executable="${phpcpd}" taskname="phpcpd" passthru="true">
<arg path="src"/>
</exec>
<property name="phpcpd.done" value="true"/>
</target>
<target name="phpcpd-ci" unless="phpcpd.done" depends="prepare" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
<exec executable="${phpcpd}" taskname="phpcpd" passthru="true">
<arg value="--log-pmd"/>
<arg path="build/logs/pmd-cpd.xml"/>
<arg path="src"/>
</exec>
<property name="phpcpd.done" value="true"/>
</target>
<target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit">
<exec executable="${phpunit}" logoutput="true" passthru="true" checkreturn="true" taskname="phpunit">
<arg value="--configuration" />
<arg path="build/phpunit.xml" />
</exec>
<property name="phpunit.done" value="true" />
</target>
<target name="phpunit-no-coverage" depends="prepare" unless="phpunit.done" description="Run unit tests with PHPUnit (without generating code coverage reports)">
<exec executable="${phpunit}" passthru="true" taskname="phpunit">
<arg value="--configuration" />
<arg path="build/phpunit.xml" />
<arg value="--no-coverage" />
</exec>
<property name="phpunit.done" value="true" />
</target>
<target name="phpdox" unless="phpdox.done" depends="phploc-ci,phpunit" description="Generate project documentation using phpDox">
<exec executable="${phpdox}" dir="build" taskname="phpdox" passthru="true"/>
<property name="phpdox.done" value="true"/>
</target>
<target name="sonar" depends="phpunit">
<exec executable="${sonar}" taskname="sonar" passthru="true"/>
<property name="sonar.done" value="true"/>
</target>
</project>

View File

@ -0,0 +1,84 @@
<?xml version="1.0"?>
<ruleset name="Tim's Coding Standard">
<description>A variation of the CodeIgniter standard</description>
<file>../../src/</file>
<encoding>utf-8</encoding>
<rule ref="Generic.Files.LineEndings">
<properties>
<property name="eolChar" value="\n"/>
</properties>
</rule>
<!-- PHP files should OMIT the closing PHP tag -->
<rule ref="Zend.Files.ClosingTag"/>
<!-- Always use full PHP opening tags -->
<rule ref="Generic.PHP.DisallowShortOpenTag"/>
<!-- Constants should always be fully uppercase -->
<rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
<!-- TRUE, FALSE, and NULL keywords should always be fully uppercase -->
<rule ref="Generic.PHP.UpperCaseConstant"/>
<!-- One statement per line -->
<rule ref="Generic.Formatting.DisallowMultipleStatements"/>
<!-- Classes and functions should be commented -->
<rule ref="PEAR.Commenting.ClassComment">
<exclude name="PEAR.Commenting.ClassComment.MissingCategoryTag" />
<exclude name="PEAR.Commenting.ClassComment.MissingPackageTag" />
<exclude name="PEAR.Commenting.ClassComment.MissingAuthorTag" />
<exclude name="PEAR.Commenting.ClassComment.MissingLicenseTag" />
<exclude name="PEAR.Commenting.ClassComment.MissingLinkTag" />
</rule>
<rule ref="PEAR.Commenting.FunctionComment">
<!-- Exclude this sniff because it doesn't understand multiple types -->
<exclude name="PEAR.Commenting.FunctionComment.MissingParamComment" />
<exclude name="PEAR.Commenting.FunctionComment.SpacingAfterParamType" />
<exclude name="PEAR.Commenting.FunctionComment.SpacingAfterParamName" />
</rule>
<!-- Use warnings for docblock comments for files and variables, since nothing is clearly explained -->
<rule ref="PEAR.Commenting.FileComment">
<exclude name="PEAR.Commenting.FileComment.InvalidVersion" />
<exclude name="PEAR.Commenting.FileComment.MissingCategoryTag" />
<properties>
<property name="error" value="false"/>
</properties>
</rule>
<rule ref="Squiz.Commenting.FunctionCommentThrowTag"/>
<rule ref="Squiz.Commenting.VariableComment">
<properties>
<property name="error" value="false"/>
</properties>
</rule>
<!-- Use Allman style indenting. With the exception of Class declarations,
braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them. -->
<rule ref="Generic.Functions.OpeningFunctionBraceBsdAllman"/>
<rule ref="PEAR.WhiteSpace.ScopeClosingBrace">
<exclude name="PEAR.WhiteSpace.ScopeClosingBrace.BreakIndent" />
</rule>
<rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
<!-- Use only short array syntax -->
<rule ref="Generic.Arrays.DisallowLongArraySyntax" />
<rule ref="Generic.PHP.ForbiddenFunctions">
<properties>
<property name="forbiddenFunctions" type="array" value="create_function=>null,eval=>null" />
</properties>
</rule>
<!-- Inherit CodeIgniter Rules -->
<!-- <rule ref="CodeIgniter">
<properties>
<property name="error" value="false" />
</properties>
</rule> -->
</ruleset>

View File

@ -10,7 +10,7 @@ set -xe
# Install git (the php image doesn't have it) which is required by composer # Install git (the php image doesn't have it) which is required by composer
apt-get update -yqq apt-get update -yqq
apt-get install git libpq-dev libmysqlclient18 unzip -yqq apt-get install git libpq-dev libmysqlclient18 unzip firebird2.5-superclassic -yqq
# Install phpunit, the tool that we will use for testing # Install phpunit, the tool that we will use for testing
curl -Lo /usr/local/bin/phpunit https://phar.phpunit.de/phpunit.phar curl -Lo /usr/local/bin/phpunit https://phar.phpunit.de/phpunit.phar
@ -25,4 +25,5 @@ mv "$DIR/../tests/settings-ci.json" "$DIR/../tests/settings.json"
docker-php-ext-install pdo_mysql docker-php-ext-install pdo_mysql
docker-php-ext-install pdo_pgsql docker-php-ext-install pdo_pgsql
#docker-php-ext-install pdo_oci #docker-php-ext-install pdo_oci
#docker-php-ext-install interbase docker-php-ext-install interbase
docker-php-ext-install pdo_firebird

13
build/header_comment.txt Normal file
View File

@ -0,0 +1,13 @@
/**
* Query
*
* SQL Query Builder / Database Abstraction Layer
*
* PHP version 5.4
*
* @package Query
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2012 - 2015 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @link https://git.timshomepage.net/aviat4ion/Query
*/

View File

@ -99,6 +99,7 @@
<!-- PHPUnit Coverage XML --> <!-- PHPUnit Coverage XML -->
<source type="phpunit"> <source type="phpunit">
<coverage path="logs/coverage.xml" />
<!-- <coverage path="clover.xml" />--> <!-- <coverage path="clover.xml" />-->
<!-- @path - the directory where the xml code coverage report can be found --> <!-- @path - the directory where the xml code coverage report can be found -->
<!--<filter directory="${phpDox.project.source}" />--> <!--<filter directory="${phpDox.project.source}" />-->

View File

@ -31,16 +31,15 @@
<file>../tests/databases/firebird/FirebirdTest.php</file> <file>../tests/databases/firebird/FirebirdTest.php</file>
<file>../tests/databases/firebird/FirebirdQBTest.php</file> <file>../tests/databases/firebird/FirebirdQBTest.php</file>
</testsuite> </testsuite>
<!--<testsuite name="PDOFirebirdTests"> <!-- <testsuite name="OCITests">
<file>../tests/databases/pdofirebird/PDOFirebirdTest.php</file> <file>../tests/databases/oci/OCITest.php</file>
<file>../tests/databases/pdofirebird/PDOFirebirdQBTest.php</file> <file>../tests/databases/oci/OCIQBTest.php</file>
</testsuite>--> </testsuite> -->
</testsuites> </testsuites>
<logging> <logging>
<log type="coverage-html" target="coverage"/> <log type="coverage-html" target="coverage"/>
<log type="coverage-clover" target="logs/clover.xml"/> <log type="coverage-clover" target="logs/clover.xml"/>
<log type="coverage-crap4j" target="logs/crap4j.xml"/>
<log type="coverage-xml" target="logs/coverage" /> <log type="coverage-xml" target="logs/coverage" />
<log type="junit" target="logs/junit.xml" logIncompleteSkipped="false"/> <log type="xml" target="logs/junit.xml" logIncompleteSkipped="true"/>
</logging> </logging>
</phpunit> </phpunit>

View File

@ -23,7 +23,28 @@
"require": { "require": {
"php": ">=5.4" "php": ">=5.4"
}, },
"require-dev": {
"consolidation/robo": "1.0.0-RC2",
"humbug/humbug": "1.0.0-alpha2",
"monolog/monolog": "^1.21",
"nikic/php-parser": "v3.0.0alpha1",
"pdepend/pdepend": "^2.2",
"phploc/phploc": "^3.0",
"phpmd/phpmd": "^2.4",
"phpunit/phpunit": "^5.5",
"sebastian/phpcpd": "^2.0",
"squizlabs/php_codesniffer": "^3.0.0@RC",
"theseer/phpdox": "^0.9.0"
},
"autoload": { "autoload": {
"files": ["autoload.php"] "psr-4": {
"Query\\": "src/Query"
},
"files": ["src/common.php"]
},
"autoload-dev": {
"psr-4" : {
"CodeIgniter\\": "build/CodeIgniter"
}
} }
} }

39
phpunit.xml Normal file
View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
colors="true"
stopOnFailure="false"
bootstrap="tests/bootstrap.php">
<filter>
<whitelist>
<directory suffix=".php">src</directory>
<file>autoload.php</file>
</whitelist>
</filter>
<testsuites>
<testsuite name="CoreTests">
<file>tests/core/core_test.php</file>
<file>tests/core/query_parser_test.php</file>
<file>tests/core/connection_manager_test.php</file>
</testsuite>
<testsuite name="MySQLTests">
<file>tests/databases/mysql/MySQLTest.php</file>
<file>tests/databases/mysql/MySQLQBTest.php</file>
</testsuite>
<testsuite name="PgSQLTests">
<file>tests/databases/pgsql/PgSQLTest.php</file>
<file>tests/databases/pgsql/PgSQLQBTest.php</file>
</testsuite>
<testsuite name="SQLiteTests">
<file>tests/databases/sqlite/SQLiteTest.php</file>
<file>tests/databases/sqlite/SQLiteQBTest.php</file>
</testsuite>
<testsuite name="FirebirdTests">
<file>tests/databases/firebird/FirebirdTest.php</file>
<file>tests/databases/firebird/FirebirdQBTest.php</file>
</testsuite>
<!-- <testsuite name="OCITests">
<file>tests/databases/oci/OCITest.php</file>
<file>tests/databases/oci/OCIQBTest.php</file>
</testsuite> -->
</testsuites>
</phpunit>

View File

@ -12,6 +12,10 @@
* @license http://philsturgeon.co.uk/code/dbad-license * @license http://philsturgeon.co.uk/code/dbad-license
*/ */
use Query\ConnectionManager;
require __DIR__ . '/../vendor/autoload.php';
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
@ -64,7 +68,7 @@ if ( ! function_exists('db_filter'))
*/ */
function db_filter($array, $index) function db_filter($array, $index)
{ {
$new_array = array(); $new_array = [];
foreach($array as $a) foreach($array as $a)
{ {
@ -87,7 +91,8 @@ if ( ! function_exists('from_camel_case'))
* @param string $input * @param string $input
* @return string * @return string
*/ */
function from_camel_case($input) { function from_camel_case($input)
{
preg_match_all('!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!', $input, $matches); preg_match_all('!([A-Z][A-Z0-9]*(?=$|[A-Z][a-z0-9])|[A-Za-z][a-z0-9]+)!', $input, $matches);
$ret = $matches[0]; $ret = $matches[0];
foreach ($ret as &$match) { foreach ($ret as &$match) {
@ -112,7 +117,7 @@ if ( ! function_exists('array_zipper'))
*/ */
function array_zipper(Array $zipper_input) function array_zipper(Array $zipper_input)
{ {
$output = array(); $output = [];
foreach($zipper_input as $append_key => $values) foreach($zipper_input as $append_key => $values)
{ {
@ -120,7 +125,7 @@ if ( ! function_exists('array_zipper'))
{ {
if ( ! isset($output[$index])) if ( ! isset($output[$index]))
{ {
$output[$index] = array(); $output[$index] = [];
} }
$output[$index][$append_key] = $value; $output[$index][$append_key] = $value;
} }
@ -144,7 +149,7 @@ if ( ! function_exists('array_column'))
*/ */
function array_column(Array $array, $key) function array_column(Array $array, $key)
{ {
$output = array(); $output = [];
// No point iterating over an empty array // No point iterating over an empty array
if (empty($array)) if (empty($array))
@ -208,24 +213,26 @@ if ( ! function_exists('Query'))
* connection created. * connection created.
* *
* @param string|object|array $params * @param string|object|array $params
* @return Query\Query_Builder|null * @return Query\QueryBuilder|null
*/ */
function Query($params = '') function Query($params = '')
{ {
$cmanager = \Query\ConnectionManager::get_instance(); $manager = ConnectionManager::get_instance();
// If you are getting a previously created connection // If you are getting a previously created connection
if (is_scalar($params)) if (is_scalar($params))
{ {
return $cmanager->get_connection($params); return $manager->get_connection($params);
} }
elseif ( ! is_scalar($params) && ! is_null($params)) elseif ( ! is_scalar($params) && ! is_null($params))
{ {
$params_object = (object) $params; $params_object = (object) $params;
// Otherwise, return a new connection // Otherwise, return a new connection
return $cmanager->connect($params_object); return $manager->connect($params_object);
} }
return NULL;
} }
} }
// End of common.php // End of common.php

View File

@ -11,6 +11,18 @@
* @license http://philsturgeon.co.uk/code/dbad-license * @license http://philsturgeon.co.uk/code/dbad-license
*/ */
use PHPUnit\Framework\TestCase;
/**
* Unit test bootstrap - Using phpunit
*/
define('QTEST_DIR', realpath(__DIR__));
define('QBASE_DIR', realpath(QTEST_DIR.'/../') . '/');
define('QDS', DIRECTORY_SEPARATOR);
// Set up autoloader
require_once(QBASE_DIR . 'vendor/autoload.php');
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
@ -30,16 +42,6 @@ if ( ! defined('IS_QUERCUS'))
} }
} }
/**
* Unit test bootstrap - Using phpunit
*/
define('QTEST_DIR', realpath(__DIR__));
define('QBASE_DIR', realpath(QTEST_DIR.'/../') . '/');
define('QDS', DIRECTORY_SEPARATOR);
// Include db classes
require_once(QBASE_DIR . 'autoload.php');
function get_json_config() function get_json_config()
{ {
$files = array( $files = array(
@ -61,7 +63,7 @@ function get_json_config()
/** /**
* Base class for TestCases * Base class for TestCases
*/ */
class Query_TestCase extends PHPUnit_Framework_TestCase { class Query_TestCase extends TestCase {
/** /**
* Wrapper for Simpletest's assertEqual * Wrapper for Simpletest's assertEqual
@ -117,9 +119,7 @@ $path = QTEST_DIR.QDS.'db_files'.QDS.'test_sqlite.db';
@unlink($path); @unlink($path);
// Require base testing classes // Require base testing classes
//require_once(QTEST_DIR . '/core/core_test.php');
require_once(QTEST_DIR . '/core/base_db_test.php'); require_once(QTEST_DIR . '/core/base_db_test.php');
//require_once(QTEST_DIR . '/core/query_parser_test.php');
require_once(QTEST_DIR . '/core/base_query_builder_test.php'); require_once(QTEST_DIR . '/core/base_query_builder_test.php');