Skip to content

Commit a21e529

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents ff6fb0f + 7dd43de commit a21e529

File tree

5 files changed

+77
-30
lines changed

5 files changed

+77
-30
lines changed

appveyor.bat

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
cd c:\tools\php
2+
copy php.ini-production php.ini /Y
3+
echo date.timezone="UTC" >> php.ini
4+
echo extension_dir=ext >> php.ini
5+
echo extension=php_openssl.dll >> php.ini
6+
echo extension=php_mbstring.dll >> php.ini
7+
echo extension=php_fileinfo.dll >> php.ini
8+
echo @php %%~dp0composer.phar %%* > composer.bat
9+
appveyor-retry appveyor DownloadFile https://getcomposer.org/composer.phar

appveyor.yml

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,44 @@
11
build: false
22
platform:
33
- x64
4-
clone_folder: c:\projects\php-api-client
4+
clone_folder: c:\projects\php-project-workspace
55

66

77
## Build matrix for lowest and highest possible targets
88
environment:
99
matrix:
1010
- dependencies: lowest
11+
php_ver_target: 7.0
1112
- dependencies: current
13+
php_ver_target: 7.0
1214
- dependencies: highest
15+
php_ver_target: 7.0
1316

1417
## Cache composer bits
1518
cache:
16-
- c:\tools\php -> appveyor.yml
17-
- c:\projects\php-api-client\vendor -> composer.lock
19+
- C:\ProgramData\chocolatey\bin -> appveyor.yml
20+
- C:\ProgramData\chocolatey\lib -> appveyor.yml
21+
- C:\tools\php -> appveyor.yml
1822
- '%LOCALAPPDATA%\Composer\files -> composer.lock'
1923

2024
## Set up environment varriables
2125
init:
26+
- SET COMPOSER_ROOT_VERSION=dev-master ## Temporary until we tag first versions
2227
- SET PATH=C:\Program Files\OpenSSL;c:\tools\php;%PATH%
2328
- SET COMPOSER_NO_INTERACTION=1
2429
- SET PHP=1
2530
- SET ANSICON=121x90 (121x90)
2631

2732
## Install PHP and composer, and run the appropriate composer command
2833
install:
29-
- IF EXIST c:\tools\php (SET PHP=0)
30-
- IF %PHP%==1 cinst -y OpenSSL.Light
31-
- IF %PHP%==1 cinst -y php
32-
- cd c:\tools\php
33-
- IF %PHP%==1 copy php.ini-production php.ini /Y
34-
- IF %PHP%==1 echo date.timezone="UTC" >> php.ini
35-
- IF %PHP%==1 echo extension_dir=ext >> php.ini
36-
- IF %PHP%==1 echo extension=php_openssl.dll >> php.ini
37-
- IF %PHP%==1 echo extension=php_mbstring.dll >> php.ini
38-
- IF %PHP%==1 echo extension=php_fileinfo.dll >> php.ini
39-
- IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat
40-
- appveyor DownloadFile https://getcomposer.org/composer.phar
41-
- cd c:\projects\php-api-client
42-
- IF %dependencies%==lowest composer update --prefer-lowest --no-progress -n
43-
- IF %dependencies%==current composer install --no-progress
44-
- IF %dependencies%==highest composer update --no-progress -n
45-
- composer show -i
34+
- ps: IF (!(Test-Path c:\tools\php)) {appveyor-retry cinst -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]',''); cmd.exe /c 'appveyor.bat'}
35+
- cd c:\projects\php-project-workspace
36+
- IF %dependencies%==lowest appveyor-retry composer update --prefer-lowest --no-progress -n
37+
- IF %dependencies%==current appveyor-retry composer install --no-progress
38+
- IF %dependencies%==highest appveyor-retry composer update --no-progress -n
39+
- composer show
4640

4741
## Run the actual test
4842
test_script:
49-
- cd c:\projects\php-api-client
50-
- composer qa-ci-windows
43+
- cd c:\projects\php-project-workspace
44+
- vendor/bin/phpunit -c phpunit.xml.dist

src/Transport/Client.php

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Psr\Http\Message\UriInterface;
1717
use React\Cache\CacheInterface;
1818
use React\EventLoop\LoopInterface;
19+
use React\EventLoop\Timer\TimerInterface;
1920
use React\Promise\PromiseInterface;
2021
use function React\Promise\reject;
2122
use React\Promise\RejectedPromise;
@@ -209,12 +210,9 @@ public function request(RequestInterface $request, array $options = [], bool $re
209210
));
210211
})->then(function (ResponseInterface $response) use ($request, $options, $refresh) {
211212
if (isset($options[RequestOptions::STREAM]) && $options[RequestOptions::STREAM] === true) {
212-
return resolve(
213-
new Response(
214-
'',
215-
$response
216-
)
217-
);
213+
$responseWrapper = new Response('', $response);
214+
$this->streamBody($responseWrapper);
215+
return resolve($responseWrapper);
218216
}
219217

220218
$contents = $response->getBody()->getContents();
@@ -245,6 +243,25 @@ public function request(RequestInterface $request, array $options = [], bool $re
245243
});
246244
}
247245

246+
protected function streamBody(Response $response)
247+
{
248+
$stream = $response->getResponse()->getBody();
249+
$this->loop->addPeriodicTimer(0.001, function (TimerInterface $timer) use ($stream, $response) {
250+
if ($stream->eof()) {
251+
$timer->cancel();
252+
$response->emit('end');
253+
return;
254+
}
255+
256+
$size = $stream->getSize();
257+
if ($size === 0) {
258+
return;
259+
}
260+
261+
$response->emit('data', [$stream->read($size)]);
262+
});
263+
}
264+
248265
protected function applyApiSettingsToRequest(RequestInterface $request): RequestInterface
249266
{
250267
$uri = $request->getUri();

src/Transport/Response.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22

33
namespace ApiClients\Foundation\Transport;
44

5+
use Evenement\EventEmitterInterface;
6+
use Evenement\EventEmitterTrait;
57
use Psr\Http\Message\ResponseInterface;
68

7-
final class Response
9+
final class Response implements EventEmitterInterface
810
{
11+
use EventEmitterTrait;
12+
913
/**
1014
* @var string
1115
*/

tests/Transport/ClientTest.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,22 @@ public function testRequestStreaming()
241241
$cache = Phake::mock(CacheInterface::class);
242242

243243
$stream = Phake::mock(StreamInterface::class);
244-
Phake::when($stream)->getContents()->thenReturn('{"foo":"bar"}');
244+
Phake::when($stream)->eof()
245+
->thenReturn(false)
246+
->thenReturn(false)
247+
->thenReturn(false)
248+
->thenReturn(true)
249+
;
250+
Phake::when($stream)->getSize()
251+
->thenReturn(1)
252+
->thenReturn(1)
253+
->thenReturn(1)
254+
;
255+
Phake::when($stream)->read(1)
256+
->thenReturn('a')
257+
->thenReturn('b')
258+
->thenReturn('c')
259+
;
245260

246261
$response = Phake::mock(Response::class);
247262
Phake::when($response)->getBody()->thenReturn($stream);
@@ -276,6 +291,14 @@ public function testRequestStreaming()
276291
$this->assertInstanceOf(TransportResponse::class, $result);
277292
$this->assertSame('', $result->getBody());
278293

294+
$buffer = '';
295+
$result->on('data', function ($data) use (&$buffer) {
296+
$buffer .= $data;
297+
});
298+
$loop->run();
299+
300+
$this->assertSame('abc', $buffer);
301+
279302
Phake::verifyNoInteraction($cache);
280303
}
281304

0 commit comments

Comments
 (0)