From 58211d35ca4f5dbdc5186c123bf8076f3b982a51 Mon Sep 17 00:00:00 2001
From: Thomas Flori <thflori@gmail.com>
Date: Mon, 6 Aug 2018 08:18:10 +0200
Subject: [PATCH] use a wrapper class to be able to test send functionality

---
 src/Server.php         | 40 ++++++++++++++++++++++++++++++++++++++++
 src/ServerResponse.php | 13 ++++++++-----
 2 files changed, 48 insertions(+), 5 deletions(-)
 create mode 100644 src/Server.php

diff --git a/src/Server.php b/src/Server.php
new file mode 100644
index 0000000..0bc3832
--- /dev/null
+++ b/src/Server.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Tal;
+
+/**
+ * Class Server
+ *
+ * This class is a stupid wrapper for php functions for testing.
+ *
+ * @package Tal
+ * @author Thomas Flori <thflori@gmail.com>
+ * @codeCoverageIgnore trivial
+ */
+class Server
+{
+    /**
+     * Send a raw HTTP header
+     *
+     * @link http://php.net/manual/en/function.header.php
+     * @param string $string The header string
+     * @param bool $replace
+     * @param int $responseCode
+     * @return void
+     */
+    public function header($string, $replace = true, $responseCode = null)
+    {
+        header($string, $replace, $responseCode);
+    }
+
+    /**
+     * Echos the given $string
+     *
+     * @param $string
+     * @return void
+     */
+    public function echo($string)
+    {
+        echo($string);
+    }
+}
diff --git a/src/ServerResponse.php b/src/ServerResponse.php
index 0310d46..94b03ca 100644
--- a/src/ServerResponse.php
+++ b/src/ServerResponse.php
@@ -17,16 +17,19 @@ class ServerResponse extends Response implements ServerResponseInterface
     /**
      * Sends this response to the client.
      *
+     * @param int $bufferSize
+     * @param Server|null $server
      * @return static
      */
-    public function send(int $bufferSize = 8192)
+    public function send(int $bufferSize = 8192, Server $server = null)
     {
+        $server = $server ?? new Server();
         foreach ($this->getHeaders() as $name => $values) {
             if (strtolower($name) !== 'set-cookie') {
-                header(sprintf('%s: %s', $name, implode(',', $values)), false);
+                $server->header(sprintf('%s: %s', $name, implode(',', $values)), false);
             } else {
                 foreach ($values as $value) {
-                    header(sprintf('%s: %s', $name, $value), false);
+                    $server->header(sprintf('%s: %s', $name, $value), false);
                 }
             }
         }
@@ -37,14 +40,14 @@ class ServerResponse extends Response implements ServerResponseInterface
             $this->getStatusCode(),
             $this->getReasonPhrase()
         );
-        header($http_line, true, $this->getStatusCode());
+        $server->header($http_line, true, $this->getStatusCode());
 
         $stream = $this->getBody();
         if ($stream->isSeekable()) {
             $stream->rewind();
         }
         while (!$stream->eof()) {
-            echo $stream->read($bufferSize);
+            $server->echo($stream->read($bufferSize));
         }
         return $this;
     }
-- 
GitLab