/** * Creates a snapshot of all static attributes in user-defined classes. */ private function snapshotStaticAttributes() { foreach ($this->classes as $className) { $class = new ReflectionClass($className); $snapshot = array(); foreach ($class->getProperties() as $attribute) { if ($attribute->isStatic()) { $name = $attribute->getName(); if ($this->blacklist->isStaticAttributeBlacklisted($className, $name)) { continue; } $attribute->setAccessible(true); $value = $attribute->getValue(); if ($this->canBeSerialized($value)) { $snapshot[$name] = unserialize(serialize($value)); } } } if (!empty($snapshot)) { $this->staticAttributes[$className] = $snapshot; } } }
/** * @param boolean $backupGlobals * @return Snapshot */ private function createGlobalStateSnapshot($backupGlobals) { $blacklist = new Blacklist(); foreach ($this->backupGlobalsBlacklist as $globalVariable) { $blacklist->addGlobalVariable($globalVariable); } if (!defined('PHPUNIT_TESTSUITE')) { $blacklist->addClassNamePrefix('PHPUnit'); $blacklist->addClassNamePrefix('File_Iterator'); $blacklist->addClassNamePrefix('PHP_CodeCoverage'); $blacklist->addClassNamePrefix('PHP_Invoker'); $blacklist->addClassNamePrefix('PHP_Timer'); $blacklist->addClassNamePrefix('PHP_Token'); $blacklist->addClassNamePrefix('Symfony'); $blacklist->addClassNamePrefix('Text_Template'); $blacklist->addClassNamePrefix('Doctrine\\Instantiator'); foreach ($this->backupStaticAttributesBlacklist as $class => $attributes) { foreach ($attributes as $attribute) { $blacklist->addStaticAttribute($class, $attribute); } } } return new Snapshot($blacklist, $backupGlobals, $this->backupStaticAttributes, false, false, false, false, false, false, false); }
private function snapshotGlobalState() { if ($this->runTestInSeparateProcess || $this->inIsolation) { return; } $backupGlobals = $this->backupGlobals === null || $this->backupGlobals === true; if ($backupGlobals || $this->backupStaticAttributes) { $blacklist = new Blacklist(); if ($backupGlobals) { foreach ($this->backupGlobalsBlacklist as $globalVariable) { $blacklist->addGlobalVariable($globalVariable); } } if ($this->backupStaticAttributes && !defined('PHPUNIT_TESTSUITE')) { $blacklist->addClassNamePrefix('PHPUnit'); $blacklist->addClassNamePrefix('File_Iterator'); $blacklist->addClassNamePrefix('PHP_CodeCoverage'); $blacklist->addClassNamePrefix('PHP_Invoker'); $blacklist->addClassNamePrefix('PHP_Timer'); $blacklist->addClassNamePrefix('PHP_Token'); $blacklist->addClassNamePrefix('Symfony'); $blacklist->addClassNamePrefix('Text_Template'); $blacklist->addClassNamePrefix('Doctrine\\Instantiator'); foreach ($this->backupStaticAttributesBlacklist as $class => $attributes) { foreach ($attributes as $attribute) { $blacklist->addStaticAttribute($class, $attribute); } } } $this->snapshot = new Snapshot($blacklist, $backupGlobals, $this->backupStaticAttributes, false, false, false, false, false, false, false); } }
public function testStaticAttributeCanBeBlacklisted() { $this->blacklist->addStaticAttribute('SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedClass', 'attribute'); $this->assertTrue($this->blacklist->isStaticAttributeBlacklisted('SebastianBergmann\\GlobalState\\TestFixture\\BlacklistedClass', 'attribute')); }