<?php 
 
require_once( __DIR__ . '/../../Event/Aggregator.php' ); 
require_once( __DIR__ . '/../../Event/Handler.php' ); 
require_once( __DIR__ . '/../../Event/GenericEvent.php' ); 
require_once( __DIR__ . '/../../Event/Filter.php' ); 
require_once( __DIR__ . '/../../Patterns/Publisher.php' ); 
     
use Falcraft\Event; 
use Falcraft\Patterns; 
 
echo "Falcraft\\Event\\Aggregator.php Test\n"; 
echo "----------------------------------\n\n"; 
 
echo "Basic Instantiation -- \n\n"; 
 
echo "    Empty Instantiation -> "; 
 
$success = true; 
 
$aggregator = null; 
 
try { 
    $aggregator = new Event\Aggregator(); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "Basic Operations -- \n\n"; 
 
$success = true; 
 
$handler = null; 
 
try { 
    echo "    Instantiate Handler With Closure -> "; 
    $handler = new Event\Handler( 
        null, 
        function($e){echo "Aggregator: " . $e->getData() . "\n";}, 
        null, 
        Event\Handler::DEFAULT_PRIORITY, 
        array('strict' => true) 
    ); 
     
    echo $handler ? "Success!\n" : "Failure...\n"; 
     
    echo "    Attach Handler to Aggregator -> "; 
     
    $aggregator->attachListener($handler); 
     
    echo "Success!\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED\n\n"; 
} 
 
$success = true; 
 
$publisher = null; 
 
try { 
    echo "    Instantiate Publisher -> "; 
    $publisher = new Patterns\Publisher(); 
    echo $publisher ? "Success!\n" : "Failure...\n"; 
     
    echo "    Add Publisher to Aggregate -> "; 
    $aggregator->addPublisher($publisher); 
     
    echo "Success!\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED\n\n"; 
} 
 
$success = true; 
 
$event1 = null; 
 
try { 
    echo "    Instantiating Generic Event (tag1) -> "; 
     
    $event1 = new Event\GenericEvent( 
        null, 
        null, 
        null, 
        null, 
        1, 
        array('tag1') 
    ); 
     
    echo $event1 ? "Success!\n" : "Failure...\n"; 
     
    echo "    Fire Event -> "; 
     
    $publisher->setState($event1); 
     
    echo "\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED\n\n"; 
} 
 
echo "\nExtended Operations -- \n\n"; 
 
echo "        Multiple Publishers -- \n\n"; 
 
$success = true; 
 
$publisher2 = $event2 = null; 
 
try { 
    echo "            Instantiate Publisher2 -> "; 
    $publisher2 = new Patterns\Publisher(); 
     
    echo $publisher2 ? "Success!\n" : "Failure...\n"; 
     
    echo "            Add Publisher to Aggregate -> "; 
    $aggregator->addPublisher($publisher2); 
     
    echo "Success!\n"; 
     
    echo "            Instantiate Event2 (tag2) -> "; 
     
    $event2 = new Event\GenericEvent( 
        null, 
        null, 
        null, 
        null, 
        2, 
        array('tag2') 
    ); 
     
    echo $event2 ? "Success!\n" : "Failure...\n"; 
     
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED!\n\n"; 
} 
 
$success = true; 
 
try { 
    echo "            Fire Publisher2 With Event2 -> "; 
    $publisher2->setState($event2); 
    echo "\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "    Success!\n"; 
} else { 
    echo "    Failure...\n"; 
} 
 
$success = true; 
 
try { 
    echo "            Remove Publisher(1) -> "; 
     
    $aggregator->removePublisher($publisher); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n"; 
} else { 
    echo "Failure...\n"; 
} 
 
$success = true; 
 
try { 
    echo "            Fire Publisher(1) with Event1 -> "; 
    $publisher->setState($event1); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "Success!\n\n"; 
} else { 
    echo "Failure...\n\n"; 
} 
 
echo "        Multiple Observers -- \n\n"; 
 
$success = true; 
 
$handler2 = null; 
 
try { 
    echo "            Instantiate Handler2 (Closure) -> "; 
    $handler2 = new Event\Handler( 
        null, 
        function($e){echo "(Handler2) Aggregator: " . $e->getData();}, 
        null, 
        Event\Handler::DEFAULT_PRIORITY, 
        array('strict' => true) 
    ); 
     
    echo $handler2 ? "Success\n" : "Failure...\n"; 
     
    echo "            Attach Handler2 to Aggregate -> "; 
    $aggregator->attachListener($handler2); 
     
    echo "Success!\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED!\n\n"; 
} 
 
$success = true; 
 
try { 
    echo "            Fire Publisher2 with Event2 -> "; 
    $publisher2->setState($event2); 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if ($success) { 
    echo "    Success!\n\n"; 
} else { 
    echo "    Failure...\n\n"; 
} 
 
echo "        Filter -- \n"; 
 
$success = true; 
 
try { 
    echo "            Instantiate Filter (tag1) -> "; 
    $filter = new Event\Filter(); 
    $filter->setState(array('tags' => array('tag1'))); 
     
    echo $filter ? "Success!\n" : "Failure...\n"; 
     
    echo "            Set Filter on Aggregate -> "; 
    $aggregator->setFilter($filter); 
     
    echo "Success!\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
$success = true; 
 
try { 
    echo "            Fire Publisher2 with Event2 -> "; 
    $publisher2->setState($event2); 
     
    echo "\n            Fire Publisher2 with Event1 -> "; 
    $publisher2->setState($event1); 
     
    echo "\n"; 
} catch (\Exception $e) { 
    $success = false; 
} 
 
if (!$success) { 
    echo "EXCEPTION RAISED\n\n"; 
} 
 
 |