<?php
 
 
require_once('SingletonTrait.php');
 
 
use Falcraft\Patterns;
 
 
class TestSingleton {
 
    use Patterns\SingletonTrait;
 
    
 
    public $publicprop;
 
    private $privateprop;
 
    public static $staticProp = null;
 
    
 
    public function init($testarg1, $testarg2)
 
    {
 
        $this->publicProp = $testarg1;
 
        $this->privateProp = $testarg2;
 
        self::$staticProp = 5;
 
    }
 
    
 
    public function getPrivateProp()
 
    {
 
        return $this->privateProp;
 
    }
 
    
 
    public function setStaticProp($staticarg)
 
    {
 
        self::$staticprop = $staticarg;
 
    }
 
}
 
 
echo "Falcraft\\Patterns\\SingletonTrait.php Test\n";
 
echo "------------------------------------------\n\n";
 
 
echo "Instantiating Singleton with Arguments -> ";
 
 
$success = true;
 
 
$testSingletonInstance = null;
 
 
try {
 
    $testSingletonInstance = TestSingleton::instantiate(1, 2);
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success!\n";
 
} else {
 
    echo "Failure...\n";
 
}
 
 
echo "Check Hardened Through Static Call -> ";
 
 
$success = true;
 
 
$hardened = false;
 
 
try {
 
    $hardened = TestSingleton::hardened();
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($hardened == false) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success: " . ( $hardened ? "Hardened\n" : "Not Hardened\n" );
 
} else {
 
    echo "Failure...: " . ( $hardened ? "Hardened\n" : "Not Hardened\n" );
 
}
 
 
echo "Check Hardened Through Member Function -> ";
 
 
$success = true;
 
 
try {
 
    $hardened = $testSingletonInstance->hardened();
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($hardened == false) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success: " . ( $hardened ? "Hardened\n" : "Not Hardened\n" );
 
} else {
 
    echo "Failure...: " . ( $hardened ? "Hardened\n" : "Not Hardened\n" );
 
}
 
 
echo "Instantiate Again Into Alternate Local Variable -> ";
 
 
$success = true;
 
 
$testSingletonInstanceTwo = null;
 
 
try {
 
    $testSingletonInstanceTwo = TestSingleton::instantiate();
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success!\n";
 
} else {
 
    echo "Failure...\n";
 
}
 
 
echo "Instantiate Into Another Local Variable with Arguments -> ";
 
 
$success = false;
 
 
try {
 
    $testSingletonHardenedTest = TestSingleton::instantiate(4, 5);
 
} catch (\Exception $e) {
 
    $success = true;
 
}
 
 
if ($success) {
 
    echo "Success: Exception Raised\n";
 
} else {
 
    echo "Failure...: No Exception Raised\n";
 
}
 
 
echo "Accessing Private Attribute With Member Function -> ";
 
 
$success = true;
 
 
$privateProp = null;
 
$privateProp2 = null;
 
 
try {
 
    $privateProp = $testSingletonInstance->getPrivateProp();
 
    $privateProp2 = $testSingletonInstanceTwo->getPrivateProp();
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success: $privateProp, $privateProp2\n";
 
} else {
 
    echo "Failure...\n";
 
}
 
 
echo "Accessing Public Attribute Without Member Function -> ";
 
 
$success = true;
 
 
$publicProp = null;
 
$publicProp2 = null;
 
 
try {
 
    $publicProp = $testSingletonInstance->publicProp;
 
    $publicProp2 = $testSingletonInstanceTwo->publicProp;
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success: $publicProp, $publicProp2\n";
 
} else {
 
    echo "Failure...\n";
 
}
 
 
echo "Setting And Accessing Public Static Singleton Attribute -> ";
 
 
$success = true;
 
 
$staticProp = null;
 
 
try {
 
    TestSingleton::$staticProp = 9;
 
    if (TestSingleton::$staticProp == 9) {
 
        $success = true;
 
    } else {
 
        $success = false;
 
    }
 
} catch (\Exception $e) {
 
    $success = false;
 
}
 
 
if ($success) {
 
    echo "Success!\n";
 
} else {
 
    echo "Failure...\n";
 
}
 
 
echo "\n";
 
 |