public function testConstants()
{
$class = new PhpClass();
$this->assertTrue($class->getConstants()->isEmpty());
$this->assertSame($class, $class->setConstants(['foo' => 'bar', new PhpConstant('rabimmel', 'rabammel')]));
$this->assertTrue($class->hasConstant('rabimmel'));
$this->assertEquals(['foo', 'rabimmel'], $class->getConstantNames()->toArray());
$this->assertEquals('bar', $class->getConstant('foo')->getValue());
$this->assertSame($class, $class->setConstant('bar', 'baz'));
$this->assertEquals(['foo', 'rabimmel', 'bar'], $class->getConstantNames()->toArray());
$this->assertEquals(3, $class->getConstants()->size());
$this->assertSame($class, $class->removeConstant('foo'));
$this->assertEquals(['rabimmel', 'bar'], $class->getConstantNames()->toArray());
$this->assertSame($class, $class->setConstant($bim = new PhpConstant('bim', 'bam')));
$this->assertTrue($class->hasConstant('bim'));
$this->assertSame($bim, $class->getConstant('bim'));
$this->assertSame($bim, $class->getConstant($bim));
$this->assertTrue($class->hasConstant($bim));
$this->assertSame($class, $class->removeConstant($bim));
$this->assertFalse($class->hasConstant($bim));
$this->assertFalse($class->getConstants()->isEmpty());
$class->clearConstants();
$this->assertTrue($class->getConstants()->isEmpty());
$class->setConstant('FOO', 'bar');
$this->assertEquals('bar', $class->getConstant('FOO')->getValue());
$class->setConstant('NMBR', 300, true);
$this->assertEquals(300, $class->getConstant('NMBR')->getExpression());
try {
$this->assertEmpty($class->getConstant('constant-not-found'));
} catch (\InvalidArgumentException $e) {
$this->assertNotNull($e);
}
}