Switch build tool to Robo, use composer for autoloading
This commit is contained in:
parent
eef3a30ad0
commit
559c76f8d2
332
RoboFile.php
Normal file
332
RoboFile.php
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
56
autoload.php
56
autoload.php
@ -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
165
build.xml
@ -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>
|
|
84
build/CodeIgniter/ruleset.xml
Normal file
84
build/CodeIgniter/ruleset.xml
Normal 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>
|
@ -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
13
build/header_comment.txt
Normal 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
|
||||||
|
*/
|
@ -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}" />-->
|
||||||
|
@ -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>
|
@ -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
39
phpunit.xml
Normal 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>
|
@ -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
|
@ -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');
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user