#!/usr/bin/env php
<?php
/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

require_once __DIR__ .'/../base.php';

$testConfig = new OxidEsales\TestingLibrary\TestConfig();

$arguments = array();
array_shift($argv);
foreach ($argv as $argument) {
    $arguments[] = (strpos($argument, '-') === 0) ? $argument : escapeshellarg($argument);
}

$php = getenv('PHPBIN') ? getenv('PHPBIN') : 'php';

$phpUnit = $testConfig->getVendorDirectory() ."/bin/phpunit";
if (!file_exists($phpUnit)) {
    $phpUnit = "phpunit";
}
$phpUnit = "$php $phpUnit --bootstrap " .__DIR__ ."/../bootstrap.php";

$arguments = empty($arguments) ? array(escapeshellarg('AllTestsUnit')) : $arguments;

$returnCode = 0;
if (end($arguments) == escapeshellarg('AllTestsUnit')) {
    $testSuites = $testConfig->getTestSuites();
    foreach ($testSuites as $suite) {
        $suiteReturnCode = runSuite($suite, $phpUnit, $arguments);
        $returnCode = $returnCode == 0 ? $suiteReturnCode : $returnCode;
    }
} else {
    $suite = $testConfig->getCurrentTestSuite();
    $returnCode = runSuite($suite, $phpUnit, $arguments);
}

exit($returnCode);

/**
 * Runs test suite.
 *
 * @param string $suite     Suite path.
 * @param string $phpUnit   PHPUnit run command.
 * @param array  $arguments arguments to pass to PHPUnit.
 *
 * @return int Error code.
 */
function runSuite($suite, $phpUnit, $arguments)
{
    $configuration = '';
    if (file_exists($suite ."/phpunit.xml")) {
        $configuration = "-c ". escapeshellarg("$suite/phpunit.xml");
    }

    $fileCopier = new OxidEsales\TestingLibrary\FileCopier();
    $reportsDir = $suite .'/reports';
    $fileCopier->createEmptyDirectory($reportsDir);

    $arguments = implode(' ', $arguments);
    $return = 0;
    $suite = escapeshellarg($suite);
    passthru("TEST_SUITE=$suite $phpUnit --coverage-php $reportsDir/coverage.cov --coverage-clover $reportsDir/clover.xml --coverage-html $reportsDir/html $configuration $arguments", $return);

    return $return;
}
