/**
  * Тест общего цикла работы с искрой.
  */
 public function testCreateAndOptions()
 {
     /* Создаём заглушки объектов */
     $context = $this->getMock('IO_Stream_Spark_Context_Interface');
     $opts = $this->getMock('Options_Interface');
     /* Один раз будет вызвано создание объекта опций */
     $context->expects($this->once())->method('createOptions')->will($this->returnValue($opts));
     /* Два раза будут установлены опции */
     $opts->expects($this->exactly(2))->method('apply');
     $callback = array($this, 'getCallback');
     /* Четыре раза искра будет обращаться за параметрами */
     $opts->expects($this->exactly(4))->method('get')->will($this->returnCallback($callback));
     /* Создаём искры */
     $spark = IO_Stream_Spark_Socket::create($context);
     $this->assertType('IO_Stream_Spark_Socket', $spark);
     /* Устанавливаем опции и проверяем fluent interface */
     $this->assertEquals($spark, $spark->setOptions($this->_opts));
     /* Зажигаем! :) */
     $this->assertTrue($spark->ignite());
     $this->assertType('resource', $spark->getStream());
     /* Проверяем получение информации о соединении */
     $name = $spark->getName();
     $this->assertType('string', $name);
     $name = $spark->getName(true);
     $this->assertType('string', $name);
     $this->assertStringEndsWith(':' . $this->_opts['port'], $name);
     $info = $spark->getInfo();
     $this->assertType('array', $info);
 }
 /**
  * Создание новой искры сокета.
  *
  * @var IO_Stream_Spark_Interface
  */
 public function createSocketSpark()
 {
     return IO_Stream_Spark_Socket::create($this);
 }