| 
<?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);
 }
 }
 
 |