public function onStreamWrite(IO_Stream_Interface $stream, $bytes_written)
 {
     if ($this->_write_buffer->getLength() > 0) {
         return;
     }
     $this->_stream->resetInterest(IO_Stream_Interface::OPERATION_WRITE);
 }
 /**
  * Создание нового объекта буфера ввода/вывода.
  * 
  * @var IO_Buffer_Interface
  */
 public function createBuffer()
 {
     return IO_Buffer::create($this);
 }
 /**
  * Тест для проверки неправильной работы копирования-при-записи.
  */
 public function testCopyOnWriteFail()
 {
     /* Создаём заглушки */
     $context = $this->getMock('IO_Buffer_Context_Interface');
     $opts = $this->getMock('Options_Interface');
     $copy_buf = $this->getMock('IO_Buffer_Interface');
     /* Запрос у контекста нового объекта настроек */
     $context->expects($this->once())->method('createOptions')->will($this->returnValue($opts));
     /* Дважды устанавливаем параметры */
     $opts->expects($this->once())->method('apply');
     $opts->expects($this->once())->method('get')->with($this->equalTo('copy_on_write'))->will($this->returnValue($copy_buf));
     $callback = array($this, 'writeCallbackFail');
     /* Один раз произойдёт запись в буфер копирования */
     $copy_buf->expects($this->once())->method('write')->with($this->equalTo($this->_data))->will($this->returnCallback($callback));
     /* Создаём новый объект буфера */
     $buf = IO_Buffer::create($context);
     $this->assertType('IO_Buffer', $buf);
     $this->setExpectedException('IO_Buffer_Exception');
     /* Записываем в него данные */
     $bytes_written = $buf->write($this->_data);
 }