| 
<?php
 declare(strict_types=1);
 
 namespace WsdlToPhp\PhpGenerator\Tests\Element;
 
 use InvalidArgumentException;
 use TypeError;
 use WsdlToPhp\PhpGenerator\Element\PhpClass;
 use WsdlToPhp\PhpGenerator\Element\PhpConstant;
 use WsdlToPhp\PhpGenerator\Element\PhpVariable;
 use WsdlToPhp\PhpGenerator\Tests\TestCase;
 
 /**
 * @internal
 * @coversDefaultClass
 */
 class PhpConstantTest extends TestCase
 {
 public function testGetPhpDeclarationNullValue()
 {
 $constant = new PhpConstant('foo');
 
 $this->assertSame('define(\'foo\', null);', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationTrueValue()
 {
 $constant = new PhpConstant('foo', true);
 
 $this->assertSame('define(\'foo\', true);', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationFalseValue()
 {
 $constant = new PhpConstant('foo', false);
 
 $this->assertSame('define(\'foo\', false);', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationStringOneValue()
 {
 $constant = new PhpConstant('foo', '1');
 
 $this->assertSame('define(\'foo\', \'1\');', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationNumberOneValue()
 {
 $constant = new PhpConstant('foo', 1);
 
 $this->assertSame('define(\'foo\', 1);', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationParenthesisValue()
 {
 $constant = new PhpConstant('foo', 'NCSA Common (Apache default)');
 
 $this->assertSame('define(\'foo\', \'NCSA Common (Apache default)\');', $constant->getPhpDeclaration());
 }
 
 public function testExceptionForNonScalerValue()
 {
 $this->expectException(InvalidArgumentException::class);
 
 new PhpConstant('Foo', []);
 }
 
 public function testGetPhpDeclarationNullValueForClass()
 {
 $constant = new PhpConstant('foo', null, new PhpClass('bar'));
 
 $this->assertSame('const FOO = null;', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationParenthesisValueForClass()
 {
 $constant = new PhpConstant('foo', 'NCSA Common (Apache default)', new PhpClass('bar'));
 
 $this->assertSame('const FOO = \'NCSA Common (Apache default)\';', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationTrueValueForClass()
 {
 $constant = new PhpConstant('foo', true, new PhpClass('Bar'));
 
 $this->assertSame('const FOO = true;', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationFalseValueForClass()
 {
 $constant = new PhpConstant('foo', false, new PhpClass('Bar'));
 
 $this->assertSame('const FOO = false;', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationStringOneValueForClass()
 {
 $constant = new PhpConstant('foo', '1', new PhpClass('Bar'));
 
 $this->assertSame('const FOO = \'1\';', $constant->getPhpDeclaration());
 }
 
 public function testGetPhpDeclarationNumberOneValueForClass()
 {
 $constant = new PhpConstant('foo', 1, new PhpClass('Bar'));
 
 $this->assertSame('const FOO = 1;', $constant->getPhpDeclaration());
 }
 
 public function testAddChild()
 {
 $this->expectException(InvalidArgumentException::class);
 
 $constant = new PhpVariable('Foo', 'bar');
 
 $constant->addChild(new PhpVariable('Bar', 'foo'));
 }
 
 public function testToStringNullValue()
 {
 $constant = new PhpConstant('foo');
 
 $this->assertSame('define(\'foo\', null);', $constant->toString());
 }
 
 public function testToStringNullValueMatchesStringCasting()
 {
 $constant = new PhpConstant('foo');
 
 $this->assertSame((string) $constant, $constant->toString());
 }
 
 public function testToStringNullValueForClass()
 {
 $constant = new PhpConstant('foo', null, new PhpClass('bar'));
 
 $this->assertSame('const FOO = null;', $constant->toString());
 }
 
 public function testGetChildrenTypes()
 {
 $constant = new PhpConstant('foo', null, new PhpClass('bar'));
 
 $this->assertSame([], $constant->getChildrenTypes());
 }
 
 public function testExceptionMessageOnName()
 {
 $this->expectException(TypeError::class);
 
 new PhpConstant(0);
 }
 
 public function testExceptionMessageOnValue()
 {
 $this->expectException(InvalidArgumentException::class);
 $this->expectExceptionMessage('Value of type "object" is not a valid scalar value for PhpConstant object');
 
 new PhpConstant('Foo', new \stdClass());
 }
 }
 
 |