8ec727c1
曹明
初始化代码提交
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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);
}
}
|