|
|
|
|
@@ -7,7 +7,7 @@ use Combodo\iTop\Service\Events\EventData;
|
|
|
|
|
use Combodo\iTop\Service\Events\EventService;
|
|
|
|
|
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
|
|
|
|
use ContextTag;
|
|
|
|
|
use Exception;
|
|
|
|
|
use CoreException;
|
|
|
|
|
use TypeError;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -15,21 +15,20 @@ use TypeError;
|
|
|
|
|
*
|
|
|
|
|
* @package Combodo\iTop\Test\UnitTest\Service
|
|
|
|
|
*
|
|
|
|
|
* @runTestsInSeparateProcesses
|
|
|
|
|
* @preserveGlobalState disabled
|
|
|
|
|
* @backupGlobals disabled
|
|
|
|
|
*/
|
|
|
|
|
class EventTest extends ItopTestCase
|
|
|
|
|
{
|
|
|
|
|
const USE_TRANSACTION = false;
|
|
|
|
|
const CREATE_TEST_ORG = false;
|
|
|
|
|
const DEBUG_UNIT_TEST = true;
|
|
|
|
|
|
|
|
|
|
private static $iEventCalls;
|
|
|
|
|
private static int $iEventCalls;
|
|
|
|
|
|
|
|
|
|
protected function setUp(): void
|
|
|
|
|
{
|
|
|
|
|
parent::setUp();
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::UnRegisterAll();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -47,12 +46,12 @@ class EventTest extends ItopTestCase
|
|
|
|
|
|
|
|
|
|
public function BadCallbackProvider()
|
|
|
|
|
{
|
|
|
|
|
return array(
|
|
|
|
|
array('toto'),
|
|
|
|
|
array('EventTest::toto'),
|
|
|
|
|
array(array('EventTest', 'toto')),
|
|
|
|
|
array(array($this, 'toto')),
|
|
|
|
|
);
|
|
|
|
|
return [
|
|
|
|
|
['toto'],
|
|
|
|
|
['EventTest::toto'],
|
|
|
|
|
[['EventTest', 'toto']],
|
|
|
|
|
[[$this, 'toto']],
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testNoParameterCallbackFunction()
|
|
|
|
|
@@ -63,6 +62,8 @@ class EventTest extends ItopTestCase
|
|
|
|
|
});
|
|
|
|
|
$this->debug("Registered $sId");
|
|
|
|
|
EventService::RegisterEvent(new EventDescription('event', [], 'test', '', [], ''));
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event'));
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
@@ -70,7 +71,7 @@ class EventTest extends ItopTestCase
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider GoodCallbackProvider
|
|
|
|
|
*
|
|
|
|
|
* @param $callback
|
|
|
|
|
* @param callable $callback Assume that callbacks will increment self::$iEventCalls
|
|
|
|
|
*
|
|
|
|
|
* @throws \Exception
|
|
|
|
|
*/
|
|
|
|
|
@@ -78,11 +79,15 @@ class EventTest extends ItopTestCase
|
|
|
|
|
{
|
|
|
|
|
EventService::RegisterEvent(new EventDescription('event', [], 'test', '', [], ''));
|
|
|
|
|
$sId = EventService::RegisterListener('event', $callback);
|
|
|
|
|
$this->debug("Registered $sId");
|
|
|
|
|
$this->debug("Registered 'event' with id $sId");
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event'));
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event'));
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function GoodCallbackProvider()
|
|
|
|
|
@@ -112,9 +117,15 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$oReceiver = new TestEventReceiver();
|
|
|
|
|
EventService::RegisterListener('event_a', array($oReceiver, 'OnEvent1'));
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event_a'));
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
$oReceiver = null;
|
|
|
|
|
gc_collect_cycles();
|
|
|
|
|
|
|
|
|
|
// The callback is held by the event service
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event_a'));
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
@@ -134,10 +145,13 @@ class EventTest extends ItopTestCase
|
|
|
|
|
EventService::RegisterListener('event_b', array('Combodo\iTop\Test\UnitTest\Service\TestEventReceiver', 'OnStaticEvent1'));
|
|
|
|
|
EventService::RegisterListener('event_b', 'Combodo\iTop\Test\UnitTest\Service\TestEventReceiver::OnStaticEvent2');
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event_a'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event_b'));
|
|
|
|
|
$this->assertEquals(8, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testMultiSameEvent()
|
|
|
|
|
@@ -153,6 +167,7 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$sId = EventService::RegisterListener('event1', array($oReceiver, 'OnEvent1'));
|
|
|
|
|
$this->debug("Registered $sId");
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
@@ -163,6 +178,8 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$oReceiver = new TestEventReceiver();
|
|
|
|
|
EventService::RegisterListener('event1', [$oReceiver, 'OnEventWithData'], '');
|
|
|
|
|
EventService::RegisterListener('event1', [$oReceiver, 'OnEventWithData'], '');
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1', '', ['text' => 'Event Data 1']));
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
@@ -178,20 +195,19 @@ class EventTest extends ItopTestCase
|
|
|
|
|
EventService::RegisterListener('event2', [$oReceiver, 'OnEvent1'], '', null, null, 1);
|
|
|
|
|
EventService::RegisterListener('event2', [$oReceiver, 'OnEvent2'], '', null, null, 0);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testNoRegisterEvent()
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertTrue(false);
|
|
|
|
|
} catch (\CoreException $e) {
|
|
|
|
|
$this->assertTrue(true);
|
|
|
|
|
}
|
|
|
|
|
$this->expectException(CoreException::class);
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testContext()
|
|
|
|
|
@@ -200,11 +216,15 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$oReceiver = new TestEventReceiver();
|
|
|
|
|
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent1'], '', null, null, 0);
|
|
|
|
|
EventService::RegisterListener('event1', [$oReceiver, 'OnEvent2'], '', null, 'test_context', 1);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
ContextTag::AddContext('test_context');
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(3, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testEventSource()
|
|
|
|
|
@@ -220,21 +240,30 @@ class EventTest extends ItopTestCase
|
|
|
|
|
EventService::RegisterListener('event2', 'Combodo\iTop\Test\UnitTest\Service\TestEventReceiver::OnStaticEvent1', null, null, null, 2);
|
|
|
|
|
EventService::RegisterListener('event2', [$oReceiver, 'OnEvent2'], 'B', null, null, 0);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1', 'A'));
|
|
|
|
|
$this->assertEquals(3, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2', 'A'));
|
|
|
|
|
$this->assertEquals(5, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(6, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(7, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2', ['A', 'B']));
|
|
|
|
|
$this->assertEquals(10, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(3, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function testUnRegisterEvent()
|
|
|
|
|
public function testUnRegisterEventListener()
|
|
|
|
|
{
|
|
|
|
|
EventService::RegisterEvent(new EventDescription('event1', [], 'test', '', [], ''));
|
|
|
|
|
EventService::RegisterEvent(new EventDescription('event2', [], 'test', '', [], ''));
|
|
|
|
|
@@ -248,19 +277,23 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$sId = EventService::RegisterListener('event2', array($oReceiver, 'OnEvent1'));
|
|
|
|
|
$this->debug("Registered $sId");
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(3, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
EventService::UnRegisterEventListeners('event1');
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(0, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(5, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnRegisterAll()
|
|
|
|
|
@@ -277,19 +310,18 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$sId = EventService::RegisterListener('event2', array($oReceiver, 'OnEvent1'));
|
|
|
|
|
$this->debug("Registered $sId");
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(3, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
EventService::UnRegisterAll();
|
|
|
|
|
|
|
|
|
|
$this->expectException(CoreException::class);
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUnRegisterCallback()
|
|
|
|
|
@@ -306,19 +338,23 @@ class EventTest extends ItopTestCase
|
|
|
|
|
$sId = EventService::RegisterListener('event2', array($oReceiver, 'OnEvent1'));
|
|
|
|
|
$this->debug("Registered $sId");
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(3, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(4, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
EventService::UnRegisterListener($sIdToRemove);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event1'));
|
|
|
|
|
$this->assertEquals(6, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(2, self::$iEventCalls);
|
|
|
|
|
|
|
|
|
|
self::$iEventCalls = 0;
|
|
|
|
|
EventService::FireEvent(new EventData('event2'));
|
|
|
|
|
$this->assertEquals(7, self::$iEventCalls);
|
|
|
|
|
$this->assertEquals(1, self::$iEventCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function IncrementCallCount()
|
|
|
|
|
@@ -333,7 +369,7 @@ class EventTest extends ItopTestCase
|
|
|
|
|
*/
|
|
|
|
|
public static function DebugStatic($sMsg)
|
|
|
|
|
{
|
|
|
|
|
if (DEBUG_UNIT_TEST) {
|
|
|
|
|
if (static::$DEBUG_UNIT_TEST) {
|
|
|
|
|
if (is_string($sMsg)) {
|
|
|
|
|
echo "$sMsg\n";
|
|
|
|
|
} else {
|
|
|
|
|
@@ -352,13 +388,7 @@ class TestClassesWithDebug
|
|
|
|
|
*/
|
|
|
|
|
public static function DebugStatic($sMsg)
|
|
|
|
|
{
|
|
|
|
|
if (DEBUG_UNIT_TEST) {
|
|
|
|
|
if (is_string($sMsg)) {
|
|
|
|
|
echo "$sMsg\n";
|
|
|
|
|
} else {
|
|
|
|
|
print_r($sMsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
EventTest::DebugStatic($sMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -366,13 +396,7 @@ class TestClassesWithDebug
|
|
|
|
|
*/
|
|
|
|
|
public function Debug($sMsg)
|
|
|
|
|
{
|
|
|
|
|
if (DEBUG_UNIT_TEST) {
|
|
|
|
|
if (is_string($sMsg)) {
|
|
|
|
|
echo "$sMsg\n";
|
|
|
|
|
} else {
|
|
|
|
|
print_r($sMsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
EventTest::DebugStatic($sMsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -429,187 +453,3 @@ class TestEventReceiver extends TestClassesWithDebug
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TestCRUDObject extends TestClassesWithDebug
|
|
|
|
|
{
|
|
|
|
|
private static $aEventList = [];
|
|
|
|
|
|
|
|
|
|
public function DBInsert($sName)
|
|
|
|
|
{
|
|
|
|
|
$this->sName = $sName;
|
|
|
|
|
$this->FireEvent('insert');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function DBUpdate($sName)
|
|
|
|
|
{
|
|
|
|
|
$this->sName = $sName;
|
|
|
|
|
$this->FireEvent('update');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function FireEvent($sEvent, $aEventData = [])
|
|
|
|
|
{
|
|
|
|
|
$aEventData['name'] = $this->sName;
|
|
|
|
|
$aEventData['object'] = $this;
|
|
|
|
|
$oEventData = new EventData($sEvent, $this->sName, $aEventData);
|
|
|
|
|
|
|
|
|
|
$bFireEventNow = empty(self::$aEventList['event']);
|
|
|
|
|
self::$aEventList['event'][] = $oEventData;
|
|
|
|
|
|
|
|
|
|
$iCount = 0;
|
|
|
|
|
while ($bFireEventNow) {
|
|
|
|
|
$sEvent = $oEventData->GetEvent();
|
|
|
|
|
$sName = $oEventData->Get('name');
|
|
|
|
|
$this->Debug("Object from $sName: Fire event '$sEvent'");
|
|
|
|
|
EventService::FireEvent($oEventData);
|
|
|
|
|
$this->Debug("Object from $sName: End of event '$sEvent'");
|
|
|
|
|
|
|
|
|
|
array_shift(self::$aEventList['event']);
|
|
|
|
|
$oEventData = reset(self::$aEventList['event']);
|
|
|
|
|
|
|
|
|
|
if ($oEventData === false) {
|
|
|
|
|
$bFireEventNow = false;
|
|
|
|
|
}
|
|
|
|
|
if ($iCount++ > 10) {
|
|
|
|
|
throw new Exception('Infinite loop');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TestReentranceCRUD extends TestClassesWithDebug
|
|
|
|
|
{
|
|
|
|
|
public $sName;
|
|
|
|
|
public $sEvent1;
|
|
|
|
|
public $sEvent2;
|
|
|
|
|
public $bPermanentProtection;
|
|
|
|
|
|
|
|
|
|
private static $iIndent1 = 0;
|
|
|
|
|
private static $iIndent2 = 0;
|
|
|
|
|
|
|
|
|
|
public $aSendEvent = [];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $sName
|
|
|
|
|
* @param $fPriority
|
|
|
|
|
* @param array $aSendEvent
|
|
|
|
|
* @param bool $bPermanentProtection
|
|
|
|
|
*/
|
|
|
|
|
public function __construct($sName, $fPriority, array $aSendEvent, $bPermanentProtection)
|
|
|
|
|
{
|
|
|
|
|
$this->sName = $sName;
|
|
|
|
|
$this->sEvent1 = EventService::RegisterListener('insert', [$this, 'OnInsert'], null, [], null, $fPriority);
|
|
|
|
|
$this->sEvent2 = EventService::RegisterListener('update', [$this, 'OnUpdate'], null, [], null, $fPriority);
|
|
|
|
|
$this->aSendEvent = $aSendEvent;
|
|
|
|
|
$this->bPermanentProtection = $bPermanentProtection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function OnInsert(EventData $oData)
|
|
|
|
|
{
|
|
|
|
|
$sIndent = str_repeat(' ', self::$iIndent1);
|
|
|
|
|
$oObject = $oData->Get('object');
|
|
|
|
|
$sEvent = $oData->GetEvent();
|
|
|
|
|
$sSource = $oData->GetEventSource();
|
|
|
|
|
$sName = $sIndent.$this->sName;
|
|
|
|
|
$this->Debug("$sName: received event '$sEvent' from '$sSource'");
|
|
|
|
|
EventTest::IncrementCallCount();
|
|
|
|
|
|
|
|
|
|
if ($this->aSendEvent['listener1']['update']) {
|
|
|
|
|
self::$iIndent2 += 1;
|
|
|
|
|
$this->Debug("$sName: Update");
|
|
|
|
|
$oObject->DBUpdate($sName);
|
|
|
|
|
self::$iIndent2 -= 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function OnUpdate(EventData $oData)
|
|
|
|
|
{
|
|
|
|
|
$sIndent = str_repeat(' ', self::$iIndent2);
|
|
|
|
|
$oObject = $oData->Get('object');
|
|
|
|
|
$sEvent = $oData->GetEvent();
|
|
|
|
|
$sSource = $oData->GetEventSource();
|
|
|
|
|
$sName = $sIndent.$this->sName;
|
|
|
|
|
$this->Debug("$sName: received event '$sEvent' from '$sSource'");
|
|
|
|
|
EventTest::IncrementCallCount();
|
|
|
|
|
if ($this->aSendEvent['listener2']['update']) {
|
|
|
|
|
self::$iIndent2 += 1;
|
|
|
|
|
$this->Debug("$sName: Update");
|
|
|
|
|
$oObject->DBUpdate($sName);
|
|
|
|
|
self::$iIndent2 -= 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class TestReentrance extends TestClassesWithDebug
|
|
|
|
|
{
|
|
|
|
|
public $sName;
|
|
|
|
|
public $sEvent1;
|
|
|
|
|
public $sEvent2;
|
|
|
|
|
public $bPermanentProtection;
|
|
|
|
|
|
|
|
|
|
private static $iIndent1 = 0;
|
|
|
|
|
private static $iIndent2 = 0;
|
|
|
|
|
|
|
|
|
|
public $aSendEvent = [];
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param $sName
|
|
|
|
|
* @param $fPriority
|
|
|
|
|
* @param array $aSendEvent
|
|
|
|
|
* @param bool $bPermanentProtection
|
|
|
|
|
*/
|
|
|
|
|
public function __construct($sName, $fPriority, array $aSendEvent, $bPermanentProtection)
|
|
|
|
|
{
|
|
|
|
|
$this->sName = $sName;
|
|
|
|
|
$this->sEvent1 = EventService::RegisterListener('event1', [$this, 'ListenerEvent1'], null, [], null, $fPriority);
|
|
|
|
|
$this->sEvent2 = EventService::RegisterListener('event2', [$this, 'ListenerEvent2'], null, [], null, $fPriority);
|
|
|
|
|
$this->aSendEvent = $aSendEvent;
|
|
|
|
|
$this->bPermanentProtection = $bPermanentProtection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function ListenerEvent1(EventData $oData)
|
|
|
|
|
{
|
|
|
|
|
$sIndent = str_repeat(' ', self::$iIndent1);
|
|
|
|
|
$sEvent = $oData->GetEvent();
|
|
|
|
|
$sSource = $oData->GetEventSource();
|
|
|
|
|
$sName = $sIndent.$this->sName;
|
|
|
|
|
$this->Debug("$sName: received event '$sEvent' from '$sSource'");
|
|
|
|
|
EventTest::IncrementCallCount();
|
|
|
|
|
if ($this->aSendEvent['listener1']['event1']) {
|
|
|
|
|
$this->Debug("$sName: Fire event 'event1'");
|
|
|
|
|
self::$iIndent1 += 1;
|
|
|
|
|
EventService::FireEvent(new EventData('event1', $sName));
|
|
|
|
|
self::$iIndent1 -= 1;
|
|
|
|
|
$this->Debug("$sName: End of event 'event1'");
|
|
|
|
|
}
|
|
|
|
|
if ($this->aSendEvent['listener1']['event2']) {
|
|
|
|
|
$this->Debug("$sName: Fire event 'event2'");
|
|
|
|
|
self::$iIndent2 += 1;
|
|
|
|
|
EventService::FireEvent(new EventData('event2', $sName));
|
|
|
|
|
self::$iIndent2 -= 1;
|
|
|
|
|
$this->Debug("$sName: End of event 'event2'");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function ListenerEvent2(EventData $oData)
|
|
|
|
|
{
|
|
|
|
|
$sIndent = str_repeat(' ', self::$iIndent2);
|
|
|
|
|
$sEvent = $oData->GetEvent();
|
|
|
|
|
$sSource = $oData->GetEventSource();
|
|
|
|
|
$sName = $sIndent.$this->sName;
|
|
|
|
|
$this->Debug("$sName: received event '$sEvent' from '$sSource'");
|
|
|
|
|
EventTest::IncrementCallCount();
|
|
|
|
|
if ($this->aSendEvent['listener2']['event1']) {
|
|
|
|
|
$this->Debug("$sName: Fire event 'event1'");
|
|
|
|
|
self::$iIndent1 += 1;
|
|
|
|
|
EventService::FireEvent(new EventData('event1', $sName));
|
|
|
|
|
self::$iIndent1 -= 1;
|
|
|
|
|
$this->Debug("$sName: End of event 'event1'");
|
|
|
|
|
}
|
|
|
|
|
if ($this->aSendEvent['listener2']['event2']) {
|
|
|
|
|
$this->Debug("$sName: Fire event 'event2'");
|
|
|
|
|
self::$iIndent2 += 1;
|
|
|
|
|
EventService::FireEvent(new EventData('event2', $sName));
|
|
|
|
|
self::$iIndent2 -= 1;
|
|
|
|
|
$this->Debug("$sName: End of event 'event2'");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|