<?php 
 
declare(strict_types=1); 
 
namespace WsdlToPhp\PhpGenerator\Tests\Element; 
 
use DateTime; 
use InvalidArgumentException; 
use TypeError; 
use WsdlToPhp\PhpGenerator\Element\PhpProperty; 
use WsdlToPhp\PhpGenerator\Element\PhpVariable; 
use WsdlToPhp\PhpGenerator\Tests\TestCase; 
 
/** 
 * @internal 
 * @coversDefaultClass 
 */ 
class PhpPropertyTest extends TestCase 
{ 
    public function testPublicGetPhpDeclarationNoValueEmptyAccess() 
    { 
        $property = new PhpProperty('foo', PhpProperty::NO_VALUE, ''); 
 
        $this->assertSame('$foo;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationNoValue() 
    { 
        $property = new PhpProperty('foo', PhpProperty::NO_VALUE); 
 
        $this->assertSame('public $foo;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationNullValue() 
    { 
        $property = new PhpProperty('foo'); 
 
        $this->assertSame('public $foo = null;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationBoolTypeNoValue() 
    { 
        $property = new PhpProperty('foo', PhpProperty::NO_VALUE, PhpProperty::ACCESS_PUBLIC, PhpProperty::TYPE_BOOL); 
 
        $this->assertSame('public bool $foo;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationDateTimeProperty() 
    { 
        $property = new PhpProperty('date', PhpProperty::NO_VALUE, PhpProperty::ACCESS_PUBLIC, DateTime::class); 
 
        $this->assertSame('public DateTime $date;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationNoTypeTrueValue() 
    { 
        $property = new PhpProperty('foo', true); 
 
        $this->assertSame('public $foo = true;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationFalseValue() 
    { 
        $property = new PhpProperty('foo', false); 
 
        $this->assertSame('public $foo = false;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationStringOneValue() 
    { 
        $property = new PhpProperty('foo', '1'); 
 
        $this->assertSame('public $foo = \'1\';', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationNumberOneValue() 
    { 
        $property = new PhpProperty('foo', 1); 
 
        $this->assertSame('public $foo = 1;', $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationArray() 
    { 
        $property = new PhpProperty('foo', [ 
            '0', 
            1, 
        ]); 
 
        $this->assertSame("public \$foo = [\n  0 => '0',\n  1 => 1,\n];", $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationNewInstance() 
    { 
        $property = new PhpProperty('foo', 'new DOMDocument(\'1.0\', \'utf-8\')'); 
 
        $this->assertSame("public \$foo = new DOMDocument('1.0', 'utf-8');", $property->getPhpDeclaration()); 
    } 
 
    public function testPublicGetPhpDeclarationFunctoin() 
    { 
        $property = new PhpProperty('foo', 'is_array(1)'); 
 
        $this->assertSame('public $foo = is_array(1);', $property->getPhpDeclaration()); 
    } 
 
    public function testPrivateGetPhpDeclarationNullValue() 
    { 
        $property = new PhpProperty('foo', null, PhpProperty::ACCESS_PRIVATE); 
 
        $this->assertSame('private $foo = null;', $property->getPhpDeclaration()); 
    } 
 
    public function testProtectedGetPhpDeclarationNullValue() 
    { 
        $property = new PhpProperty('foo', null, PhpProperty::ACCESS_PROTECTED); 
 
        $this->assertSame('protected $foo = null;', $property->getPhpDeclaration()); 
    } 
 
    public function testAddChild() 
    { 
        $this->expectException(InvalidArgumentException::class); 
 
        $property = new PhpProperty('Foo'); 
 
        $property->addChild(new PhpVariable('Bar')); 
    } 
 
    public function testSetAccess() 
    { 
        $this->expectException(InvalidArgumentException::class); 
 
        $property = new PhpProperty('Foo'); 
 
        $property->setAccess(' public'); 
    } 
 
    public function testExceptionMessageOnName() 
    { 
        $this->expectException(TypeError::class); 
 
        new PhpProperty(0); 
    } 
} 
 
 |