| 
<?php
 require_once('../../../Data/Types/Structure.php');
 require_once('../../../Data/Types/Restrictions.php');
 require_once('../../../Data/Types/TaggedUnion.php');
 require_once('../../../Data/Types/Type.php');
 
 use Falcraft\Data\Types;
 use Falcraft\Data\Types\Type;
 
 echo "Falcraft\\Data\\Types\\Structure.php Test\n";
 echo "--------------------------------------\n\n";
 
 echo "Basic Instantiation -> ";
 
 $success = true;
 
 $structure = null;
 
 try {
 $structure = new Types\Structure();
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n\n";
 echo "Structure Internals -- \n\n";
 var_dump($structure->getElements());
 echo "\n";
 }  else {
 echo "Failure...\n";
 }
 
 echo "Set a non-existent element (item => 2) -> ";
 
 $fail = true;
 
 $structure = null;
 
 try {
 $structure = new Types\Structure(array(), array('strict' => true));
 $structure->setElement('item', 2);
 $fail = false;
 } catch (\Exception $e) {
 
 }
 
 if ($fail) {
 echo "Failure!\n";
 } else {
 echo "Success...\n";
 }
 
 echo "Simple Instantiation -> ";
 
 $success = true;
 
 $structure = null;
 
 try {
 $structure = new Types\Structure(
 array('field1', 'field2',),
 array('strict' => true,)
 );
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Set field1 ('value') -> ";
 
 $success = true;
 
 try {
 $structure->setElement('field1', 'value');
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Tagged Union Instantiation (String, Boolean) -> ";
 
 $success = true;
 
 $structure = null;
 
 try {
 $structure = new Types\Structure(
 array('field1',
 array(new Types\Restrictions(array(Type::BASIC_STRING, Type::BASIC_BOOL,)),
 'taggedUnionField',)),
 array('strict' => true)
 );
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success!\n\n";
 echo "Structure Internals -- \n\n";
 var_dump($structure);
 echo "\n";
 } else {
 echo "Failure...\n";
 }
 
 echo "Set TaggedUnion to Improper Type (int) -> ";
 
 $fail = true;
 
 try {
 $structure->setElement('taggedUnionField', 2);
 $failed = false;
 } catch (\Exception $e) {
 
 }
 
 if ($fail) {
 echo "Failure!\n";
 } else {
 echo "Success...\n";
 }
 
 echo "Set TaggedUnion to Proper Type (string) -> ";
 
 $success = true;
 
 try {
 $structure->setElement('taggedUnionField', 'data');
 } catch (\Exception $e) {
 $success = false;
 }
 
 if ($success) {
 echo "Success! (" . $structure->getElement('taggedUnionField') . ")\n";
 } else {
 echo "Failure...\n";
 }
 
 |