Skip to content

Commit 5f4466f

Browse files
authored
Merge pull request #3 from php-http/patch-2
Make tests independent from implementation
2 parents bc0f487 + 83a0b79 commit 5f4466f

File tree

4 files changed

+73
-8
lines changed

4 files changed

+73
-8
lines changed

phpunit.xml.dist

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@
3434
</exclude>
3535
</whitelist>
3636
</filter>
37+
38+
<php>
39+
<env name="URI_FACTORY" value=""/>
40+
<env name="STREAM_FACTORY" value=""/>
41+
</php>
3742
</phpunit>

src/BaseTest.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,71 @@
22

33
namespace Http\Psr7Test;
44

5+
use GuzzleHttp\Psr7\Stream as GuzzleStream;
6+
use GuzzleHttp\Psr7\Uri as GuzzleUri;
7+
use Slim\Http\Uri as SlimUri;
8+
use Zend\Diactoros\Stream as ZendStream;
9+
use Zend\Diactoros\Uri as ZendUri;
10+
11+
/**
12+
* @author Tobias Nyholm <[email protected]>
13+
*/
514
class BaseTest extends \PHPUnit_Framework_TestCase
615
{
716
protected function assertNotSameObject($a, $b)
817
{
918
$this->assertFalse($a === $b, 'Object does not have different references.');
1019
}
20+
21+
protected function buildUri($uri)
22+
{
23+
$factory = getenv('URI_FACTORY');
24+
25+
if (!empty($factory)) {
26+
$factoryClass = new $factory();
27+
if (!$factoryClass instanceof \Http\Message\UriFactory) {
28+
throw new \RuntimeException('Environment variable "URI_FACTORY" must be a reference to a Http\Message\UriFactory');
29+
}
30+
31+
return $factoryClass->createUri($uri);
32+
}
33+
34+
if (class_exists(GuzzleUri::class)) {
35+
return new GuzzleUri($uri);
36+
}
37+
38+
if (class_exists(SlimUri::class)) {
39+
return SlimUri::createFromString($uri);
40+
}
41+
42+
if (class_exists(ZendUri::class)) {
43+
return new ZendUri($uri);
44+
}
45+
46+
throw new \RuntimeException('Could not create URI. Check your config');
47+
}
48+
49+
protected function buildStream($data)
50+
{
51+
$factory = getenv('STREAM_FACTORY');
52+
53+
if (!empty($factory)) {
54+
$factoryClass = new $factory();
55+
if (!$factoryClass instanceof \Http\Message\StreamFactory) {
56+
throw new \RuntimeException('Environment variable "STREAM_FACTORY" must be a reference to a Http\Message\StreamFactory');
57+
}
58+
59+
return $factoryClass->createStream($data);
60+
}
61+
62+
if (class_exists(GuzzleStream::class)) {
63+
return \GuzzleHttp\Psr7\stream_for($data);
64+
}
65+
66+
if (class_exists(ZendStream::class)) {
67+
return new ZendStream($data);
68+
}
69+
70+
throw new \RuntimeException('Could not create Stream. Check your config');
71+
}
1172
}

src/MessageTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public function testBody()
163163
}
164164

165165
$initialMessage = $this->getMessage();
166-
$stream = \GuzzleHttp\Psr7\stream_for('foo');
166+
$stream = $this->buildStream('foo');
167167
$message = $initialMessage->withBody($stream);
168168
$this->assertNotSameObject($initialMessage, $message);
169169

src/RequestIntegrationTest.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Http\Psr7Test;
44

5-
use GuzzleHttp\Psr7\Uri;
65
use Psr\Http\Message\RequestInterface;
76
use Psr\Http\Message\UriInterface;
87

@@ -81,13 +80,13 @@ public function testUri()
8180

8281
$this->assertInstanceOf(UriInterface::class, $this->request->getUri());
8382

84-
$uri = new Uri('http://www.foo.com/bar');
83+
$uri = $this->buildUri('http://www.foo.com/bar');
8584
$request = $this->request->withUri($uri);
8685
$this->assertNotSameObject($this->request, $request);
8786
$this->assertEquals('www.foo.com', $request->getHeaderLine('host'));
8887
$this->assertEquals('http://www.foo.com/bar', (string) $request->getUri());
8988

90-
$request = $request->withUri(new Uri('/foobar'));
89+
$request = $request->withUri($this->buildUri('/foobar'));
9190
$this->assertNotSameObject($this->request, $request);
9291
$this->assertEquals('www.foo.com', $request->getHeaderLine('host'), 'If the URI does not contain a host component, any pre-existing Host header MUST be carried over to the returned request.');
9392
$this->assertEquals('/foobar', (string) $request->getUri());
@@ -101,7 +100,7 @@ public function testUriPreserveHost_NoHost_Host()
101100
return;
102101
}
103102

104-
$request = $this->request->withUri(new Uri('http://www.foo.com/bar'), true);
103+
$request = $this->request->withUri($this->buildUri('http://www.foo.com/bar'), true);
105104
$this->assertEquals('www.foo.com', $request->getHeaderLine('host'));
106105
}
107106

@@ -114,7 +113,7 @@ public function testUriPreserveHost_NoHost_NoHost()
114113
}
115114

116115
$host = $this->request->getHeaderLine('host');
117-
$request = $this->request->withUri(new Uri('/bar'), true);
116+
$request = $this->request->withUri($this->buildUri('/bar'), true);
118117
$this->assertEquals($host, $request->getHeaderLine('host'));
119118
}
120119

@@ -126,10 +125,10 @@ public function testUriPreserveHost_Host_Host()
126125
return;
127126
}
128127

129-
$request = $this->request->withUri(new Uri('http://www.foo.com/bar'));
128+
$request = $this->request->withUri($this->buildUri('http://www.foo.com/bar'));
130129
$host = $request->getHeaderLine('host');
131130

132-
$request2 = $request->withUri(new Uri('http://www.bar.com/foo'), true);
131+
$request2 = $request->withUri($this->buildUri('http://www.bar.com/foo'), true);
133132
$this->assertEquals($host, $request2->getHeaderLine('host'));
134133
}
135134
}

0 commit comments

Comments
 (0)