234 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Tests\core\Script;
 | 
						|
 | 
						|
use ManiaControl\Callbacks\Callbacks;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\AllApiVersionsStructure;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\ApiVersionStructure;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\CallbackHelpStructure;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\CallbackListStructure;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\DocumentationStructure;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\MethodHelpStructure;
 | 
						|
use ManiaControl\Callbacks\Structures\XmlRpc\MethodListStructure;
 | 
						|
use ManiaControl\ManiaControl;
 | 
						|
use ManiaControl\Script\ModeScriptEventManager;
 | 
						|
 | 
						|
/**
 | 
						|
 * PHP Unit Test for Mode Script Event Manager Class
 | 
						|
 *
 | 
						|
 * @author    ManiaControl Team <mail@maniacontrol.com>
 | 
						|
 * @copyright 2014-2018 ManiaControl Team
 | 
						|
 * @license   http://www.gnu.org/licenses/ GNU General Public License, Version 3
 | 
						|
 */
 | 
						|
class ModeScriptEventManagerTest extends \PHPUnit_Framework_TestCase {
 | 
						|
	public function testEnableCallbacks() {
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getApiVersion()->setCallable(function (ApiVersionStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			$this->assertEquals(ModeScriptEventManager::API_VERSION, $structure->getVersion());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
 | 
						|
		//Disable Callbacks and Test Again
 | 
						|
		$maniaControl->connect();
 | 
						|
		$modeScriptEventManager->disableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getApiVersion()->setCallable(function (ApiVersionStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertFalse($called);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetCallbacksList() {
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getCallbacksList()->setCallable(function (CallbackListStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			//At least 5 Callbacks existing
 | 
						|
			$this->assertArrayHasKey(5, $structure->getCallbacks());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testBlockUnBlockCallbacks() {
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called1 = false;
 | 
						|
		$modeScriptEventManager->getListOfEnabledCallbacks()->setCallable(function (CallbackListStructure $structure) use (&$called1) {
 | 
						|
			$called1 = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			//At least 5 Callbacks existing
 | 
						|
			$this->assertArrayHasKey(5, $structure->getCallbacks());
 | 
						|
		});
 | 
						|
 | 
						|
		$called2 = false;
 | 
						|
		$modeScriptEventManager->getListOfDisabledCallbacks()->setCallable(function (CallbackListStructure $structure) use (&$called2) {
 | 
						|
			$called2 = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			//Has No Callback
 | 
						|
			$this->assertEmpty($structure->getCallbacks());
 | 
						|
		});
 | 
						|
 | 
						|
		//Block a Callback
 | 
						|
		$modeScriptEventManager->blockCallback(Callbacks::MP_ENDPLAYLOOP);
 | 
						|
 | 
						|
		$called3 = false;
 | 
						|
		$modeScriptEventManager->getListOfDisabledCallbacks()->setCallable(function (CallbackListStructure $structure) use (&$called3) {
 | 
						|
			$called3 = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			$structure->getCallbacks();
 | 
						|
			//Has No Callback
 | 
						|
			$this->assertArrayHasKey(0, $structure->getCallbacks());
 | 
						|
			$this->assertEquals(Callbacks::MP_ENDPLAYLOOP, $structure->getCallbacks()[0]);
 | 
						|
		});
 | 
						|
 | 
						|
		$modeScriptEventManager->unBlockCallback(Callbacks::MP_ENDPLAYLOOP);
 | 
						|
 | 
						|
		$called4 = false;
 | 
						|
		$modeScriptEventManager->getListOfDisabledCallbacks()->setCallable(function (CallbackListStructure $structure) use (&$called4) {
 | 
						|
			$called4 = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			//Has No Callback
 | 
						|
			$this->assertEmpty($structure->getCallbacks());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(5);
 | 
						|
 | 
						|
		$this->assertTrue($called1);
 | 
						|
		$this->assertTrue($called2);
 | 
						|
		$this->assertTrue($called3);
 | 
						|
		$this->assertTrue($called4);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetCallbackHelp() {
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getCallbackHelp(Callbacks::SM_ONCAPTURE)->setCallable(function (CallbackHelpStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			$this->assertEquals(Callbacks::SM_ONCAPTURE, $structure->getCallbackName());
 | 
						|
			$this->assertContains($structure->getCallbackName(), $structure->getDocumentation());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetMethodsList() {
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getMethodsList()->setCallable(function (MethodListStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			//Has at Least 10 Methods
 | 
						|
			$this->assertArrayHasKey(10, $structure->getMethods());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetMethodHelp() {
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getMethodHelp('XmlRpc.GetMethodHelp')->setCallable(function (MethodHelpStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			$this->assertEquals('XmlRpc.GetMethodHelp', $structure->getMethodName());
 | 
						|
			$this->assertContains("Name", $structure->getDocumentation());
 | 
						|
			$this->assertContains("XmlRpc.GetMethodHelp", $structure->getDocumentation());
 | 
						|
			$this->assertContains("Version", $structure->getDocumentation());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetDocumentation(){
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getDocumentation()->setCallable(function (DocumentationStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
			$this->assertContains("Name", $structure->getDocumentation());
 | 
						|
			$this->assertContains("XmlRpc.GetMethodHelp", $structure->getDocumentation());
 | 
						|
			$this->assertContains("Version", $structure->getDocumentation());
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetAllApiVersions(){
 | 
						|
		$maniaControl = new ManiaControl();
 | 
						|
		$maniaControl->connect();
 | 
						|
 | 
						|
		$modeScriptEventManager = $maniaControl->getModeScriptEventManager();
 | 
						|
		$modeScriptEventManager->enableCallbacks();
 | 
						|
 | 
						|
		$called = false;
 | 
						|
		$modeScriptEventManager->getAllApiVersions()->setCallable(function (AllApiVersionsStructure $structure) use (&$called) {
 | 
						|
			$called = true;
 | 
						|
			$this->assertJson($structure->toJson());
 | 
						|
 | 
						|
			$this->assertArrayHasKey(0, $structure->getVersions());
 | 
						|
			$this->assertContains(".", $structure->getLatest()); // like 2.0.0 (just check if a dot is in)
 | 
						|
		});
 | 
						|
 | 
						|
		$maniaControl->run(3);
 | 
						|
 | 
						|
		$this->assertTrue($called);
 | 
						|
	}
 | 
						|
}
 |