init
This commit is contained in:
66
vendor/codeception/base/src/Codeception/Subscriber/AutoRebuild.php
vendored
Normal file
66
vendor/codeception/base/src/Codeception/Subscriber/AutoRebuild.php
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
namespace Codeception\Subscriber;
|
||||
|
||||
use Codeception\Configuration;
|
||||
use Codeception\Event\SuiteEvent;
|
||||
use Codeception\Events;
|
||||
use Codeception\Lib\Generator\Actions;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
|
||||
class AutoRebuild implements EventSubscriberInterface
|
||||
{
|
||||
use Shared\StaticEvents;
|
||||
|
||||
public static $events = [
|
||||
Events::SUITE_INIT => 'updateActor'
|
||||
];
|
||||
|
||||
public function updateActor(SuiteEvent $e)
|
||||
{
|
||||
$settings = $e->getSettings();
|
||||
if (!$settings['actor']) {
|
||||
codecept_debug('actor is empty');
|
||||
return; // no actor
|
||||
}
|
||||
|
||||
$modules = $e->getSuite()->getModules();
|
||||
|
||||
$actorActionsFile = Configuration::supportDir() . '_generated' . DIRECTORY_SEPARATOR
|
||||
. $settings['actor'] . 'Actions.php';
|
||||
|
||||
if (!file_exists($actorActionsFile)) {
|
||||
codecept_debug("Generating {$settings['actor']}Actions...");
|
||||
$this->generateActorActions($actorActionsFile, $settings);
|
||||
return;
|
||||
}
|
||||
|
||||
// load actor class to see hash
|
||||
$handle = @fopen($actorActionsFile, "r");
|
||||
if ($handle and is_writable($actorActionsFile)) {
|
||||
$line = @fgets($handle);
|
||||
if (preg_match('~\[STAMP\] ([a-f0-9]*)~', $line, $matches)) {
|
||||
$hash = $matches[1];
|
||||
$currentHash = Actions::genHash($modules, $settings);
|
||||
|
||||
// regenerate actor class when hashes do not match
|
||||
if ($hash != $currentHash) {
|
||||
codecept_debug("Rebuilding {$settings['actor']}...");
|
||||
@fclose($handle);
|
||||
$this->generateActorActions($actorActionsFile, $settings);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@fclose($handle);
|
||||
}
|
||||
}
|
||||
|
||||
protected function generateActorActions($actorActionsFile, $settings)
|
||||
{
|
||||
if (!file_exists(Configuration::supportDir() . '_generated')) {
|
||||
@mkdir(Configuration::supportDir() . '_generated');
|
||||
}
|
||||
$actionsGenerator = new Actions($settings);
|
||||
$generated = $actionsGenerator->produce();
|
||||
@file_put_contents($actorActionsFile, $generated);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user