<?php 
 
require_once( __DIR__ . '/../../Event/Conduit.php' ); 
require_once( __DIR__ . '/../../Event/Filter.php' ); 
require_once( __DIR__ . '/../../Event/Handler.php' ); 
require_once( __DIR__ . '/../../Event/HandlerPriorityQueue.php' ); 
require_once( __DIR__ . '/../../Event/GenericEvent.php' ); 
require_once( __DIR__ . '/../../Patterns/Publisher.php' ); 
     
use Falcraft\Event; 
use Falcraft\Patterns; 
 
echo "Falcraft\\Event\\Conduit.php Test\n"; 
echo "-------------------------------\n\n"; 
 
echo "Basic Instantiation -- \n"; 
 
echo "    Empty Instantiation (1) -> "; 
 
$success = true; 
 
$conduit1 = null; 
 
try { 
    $conduit1 = new Event\Conduit(); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
echo "    Instantiaton With Filter and Handler -- \n"; 
 
$success = true; 
 
$filter = $handlerz = null; 
 
try { 
    echo "        Instantiate Empty Filter -> "; 
    $filter = new Event\Filter(); 
     
    echo "Success!\n"; 
     
    echo "        Instantiate Handler (Z) -> "; 
    $handlerz = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler Z\n";}, 
        null, 
        Event\Handler::DEFAULT_PRIORITY, 
        array('strict' => true) 
    ); 
     
    echo "Success!\n"; 
     
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED\n\n"; 
} 
 
echo "\n        Instantiate Conduit (2) -> "; 
 
$success = true; 
 
$conduit2 = null; 
 
try { 
    $conduit2 = new Event\Conduit( 
        array($filter, $handlerz), 
        array(), 
        array('strict' => true) 
    ); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "    Instantiate with Publishers Also -- \n"; 
 
$success = true; 
 
$publisher1 = $publisher2 = $publisher3 = null; 
 
try { 
    echo "        Instantiate Publisher1 -> "; 
    $publisher1 = new Patterns\Publisher(); 
    echo "Success!\n"; 
     
    echo "        Instantiate Publisher2 -> "; 
    $publisher2 = new Patterns\Publisher(); 
    echo "Success!\n"; 
     
    echo "        Instantiate Publisher3 -> "; 
    $publisher3 = new Patterns\Publisher(); 
    echo "Success!\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED\n\n"; 
} 
 
echo "        Instantiate Conduit (3) -> "; 
 
$success = true; 
 
$conduit3 = null; 
 
try { 
    $conduit3 = new Event\Conduit( 
        array(array($filter, $handlerz)), 
        array($publisher1, $publisher2, $publisher3,), 
        array('strict' => true) 
    ); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "        Remove Publisher1 and Publisher3 from Conduit 3 -> "; 
 
$success = true; 
 
try { 
    $conduit3->removePublisher($publisher1); 
    $conduit3->removePublisher($publisher3); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "    Prepare 2 Queues & Filters in Conduit -- \n"; 
 
$success = true; 
 
$handler1 = $handler2 = $handler3 = $handler4 = $handler5 = $handler6 = null; 
$queue1 = $queue2 = null; 
 
try { 
    echo "        Instantiate Handlers 1 - 3 and Queue 1 -> "; 
     
    $handler1 = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler 1\n";}, 
        null, 
        1, 
        array('strict' => true) 
    ); 
     
    $handler2 = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler 2\n";}, 
        null, 
        0.5, 
        array('strict' => true) 
    ); 
     
    $handler3 = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler 3\n";}, 
        null, 
        0.3, 
        array('strict' => true) 
    ); 
     
    $queue1 = new Event\HandlerPriorityQueue(array($handler1, $handler2, $handler3,)); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
try { 
    echo "        Instantiate Handlers 4 - 6 and Queue 2 -> "; 
     
    $handler4 = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler 4\n";}, 
        null, 
        Event\Handler::DEFAULT_PRIORITY, 
        array('strict' => true) 
    ); 
     
    $handler5 = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler 5\n";}, 
        null, 
        Event\Handler::DEFAULT_PRIORITY, 
        array('strict' => true) 
    ); 
     
    $handler6 = new Event\Handler( 
        null, 
        function($e){echo "Inside Handler 6\n";}, 
        null, 
        Event\Handler::DEFAULT_PRIORITY, 
        array('strict' => true) 
    ); 
     
    $queue2 = new Event\HandlerPriorityQueue(array($handler4, $handler5, $handler6,)); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
echo "        Instantiate Filter 1 (tag1) and Filter 2 (tag2) -> "; 
 
$success = true; 
 
$filter1 = $filter2 = null; 
 
try { 
    $filter1 = new Event\Filter(); 
    $filter1->setState(array('tags' => array('tag1',))); 
     
    $filter2 = new Event\Filter(); 
    $filter2->setState(array('tags' => array('tag2',))); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
echo "        Instantiate Conduit (4) With Filters, Queues, and Publishers -> "; 
 
$success = true; 
 
$conduit4 = null; 
 
try { 
    $conduit4 = new Event\Conduit( 
        array(array($filter1, $queue1), 
              array($filter2, $queue2),), 
        array($publisher1, $publisher2, $publisher3), 
        array('strict' => true) 
    ); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "Basic Operations -- \n"; 
 
echo "    Event Firing -- \n"; 
 
echo "        Insantiate Events (event2 -> tag1, event3 -> tag2)-> "; 
 
$success = true; 
 
try { 
    $event1 = new Event\GenericEvent( 
        null, 
        null, 
        null, 
        null 
    ); 
     
    $event2 = new Event\GenericEvent( 
        null, 
        null, 
        null, 
        null, 
        null, 
        array('tag1') 
    ); 
     
    $event3 = new Event\GenericEvent( 
        null, 
        null, 
        null, 
        null, 
        null, 
        array('tag2') 
    ); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
echo "        Fire Publisher 1 (Event1) -- "; 
 
$success = true; 
 
try { 
    $publisher1->setState($event1); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "        Fire Publisher 2 (Event2) -- "; 
 
$success = true; 
 
try { 
    $publisher2->setState($event2); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "        Remove Publisher 2 from Conduit 3 -> "; 
 
$success = true; 
 
try { 
    $conduit3->removePublisher($publisher2); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
echo "        Fire Publisher 2 (Event2) -- "; 
 
$success = true; 
 
try { 
    $publisher2->setState($event2); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "        Fire Publisher 3 (Event3) -- "; 
 
$success = true; 
 
try { 
    $publisher3->setState($event3); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
 |