private function addElement(AppendStream $stream, array $element) { foreach (array('contents', 'name') as $key) { if (!array_key_exists($key, $element)) { throw new \InvalidArgumentException("A '{$key}' key is required"); } } $element['contents'] = stream_for($element['contents']); if (empty($element['filename'])) { $uri = $element['contents']->getMetadata('uri'); if (substr($uri, 0, 6) !== 'php://') { $element['filename'] = $uri; } } list($body, $headers) = $this->createElement($element['name'], $element['contents'], isset($element['filename']) ? $element['filename'] : null, isset($element['headers']) ? $element['headers'] : array()); $stream->addStream(stream_for($this->getHeaders($headers))); $stream->addStream($body); $stream->addStream(stream_for("\r\n")); }
public function testCanDetermineSizeFromMultipleStreams() { $a = new AppendStream(array(Psr7\stream_for('foo'), Psr7\stream_for('bar'))); $this->assertEquals(6, $a->getSize()); $s = $this->getMockBuilder('Psr\\Http\\Message\\StreamInterface')->setMethods(array('isSeekable', 'isReadable'))->getMockForAbstractClass(); $s->expects($this->once())->method('isSeekable')->will($this->returnValue(null)); $s->expects($this->once())->method('isReadable')->will($this->returnValue(true)); $a->addStream($s); $this->assertNull($a->getSize()); }