| 
<?php
 require_once('../../Patterns/Prototype.php');
 
 use Falcraft\Patterns;
 
 echo "Falcraft\\Patterns\\Prototype.php Test\n";
 echo "------------------------------------\n\n";
 
 echo "Instantiating Prototype -> ";
 
 $success = true;
 
 $prototype1 = null;
 
 try {
 $prototype1 = new Patterns\Prototype();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Retrieve Identity and Register -> ";
 
 $success = true;
 
 $prototype1Identity = '';
 
 try {
 $prototype1Identity = $prototype1->getIdentity();
 $prototype1->register();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n\n";
 } else {
 echo "Failure...\n\n";
 }
 
 echo "Define Properties On Base Prototype -> ";
 
 $success = true;
 
 try {
 $prototype1->testFunction = function () {echo "Inside Test Function\n";};
 $prototype1->testMemberVariable = "Test Member Variable\n";
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Get Prototype Using Base as Parent -> ";
 
 $success = true;
 
 $prototype2 = null;
 
 try {
 $prototype2 = $prototype1->from();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Prototype Inherits Properties -> \n";
 
 $success = true;
 
 try {
 echo '    ';
 $prototype2->testFunction();
 echo '    ';
 echo $prototype2->testMemberVariable;
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n\n";
 } else {
 echo "Failure...\n\n";
 }
 
 echo "Prototype 2 'Redefines' testFunction -> \n";
 
 $success = true;
 
 try {
 $prototype2->testFunction = function(){echo "Inside Test Function 2\n";};
 echo '    ';
 $prototype2->testFunction();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n\n";
 } else {
 echo "Failure...\n\n";
 }
 
 echo "Instantiate Prototype 3 from Prototype 2,\n";
 echo "Define new Prototype 1 Function,\n";
 echo "Call new function from prototype 3 => ";
 
 $success = true;
 
 try {
 $prototype3 = new Patterns\Prototype();
 $prototype3->__parent = $prototype2;
 $prototype1->newTestFunction = function(){echo"Inside New Test Function\n";};
 $prototype3->newTestFunction();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n\n";
 } else {
 echo "Failure...\n\n";
 }
 
 |