Esempio n. 1
0
 /**
  * @since Method available since Release 3.5.4
  */
 protected function handleDependencies()
 {
     if (!empty($this->dependencies) && !$this->inIsolation) {
         $className = get_class($this);
         $passed = $this->result->passed();
         $passedKeys = array_keys($passed);
         $numKeys = count($passedKeys);
         for ($i = 0; $i < $numKeys; $i++) {
             $pos = strpos($passedKeys[$i], ' with data set');
             if ($pos !== false) {
                 $passedKeys[$i] = substr($passedKeys[$i], 0, $pos);
             }
         }
         $passedKeys = array_flip(array_unique($passedKeys));
         foreach ($this->dependencies as $dependency) {
             $clone = false;
             if (strpos($dependency, 'clone ') === 0) {
                 $clone = true;
                 $dependency = substr($dependency, strlen('clone '));
             } elseif (strpos($dependency, '!clone ') === 0) {
                 $clone = false;
                 $dependency = substr($dependency, strlen('!clone '));
             }
             if (strpos($dependency, '::') === false) {
                 $dependency = $className . '::' . $dependency;
             }
             if (!isset($passedKeys[$dependency])) {
                 $this->result->addError($this, new PHPUnit_Framework_SkippedTestError(sprintf('This test depends on "%s" to pass.', $dependency)), 0);
                 return false;
             }
             if (isset($passed[$dependency])) {
                 if ($passed[$dependency]['size'] != PHPUnit_Util_Test::UNKNOWN && $this->getSize() != PHPUnit_Util_Test::UNKNOWN && $passed[$dependency]['size'] > $this->getSize()) {
                     $this->result->addError($this, new PHPUnit_Framework_SkippedTestError('This test depends on a test that is larger than itself.'), 0);
                     return false;
                 }
                 if ($clone) {
                     $deepCopy = new DeepCopy();
                     $deepCopy->skipUncloneable(false);
                     $this->dependencyInput[$dependency] = $deepCopy->copy($passed[$dependency]['result']);
                 } else {
                     $this->dependencyInput[$dependency] = $passed[$dependency]['result'];
                 }
             } else {
                 $this->dependencyInput[$dependency] = null;
             }
         }
     }
     return true;
 }