‪TYPO3CMS  ‪main
StreamTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
27 
28 final class ‪StreamTest extends UnitTestCase
29 {
34  private function ‪getTestDirectory(): string
35  {
36  $path = ‪Environment::getVarPath() . '/tests/' . ‪StringUtility::getUniqueId('root_');
37  $this->testFilesToDelete[] = $path;
39  return $path;
40  }
41 
42  #[Test]
43  public function ‪canInstantiateWithStreamIdentifier(): void
44  {
45  self::assertInstanceOf(Stream::class, new ‪Stream('php://memory', 'wb+'));
46  }
47 
48  #[Test]
49  public function ‪canInstantiateWithStreamResource(): void
50  {
51  $resource = fopen('php://memory', 'wb+');
52  $subject = new ‪Stream($resource);
53  self::assertInstanceOf(Stream::class, $subject);
54  }
55 
56  #[Test]
58  {
59  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
60  touch($fileName);
61  $subject = new ‪Stream($fileName, 'w');
62  self::assertFalse($subject->isReadable());
63  }
64 
65  #[Test]
67  {
68  $subject = new ‪Stream('php://memory', 'r');
69  self::assertFalse($subject->isWritable());
70  }
71 
72  #[Test]
74  {
75  $message = 'foo bar';
76  $subject = new ‪Stream('php://memory', 'wb+');
77  $subject->write($message);
78  self::assertEquals($message, (string)$subject);
79  }
80 
81  #[Test]
82  public function ‪detachReturnsResource(): void
83  {
84  $resource = fopen('php://memory', 'wb+');
85  $subject = new ‪Stream($resource);
86  self::assertSame($resource, $subject->detach());
87  }
88 
89  #[Test]
91  {
92  $this->expectException(\InvalidArgumentException::class);
93  new ‪Stream([' THIS WILL NOT WORK ']);
94  }
95 
96  #[Test]
98  {
99  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
100  touch($fileName);
101  file_put_contents($fileName, 'FOO BAR');
102  $subject = new ‪Stream($fileName, 'w');
103  self::assertEquals('', $subject->__toString());
104  }
105 
106  #[Test]
107  public function ‪closeClosesResource(): void
108  {
109  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
110  touch($fileName);
111  $resource = fopen($fileName, 'wb+');
112  $subject = new ‪Stream($resource);
113  $subject->close();
114  // Testing with a variable here, otherwise the suggested assertion would be assertIsNotResource, which fails.
115  $isResource = is_resource($resource);
116  self::assertFalse($isResource);
117  }
118 
119  #[Test]
120  public function ‪closeUnsetsResource(): void
121  {
122  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
123  touch($fileName);
124  $resource = fopen($fileName, 'wb+');
125  $subject = new ‪Stream($resource);
126  $subject->close();
127  self::assertNull($subject->detach());
128  }
129 
130  #[Test]
131  public function ‪closeDoesNothingAfterDetach(): void
132  {
133  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
134  touch($fileName);
135  $resource = fopen($fileName, 'wb+');
136  $subject = new ‪Stream($resource);
137  $detached = $subject->detach();
138  $subject->close();
139  self::assertIsResource($detached);
140  self::assertSame($resource, $detached);
141  }
142 
143  #[Test]
145  {
146  $subject = new ‪Stream('php://memory', 'wb+');
147  $subject->detach();
148  self::assertNull($subject->getSize());
149  }
150 
151  #[Test]
153  {
154  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
155  file_put_contents($fileName, 'FOO BAR');
156  $resource = fopen($fileName, 'wb+');
157  $subject = new ‪Stream($resource);
158  fseek($resource, 2);
159  self::assertEquals(2, $subject->tell());
160  }
161 
162  #[Test]
164  {
165  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
166  file_put_contents($fileName, 'FOO BAR');
167  $resource = fopen($fileName, 'wb+');
168  $subject = new ‪Stream($resource);
169  fseek($resource, 2);
170  $subject->detach();
171  $this->expectException(\RuntimeException::class);
172  $this->expectExceptionCode(1436717285);
173  $subject->tell();
174  }
175 
176  #[Test]
178  {
179  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
180  file_put_contents($fileName, 'FOO BAR');
181  $resource = fopen($fileName, 'wb+');
182  $subject = new ‪Stream($resource);
183  fseek($resource, 2);
184  self::assertFalse($subject->eof());
185  }
186 
187  #[Test]
188  public function ‪eofReportsTrueWhenAtEndOfStream(): void
189  {
190  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
191  file_put_contents($fileName, 'FOO BAR');
192  $resource = fopen($fileName, 'wb+');
193  $subject = new ‪Stream($resource);
194  while (!feof($resource)) {
195  fread($resource, 4096);
196  }
197  self::assertTrue($subject->eof());
198  }
199 
200  #[Test]
202  {
203  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
204  file_put_contents($fileName, 'FOO BAR');
205  $resource = fopen($fileName, 'wb+');
206  $subject = new ‪Stream($resource);
207  fseek($resource, 2);
208  $subject->detach();
209  self::assertTrue($subject->eof());
210  }
211 
212  #[Test]
214  {
215  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
216  file_put_contents($fileName, 'FOO BAR');
217  $resource = fopen($fileName, 'wb+');
218  $subject = new ‪Stream($resource);
219  self::assertTrue($subject->isSeekable());
220  }
221 
222  #[Test]
224  {
225  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
226  file_put_contents($fileName, 'FOO BAR');
227  $resource = fopen($fileName, 'wb+');
228  $subject = new ‪Stream($resource);
229  $subject->detach();
230  self::assertFalse($subject->isSeekable());
231  }
232 
233  #[Test]
234  public function ‪seekAdvancesToGivenOffsetOfStream(): void
235  {
236  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
237  file_put_contents($fileName, 'FOO BAR');
238  $resource = fopen($fileName, 'wb+');
239  $subject = new ‪Stream($resource);
240  $subject->seek(2);
241  self::assertEquals(2, $subject->tell());
242  }
243 
244  #[Test]
245  public function ‪rewindResetsToStartOfStream(): void
246  {
247  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
248  file_put_contents($fileName, 'FOO BAR');
249  $resource = fopen($fileName, 'wb+');
250  $subject = new ‪Stream($resource);
251  $subject->seek(2);
252  $subject->rewind();
253  self::assertEquals(0, $subject->tell());
254  }
255 
256  #[Test]
258  {
259  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
260  file_put_contents($fileName, 'FOO BAR');
261  $resource = fopen($fileName, 'wb+');
262  $subject = new ‪Stream($resource);
263  $subject->detach();
264  $this->expectException(\RuntimeException::class);
265  $this->expectExceptionCode(1436717287);
266  $subject->seek(2);
267  }
268 
269  #[Test]
271  {
272  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
273  file_put_contents($fileName, 'FOO BAR');
274  $resource = fopen($fileName, 'wb+');
275  $subject = new ‪Stream($resource);
276  $subject->detach();
277  self::assertFalse($subject->isWritable());
278  }
279 
280  #[Test]
282  {
283  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
284  file_put_contents($fileName, 'FOO BAR');
285  $resource = fopen($fileName, 'wb+');
286  $subject = new ‪Stream($resource);
287  $subject->detach();
288  $this->expectException(\RuntimeException::class);
289  $this->expectExceptionCode(1436717290);
290  $subject->write('bar');
291  }
292 
293  #[Test]
295  {
296  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
297  file_put_contents($fileName, 'FOO BAR');
298  $resource = fopen($fileName, 'wb+');
299  $subject = new ‪Stream($resource);
300  $subject->detach();
301  self::assertFalse($subject->isReadable());
302  }
303 
304  #[Test]
306  {
307  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
308  file_put_contents($fileName, 'FOO BAR');
309  $resource = fopen($fileName, 'r');
310  $subject = new ‪Stream($resource);
311  $subject->detach();
312  $this->expectException(\RuntimeException::class);
313  $this->expectExceptionCode(1436717292);
314  $subject->read(4096);
315  }
316 
317  #[Test]
319  {
320  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
321  file_put_contents($fileName, 'FOO BAR');
322  $resource = fopen($fileName, 'r');
323  $subject = new ‪Stream($resource);
324  while (!feof($resource)) {
325  fread($resource, 4096);
326  }
327  self::assertEquals('', $subject->read(4096));
328  }
329 
330  #[Test]
332  {
333  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
334  file_put_contents($fileName, 'FOO BAR');
335  $resource = fopen($fileName, 'w');
336  $subject = new ‪Stream($resource);
337  self::assertEquals('', $subject->getContents());
338  }
339 
340  public static function ‪invalidResourcesDataProvider(): array
341  {
342  return [
343  'null' => [null],
344  'false' => [false],
345  'true' => [true],
346  'int' => [1],
347  'float' => [1.1],
348  'array' => [[]],
349  'object' => [new \stdClass()],
350  ];
351  }
352 
353  #[DataProvider('invalidResourcesDataProvider')]
354  #[Test]
356  {
357  $this->expectException(\InvalidArgumentException::class);
358  $this->expectExceptionCode(1436717297);
359  $subject = new ‪Stream('php://memory', 'wb+');
360  $subject->attach($resource);
361  }
362 
363  #[Test]
365  {
366  $this->expectException(\InvalidArgumentException::class);
367  $this->expectExceptionCode(1436717296);
368  $subject = new ‪Stream('php://memory', 'wb+');
369  $subject->attach('foo-bar-baz');
370  }
371 
372  #[Test]
374  {
375  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
376  touch($fileName);
377  $resource = fopen($fileName, 'r+');
378  $subject = new ‪Stream('php://memory', 'wb+');
379  $subject->attach($resource);
380  $reflection = new \ReflectionProperty($subject, 'resource');
381  self::assertSame($resource, $reflection->getValue($subject));
382  }
383 
384  #[Test]
386  {
387  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
388  touch($fileName);
389  $subject = new ‪Stream('php://memory', 'wb+');
390  $subject->attach($fileName);
391  $resource = fopen($fileName, 'r+');
392  fwrite($resource, 'FooBar');
393  $subject->rewind();
394  self::assertEquals('FooBar', (string)$subject);
395  }
396 
397  #[Test]
399  {
400  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
401  touch($fileName);
402  $resource = fopen($fileName, 'r+');
403  $subject = new ‪Stream('php://memory', 'wb+');
404  $subject->attach($resource);
405  fwrite($resource, 'FooBar');
406  // rewind, because current pointer is at end of stream!
407  $subject->rewind();
408  self::assertEquals('FooBar', $subject->getContents());
409  }
410 
411  #[Test]
413  {
414  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
415  touch($fileName);
416  $resource = fopen($fileName, 'r+');
417  $subject = new ‪Stream('php://memory', 'wb+');
418  $subject->attach($resource);
419  fwrite($resource, 'FooBar');
420  // seek to position 3
421  $subject->seek(3);
422  self::assertEquals('Bar', $subject->getContents());
423  }
424 
425  #[Test]
427  {
428  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
429  touch($fileName);
430  $resource = fopen($fileName, 'r+');
431  $subject = new ‪Stream('php://memory', 'wb+');
432  $subject->attach($resource);
433  $expected = stream_get_meta_data($resource);
434  self::assertEquals($expected, $subject->getMetadata());
435  }
436 
437  #[Test]
439  {
440  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
441  touch($fileName);
442  $resource = fopen($fileName, 'r+');
443  $subject = new ‪Stream('php://memory', 'wb+');
444  $subject->attach($resource);
445  $metadata = stream_get_meta_data($resource);
446  $expected = $metadata['uri'];
447  self::assertEquals($expected, $subject->getMetadata('uri'));
448  }
449 
450  #[Test]
452  {
453  $fileName = $this->‪getTestDirectory() . '/' . ‪StringUtility::getUniqueId('test_');
454  touch($fileName);
455  $resource = fopen($fileName, 'r+');
456  $subject = new ‪Stream('php://memory', 'wb+');
457  $subject->attach($resource);
458  self::assertNull($subject->getMetadata('TOTALLY_MADE_UP'));
459  }
460 
461  #[Test]
462  public function ‪getSizeReturnsStreamSize(): void
463  {
464  $resource = fopen(__FILE__, 'r');
465  $expected = fstat($resource);
466  $subject = new ‪Stream($resource);
467  self::assertEquals($expected['size'], $subject->getSize());
468  }
469 }
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\closeUnsetsResource
‪closeUnsetsResource()
Definition: StreamTest.php:120
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\attachWithStringRepresentingResourceCreatesAndAttachesResource
‪attachWithStringRepresentingResourceCreatesAndAttachesResource()
Definition: StreamTest.php:385
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\readRaisesExceptionWhenStreamIsDetached
‪readRaisesExceptionWhenStreamIsDetached()
Definition: StreamTest.php:305
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\tellReportsCurrentPositionInResource
‪tellReportsCurrentPositionInResource()
Definition: StreamTest.php:152
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getContentsReturnsEmptyStringIfStreamIsNotReadable
‪getContentsReturnsEmptyStringIfStreamIsNotReadable()
Definition: StreamTest.php:331
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\attachWithResourceAttachesResource
‪attachWithResourceAttachesResource()
Definition: StreamTest.php:373
‪TYPO3\CMS\Core\Tests\Unit\Http
Definition: ApplicationTypeTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\isSeekableReturnsFalseForDetachedStreams
‪isSeekableReturnsFalseForDetachedStreams()
Definition: StreamTest.php:223
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\writeRaisesExceptionWhenStreamIsDetached
‪writeRaisesExceptionWhenStreamIsDetached()
Definition: StreamTest.php:281
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\attachWithNonStringNonResourceRaisesExceptionByType
‪attachWithNonStringNonResourceRaisesExceptionByType($resource)
Definition: StreamTest.php:355
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\closeClosesResource
‪closeClosesResource()
Definition: StreamTest.php:107
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\invalidResourcesDataProvider
‪static invalidResourcesDataProvider()
Definition: StreamTest.php:340
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\isWritableReturnsFalseIfStreamIsNotWritable
‪isWritableReturnsFalseIfStreamIsNotWritable()
Definition: StreamTest.php:66
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getMetadataReturnsAllMetadataWhenNoKeyPresent
‪getMetadataReturnsAllMetadataWhenNoKeyPresent()
Definition: StreamTest.php:426
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getContentsShouldReturnStreamContentsFromCurrentPointer
‪getContentsShouldReturnStreamContentsFromCurrentPointer()
Definition: StreamTest.php:412
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\toStringSerializationReturnsEmptyStringWhenStreamIsNotReadable
‪toStringSerializationReturnsEmptyStringWhenStreamIsNotReadable()
Definition: StreamTest.php:97
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir_deep
‪static mkdir_deep(string $directory)
Definition: GeneralUtility.php:1649
‪TYPO3\CMS\Core\Core\Environment\getVarPath
‪static getVarPath()
Definition: Environment.php:197
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\eofReportsFalseWhenNotAtEndOfStream
‪eofReportsFalseWhenNotAtEndOfStream()
Definition: StreamTest.php:177
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\constructorRaisesExceptionWhenPassingInvalidStreamResource
‪constructorRaisesExceptionWhenPassingInvalidStreamResource()
Definition: StreamTest.php:90
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\canInstantiateWithStreamResource
‪canInstantiateWithStreamResource()
Definition: StreamTest.php:49
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getSizeReturnsStreamSize
‪getSizeReturnsStreamSize()
Definition: StreamTest.php:462
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getMetadataReturnsNullIfNoDataExistsForKey
‪getMetadataReturnsNullIfNoDataExistsForKey()
Definition: StreamTest.php:451
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\isReadableReturnsFalseWhenStreamIsDetached
‪isReadableReturnsFalseWhenStreamIsDetached()
Definition: StreamTest.php:294
‪TYPO3\CMS\Core\Http\Stream
Definition: Stream.php:31
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\rewindResetsToStartOfStream
‪rewindResetsToStartOfStream()
Definition: StreamTest.php:245
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\eofReportsTrueWhenAtEndOfStream
‪eofReportsTrueWhenAtEndOfStream()
Definition: StreamTest.php:188
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\seekAdvancesToGivenOffsetOfStream
‪seekAdvancesToGivenOffsetOfStream()
Definition: StreamTest.php:234
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\toStringRetrievesFullContentsOfStream
‪toStringRetrievesFullContentsOfStream()
Definition: StreamTest.php:73
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\isWritableReturnsFalseWhenStreamIsDetached
‪isWritableReturnsFalseWhenStreamIsDetached()
Definition: StreamTest.php:270
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\attachWithNonStringNonResourceRaisesExceptionByString
‪attachWithNonStringNonResourceRaisesExceptionByString()
Definition: StreamTest.php:364
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getContentsShouldGetFullStreamContents
‪getContentsShouldGetFullStreamContents()
Definition: StreamTest.php:398
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\isReadableReturnsFalseIfStreamIsNotReadable
‪isReadableReturnsFalseIfStreamIsNotReadable()
Definition: StreamTest.php:57
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\tellRaisesExceptionIfResourceIsDetached
‪tellRaisesExceptionIfResourceIsDetached()
Definition: StreamTest.php:163
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getTestDirectory
‪getTestDirectory()
Definition: StreamTest.php:34
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\eofReportsTrueWhenStreamIsDetached
‪eofReportsTrueWhenStreamIsDetached()
Definition: StreamTest.php:201
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getMetadataReturnsDataForSpecifiedKey
‪getMetadataReturnsDataForSpecifiedKey()
Definition: StreamTest.php:438
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\readReturnsEmptyStringWhenAtEndOfFile
‪readReturnsEmptyStringWhenAtEndOfFile()
Definition: StreamTest.php:318
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\closeDoesNothingAfterDetach
‪closeDoesNothingAfterDetach()
Definition: StreamTest.php:131
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest
Definition: StreamTest.php:29
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\seekRaisesExceptionWhenStreamIsDetached
‪seekRaisesExceptionWhenStreamIsDetached()
Definition: StreamTest.php:257
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\isSeekableReturnsTrueForReadableStreams
‪isSeekableReturnsTrueForReadableStreams()
Definition: StreamTest.php:213
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\getSizeReportsNullWhenNoResourcePresent
‪getSizeReportsNullWhenNoResourcePresent()
Definition: StreamTest.php:144
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\canInstantiateWithStreamIdentifier
‪canInstantiateWithStreamIdentifier()
Definition: StreamTest.php:43
‪TYPO3\CMS\Core\Tests\Unit\Http\StreamTest\detachReturnsResource
‪detachReturnsResource()
Definition: StreamTest.php:82