Skip to content
Snippets Groups Projects
Commit 08709055 authored by jurgenhaas's avatar jurgenhaas
Browse files

Merge remote-tracking branch 'origin/master'

parents 238d3968 0ce51927
No related branches found
No related tags found
No related merge requests found
......@@ -105,12 +105,11 @@ class Handler {
// Directory where this plugin is being installed.
$pluginRoot = $installationManager->getInstallPath($this->getPackage('lakedrops/d8-project-scaffold-developer'));
// Create contrib/custom dirs for modules, profiles, themes and drush.
// Create contrib/custom dirs for modules, profiles and themes.
foreach ([
$webRoot . '/modules',
$webRoot . '/profiles',
$webRoot . '/themes',
'drush',
] as $dir) {
foreach (['contrib', 'custom'] as $subdir) {
$path = $dir . '/' . $subdir;
......@@ -129,6 +128,8 @@ class Handler {
'settings/default',
'files/default/files',
'files/default/private',
'drush',
'tests',
] as $dir) {
$path = $projectRoot . '/' . $dir;
if (!$fs->exists($path)) {
......@@ -181,6 +182,11 @@ class Handler {
$fs->copy($pluginRoot . '/templates/drush/' . $template, 'drush/' . $template);
}
// Copy Test files.
foreach (['phpunit.xml.dist'] as $template) {
$fs->copy($pluginRoot . '/templates/tests/' . $template, 'tests/' . $template);
}
// Link Drupal site's config directory.
if (!$fs->exists($webRoot . '/sites/default/files/config')) {
$rel = substr($fs->makePathRelative($projectRoot . '/config/default', $projectRoot . '/files/default/files/config'), 3, -1);
......
......@@ -8,6 +8,7 @@ use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;
use Composer\Script\Event;
use Composer\Script\ScriptEvents;
use DrupalComposer\DrupalScaffold\Handler as DrupalScaffoldHandler;
/**
* Composer plugin for handling drupal scaffold.
......@@ -21,11 +22,19 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
*/
protected $handler;
/**
* The scaffold handler object for events.
*
* @var \DrupalComposer\DrupalScaffold\Handler
*/
protected $scaffoldHandler;
/**
* {@inheritdoc}
*/
public function activate(Composer $composer, IOInterface $io) {
$this->handler = new Handler($composer, $io);
$this->scaffoldHandler = new DrupalScaffoldHandler($composer, $io);
}
/**
......@@ -34,6 +43,7 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
public static function getSubscribedEvents() {
return array(
ScriptEvents::POST_CREATE_PROJECT_CMD => 'postCreateProject',
ScriptEvents::POST_UPDATE_CMD => 'postUpdate',
);
}
......@@ -44,9 +54,20 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
* The event that triggered the plugin.
*/
public function postCreateProject(Event $event) {
$this->scaffoldHandler->downloadScaffold();
$this->handler->setupLakeDropsProject($event);
}
/**
* Post update event callback.
*
* @param \Composer\Script\Event $event
* The event that triggered the plugin.
*/
public function postUpdate(Event $event) {
$this->scaffoldHandler->downloadScaffold();
}
/**
* Callback to setup the project.
*
......
<?php
namespace LakeDrops\Drupal8ScaffoldDeveloper\TestSuites;
use Drupal\simpletest\TestDiscovery;
use PHPUnit\Framework\TestSuite;
/**
* Base class for Drupal test suites.
*/
abstract class Base extends TestSuite {
/**
* Finds extensions in a Drupal installation.
*
* An extension is defined as a directory with an *.info.yml file in it.
*
* @param string $root
* Path to the root of the Drupal installation.
*
* @return string[]
* Associative array of extension paths, with extension name as keys.
*/
protected function findExtensionDirectories($root) {
$paths = [
$root . '/modules/custom',
$root . '/profiles/custom',
$root . '/themes/custom',
];
$extension_roots = array_filter($paths, 'file_exists');
$extension_directories = array_map('drupal_phpunit_find_extension_directories', $extension_roots);
return array_reduce($extension_directories, 'array_merge', []);
}
/**
* Find and add tests to the suite for core and any extensions.
*
* @param string $root
* Path to the root of the Drupal installation.
* @param string $suite_namespace
* SubNamespace used to separate test suite. Examples: Unit, Functional.
*/
protected function addTestsBySuiteNamespace($root, $suite_namespace) {
foreach ($this->findExtensionDirectories($root) as $extension_name => $dir) {
$test_path = "$dir/tests/src/$suite_namespace";
if (is_dir($test_path)) {
$this->addTestFiles(TestDiscovery::scanDirectory("Drupal\\Tests\\$extension_name\\$suite_namespace\\", $test_path));
}
}
}
}
<?php
namespace LakeDrops\Drupal8ScaffoldDeveloper\TestSuites;
require_once __DIR__ . '/Base.php';
/**
* Discovers tests for the functional test suite.
*/
class Functional extends Base {
/**
* Factory method which loads up a suite with all functional tests.
*
* @return static
* The test suite.
*/
public static function suite() {
$root = dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/web';
$suite = new static('functional');
$suite->addTestsBySuiteNamespace($root, 'Functional');
return $suite;
}
}
<?php
namespace LakeDrops\Drupal8ScaffoldDeveloper\TestSuites;
require_once __DIR__ . '/Base.php';
/**
* Discovers tests for the functional test suite.
*/
class FunctionalJavascript extends Base {
/**
* Factory method which loads up a suite with all functional tests.
*
* @return static
* The test suite.
*/
public static function suite() {
$root = dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/web';
$suite = new static('functional-javascript');
$suite->addTestsBySuiteNamespace($root, 'FunctionalJavascript');
return $suite;
}
}
<?php
namespace LakeDrops\Drupal8ScaffoldDeveloper\TestSuites;
require_once __DIR__ . '/Base.php';
/**
* Discovers tests for the unit test suite.
*/
class Kernel extends Base {
/**
* Factory method which loads up a suite with all unit tests.
*
* @return static
* The test suite.
*/
public static function suite() {
$root = dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/web';
$suite = new static('kernel');
$suite->addTestsBySuiteNamespace($root, 'Kernel');
return $suite;
}
}
<?php
namespace LakeDrops\Drupal8ScaffoldDeveloper\TestSuites;
require_once __DIR__ . '/Base.php';
/**
* Discovers tests for the unit test suite.
*/
class Unit extends Base {
/**
* Factory method which loads up a suite with all unit tests.
*
* @return static
* The test suite.
*/
public static function suite() {
$root = dirname(dirname(dirname(dirname(dirname(__DIR__))))) . '/web';
$suite = new static('unit');
$suite->addTestsBySuiteNamespace($root, 'Unit');
return $suite;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- TODO set checkForUnintentionallyCoveredCode="true" once https://www.drupal.org/node/2626832 is resolved. -->
<!-- PHPUnit expects functional tests to be run with either a privileged user
or your current system user. See core/tests/README.md and
https://www.drupal.org/node/2116263 for details.
-->
<phpunit bootstrap="../web/core/tests/bootstrap.php" colors="true"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutChangesToGlobalState="true">
<!-- TODO set printerClass="\Drupal\Tests\Listeners\HtmlOutputPrinter" once
https://youtrack.jetbrains.com/issue/WI-24808 is resolved. Drupal provides a
result printer that links to the html output results for functional tests.
Unfortunately, this breaks the output of PHPStorm's PHPUnit runner. However, if
using the command line you can add
- -printer="\Drupal\Tests\Listeners\HtmlOutputPrinter" to use it (note there
should be no spaces between the hyphens).
-->
<php>
<!-- Set error reporting to E_ALL. -->
<ini name="error_reporting" value="32767"/>
<!-- Do not limit the amount of memory tests take to run. -->
<ini name="memory_limit" value="-1"/>
<!-- Example SIMPLETEST_BASE_URL value: http://localhost -->
<env name="SIMPLETEST_BASE_URL" value=""/>
<!-- Example SIMPLETEST_DB value: mysql://username:password@localhost/databasename#table_prefix -->
<env name="SIMPLETEST_DB" value="sqlite://localhost//tmp/test.sqlite"/>
<!-- Example BROWSERTEST_OUTPUT_DIRECTORY value: /path/to/webroot/sites/simpletest/browser_output -->
<env name="BROWSERTEST_OUTPUT_DIRECTORY" value=""/>
<!-- To disable deprecation testing completely uncomment the next line. -->
<!-- <env name="SYMFONY_DEPRECATIONS_HELPER" value="disabled"/> -->
<!-- Example for changing the driver class for mink tests MINK_DRIVER_CLASS value: 'Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver' -->
<!-- Example for changing the driver args to mink tests MINK_DRIVER_ARGS value: '["http://127.0.0.1:8510"]' -->
<!-- Example for changing the driver args to phantomjs tests MINK_DRIVER_ARGS_PHANTOMJS value: '["http://127.0.0.1:8510"]' -->
<!-- Example for changing the driver args to webdriver tests MINK_DRIVER_ARGS_WEBDRIVER value: '["firefox", null, "http://localhost:4444/wd/hub"]' -->
</php>
<testsuites>
<testsuite name="unit">
<file>../vendor/lakedrops/d8-project-scaffold-developer/src/TestSuite/Unit.php</file>
</testsuite>
<testsuite name="kernel">
<file>../vendor/lakedrops/d8-project-scaffold-developer/src/TestSuite/Kernel.php</file>
</testsuite>
<testsuite name="functional">
<file>../vendor/lakedrops/d8-project-scaffold-developer/src/TestSuite/Functional.php</file>
</testsuite>
<testsuite name="functional-javascript">
<file>../vendor/lakedrops/d8-project-scaffold-developer/src/TestSuite/FunctionalJavascript.php</file>
</testsuite>
</testsuites>
<listeners>
<listener class="\Drupal\Tests\Listeners\DrupalListener">
</listener>
<!-- The Symfony deprecation listener has to come after the Drupal listener -->
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener">
</listener>
</listeners>
<!-- Filter for coverage reports. -->
<filter>
<whitelist>
<directory>../web/modules/custom</directory>
<directory>../web/profiles/custom</directory>
<directory>../web/themes/custom</directory>
<!-- By definition test classes have no tests. -->
<exclude>
<directory suffix="Test.php">./</directory>
<directory suffix="TestBase.php">./</directory>
</exclude>
</whitelist>
</filter>
</phpunit>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment