WowPress-Tailwind/theme/vendor/planetteamspeak/ts3-php-framework/tests/Helper/SignalTest.php

199 lines
6.4 KiB
PHP
Raw Normal View History

2024-06-11 11:06:25 +02:00
<?php
namespace PlanetTeamSpeak\TeamSpeak3Framework\Tests\Helper;
use PHPUnit\Framework\TestCase;
use PlanetTeamSpeak\TeamSpeak3Framework\Exception\HelperException;
use PlanetTeamSpeak\TeamSpeak3Framework\Helper\Signal;
use PlanetTeamSpeak\TeamSpeak3Framework\Exception\SignalException;
use PlanetTeamSpeak\TeamSpeak3Framework\Helper\Signal\Handler;
class SignalTest extends TestCase
{
protected static array $cTriggers;
protected static string $signal = 'notifyEvent';
protected static string $callback = __CLASS__ . '::onEvent';
protected static string $testString = '!@w~//{tI_8G77<qS+g*[Gb@u`pJ^2>rO*f=KS:8Yj';
protected function setUp(): void
{
static::$cTriggers = [];
foreach (Signal::getInstance()->getSignals() as $signal) {
Signal::getInstance()->clearHandlers($signal);
}
}
public function testGetInstance()
{
$snapshot = clone Signal::getInstance();
$this->assertEquals($snapshot, Signal::getInstance());
$this->assertEmpty(Signal::getInstance()->getSignals());
}
/**
* @throws HelperException
*/
public function testGetCallbackHash()
{
$this->assertEquals(
md5(static::$callback),
Signal::getInstance()->getCallbackHash(static::$callback)
);
}
/**
* @throws HelperException
*/
public function testGetCallbackHashException()
{
$this->expectException(SignalException::class);
$this->expectExceptionMessage('invalid callback specified');
Signal::getInstance()->getCallbackHash([]);
}
/**
* @throws HelperException
*/
public function testSubscribe()
{
$snapshot = clone Signal::getInstance();
$instSignal = Signal::getInstance();
$signalHandler = $instSignal->subscribe(static::$signal, static::$callback);
// Test state: returned TeamSpeak3_Helper_Handler
$this->assertInstanceOf(Handler::class, $signalHandler);
$this->assertNotEquals($snapshot, Signal::getInstance());
// Test state: subscribed signals
$signals = $instSignal->getSignals();
$this->assertIsArray($signals);
$this->assertEquals(1, count($signals));
$this->assertEquals(static::$signal, $signals[0]);
// Test state: subscribed signal handlers
$handlers = $instSignal->getHandlers(static::$signal);
$this->assertIsArray($handlers);
$this->assertEquals(1, count($handlers));
$this->assertArrayHasKey(
Signal::getInstance()->getCallbackHash(static::$callback),
$handlers
);
$handler = $handlers[Signal::getInstance()->getCallbackHash(static::$callback)];
$this->assertInstanceOf(Handler::class, $handler);
$this->assertEquals($signalHandler, $handler);
}
/**
* @throws HelperException
*/
public function testEmit()
{
$callbackHash = Signal::getInstance()
->getCallbackHash(__CLASS__ . '::onEvent');
Signal::getInstance()->subscribe(static::$signal, static::$callback);
$response = Signal::getInstance()->emit(static::$signal, static::$testString);
$this->assertEquals(static::$testString, $response);
$this->assertIsString(static::$testString);
$this->assertIsString($response);
// Verify correct count of callback executions
$this->assertEquals(1, count(static::$cTriggers));
$this->assertEquals(
'0-'.static::$testString,
static::$cTriggers[$callbackHash]
);
}
/**
* @throws HelperException
*/
public function testSubscribeTwo()
{
$instSignal = Signal::getInstance();
$signalHandler1 = $instSignal->subscribe(
static::$signal,
static::$callback
);
$signalHandler2 = $instSignal->subscribe(
static::$signal,
static::$callback.'2'
);
// Test state: subscribed signals
$signals = $instSignal->getSignals();
$this->assertEquals(1, count($signals));
$this->assertEquals(static::$signal, $signals[0]);
// Test state: subscribed signal handlers
$handlers = $instSignal->getHandlers(static::$signal);
$this->assertEquals(2, count($handlers));
$this->assertArrayHasKey(
$instSignal->getCallbackHash(static::$callback),
$handlers
);
$this->assertArrayHasKey(
$instSignal->getCallbackHash(static::$callback.'2'),
$handlers
);
$handler1 = $handlers[$instSignal->getCallbackHash(static::$callback)];
$this->assertEquals($signalHandler1, $handler1);
$handler2 = $handlers[$instSignal->getCallbackHash(static::$callback.'2')];
$this->assertEquals($signalHandler2, $handler2);
}
/**
* @throws HelperException
*/
public function testEmitToTwoSubscribers()
{
$instSignal = Signal::getInstance();
$callbackHash1 = $instSignal->getCallbackHash(__CLASS__ . '::onEvent');
$callbackHash2 = $instSignal->getCallbackHash(__CLASS__ . '::onEvent2');
$instSignal->subscribe(static::$signal, static::$callback);
$instSignal->subscribe(static::$signal, static::$callback.'2');
$response = $instSignal->emit(static::$signal, static::$testString);
$this->assertEquals(static::$testString, $response);
$this->assertIsString(static::$testString);
$this->assertIsString($response);
// Verify correct count of callback executions
$this->assertEquals(2, count(static::$cTriggers));
$this->assertEquals(
'0-' . static::$testString,
static::$cTriggers[$callbackHash1]
);
$this->assertEquals(
'1-' . static::$testString,
static::$cTriggers[$callbackHash2]
);
}
/**
* @throws HelperException
*/
public static function onEvent($data)
{
$signature = Signal::getInstance()
->getCallbackHash(__CLASS__ . '::onEvent');
static::$cTriggers[$signature] = count(static::$cTriggers).'-'.$data;
return $data;
}
/**
* @throws HelperException
*/
public static function onEvent2($data)
{
$signature = Signal::getInstance()
->getCallbackHash(__CLASS__ . '::onEvent2');
static::$cTriggers[$signature] = count(static::$cTriggers).'-'.$data;
return $data;
}
}