register() public static method

Registers a hash. [Mainly used for optimization]
public static register ( mixed $hash )
$hash mixed A hash to register.
Beispiel #1
0
 /**
  * The Constructor.
  *
  * @param object|string $reference An instance or a fully-namespaced class name.
  */
 public function __construct($reference, $static = false)
 {
     $this->_reference = $reference;
     if (is_object($reference)) {
         Suite::register(get_class($reference));
     }
     Suite::register(Suite::hash($reference));
 }
Beispiel #2
0
 /**
  * Constructor
  *
  * @param string|object $actual   A fully-namespaced class name or an object instance.
  * @param string        $expected The expected method method name to be called.
  */
 public function __construct($actual)
 {
     $actual = ltrim($actual, '\\');
     $this->_actual = $actual;
     Suite::register(Suite::hash($actual));
     $this->_message = new Message(['name' => $actual]);
     $this->_backtrace = Debugger::backtrace();
 }
Beispiel #3
0
 /**
  * Stubs a method.
  *
  * @param  string $name    Method name or array of stubs where key are method names and
  *                         values the stubs.
  * @param  string $closure The stub implementation.
  * @return object          The subbed method instance.
  */
 public function method($name, $closure = null)
 {
     $static = false;
     $reference = $this->_reference;
     if (preg_match('/^::.*/', $name)) {
         $static = true;
         $reference = is_object($reference) ? get_class($reference) : $reference;
         $name = substr($name, 2);
     }
     $hash = Suite::hash($reference);
     if (!isset(static::$_registered[$hash])) {
         static::$_registered[$hash] = new static($reference);
     }
     $instance = static::$_registered[$hash];
     if (is_object($reference)) {
         Suite::register(get_class($reference));
     } else {
         Suite::register($reference);
     }
     if (!isset($instance->_stubs[$name])) {
         $instance->_stubs[$name] = [];
     }
     $method = new Method(compact('name', 'static', 'closure'));
     array_unshift($instance->_stubs[$name], $method);
     return $method;
 }
Beispiel #4
0
         Suite::register($hash);
         expect(Suite::registered($hash))->toBe(true);
     });
 });
 describe("::register()", function () {
     it("return `false` if the hash is not registered", function () {
         $instance = new stdClass();
         $hash = Suite::hash($instance);
         expect(Suite::registered($hash))->toBe(false);
     });
 });
 describe("::reset()", function () {
     it("clears registered hashes", function () {
         $instance = new stdClass();
         $hash = Suite::hash($instance);
         Suite::register($hash);
         expect(Suite::registered($hash))->toBe(true);
         Suite::reset();
         expect(Suite::registered($hash))->toBe(false);
     });
 });
 describe("->status()", function () {
     it("returns `0` if a specs suite passes", function () {
         $describe = $this->suite->describe("", function () {
             $this->it("passes", function () {
                 $this->expect(true)->toBe(true);
             });
         });
         $this->suite->run();
         expect($this->suite->status())->toBe(0);
     });
Beispiel #5
0
 /**
  * Stubs a method.
  *
  * @param  string   $path    Method name or array of stubs where key are method names and
  *                           values the stubs.
  * @param  string   $closure The stub implementation.
  * @return Method[]          The created array of method instances.
  * @return Method            The stubbed method instance.
  */
 public function method($path, $closure = null)
 {
     if ($this->_needToBePatched) {
         $layer = Double::classname();
         Monkey::patch($this->_reference, $layer);
         $this->_needToBePatched = false;
         $this->_reference = $layer;
     }
     $reference = $this->_reference;
     if (!$path) {
         throw new InvalidArgumentException("Method name can't be empty.");
     }
     $names = is_array($path) ? $path : [$path];
     $this->_chain = [];
     $total = count($names);
     foreach ($names as $index => $name) {
         if (preg_match('/^::.*/', $name)) {
             $reference = is_object($reference) ? get_class($reference) : $reference;
         }
         $hash = Suite::hash($reference);
         if (!isset(static::$_registered[$hash])) {
             static::$_registered[$hash] = new static($reference);
         }
         $instance = static::$_registered[$hash];
         if (is_object($reference)) {
             Suite::register(get_class($reference));
         } else {
             Suite::register($reference);
         }
         if (!isset($instance->_methods[$name])) {
             $instance->_methods[$name] = [];
             $instance->_stubs[$name] = Double::instance();
         }
         $method = new Method(['parent' => $this, 'reference' => $reference, 'name' => $name]);
         $this->_chain[$name] = $method;
         array_unshift($instance->_methods[$name], $method);
         if ($index < $total - 1) {
             $reference = $instance->_stubs[$name];
             $method->andReturn($instance->_stubs[$name]);
         }
     }
     $method = end($this->_chain);
     if ($closure) {
         $method->andRun($closure);
     }
     return $method;
 }
Beispiel #6
0
 /**
  * Watch a message.
  *
  * @param string|object $actual A fully-namespaced class name or an object instance.
  * @param string        $method The expected method method name to be called.
  * @param object                A message instance.
  */
 protected function _watch($message)
 {
     $reference = $message->reference();
     if (!$reference) {
         Suite::register($message->name());
         return $message;
     }
     if (is_object($reference)) {
         Suite::register(get_class($reference));
     }
     Suite::register(Suite::hash($reference));
     return $message;
 }