Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
13 / 13
CRAP
100.00% covered (success)
100.00%
1 / 1
AbstractFactory
100.00% covered (success)
100.00%
23 / 23
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
13 / 13
15
100.00% covered (success)
100.00%
1 / 1
 serverRequest
n/a
0 / 0
n/a
0 / 0
n/a
0 / 0
n/a
0 / 0
0
 request
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 response
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 stream
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 streamFromFile
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 streamFromResource
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 uploadedFile
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 uri
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 responseFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 requestFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 streamFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 serverRequestFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 uploadedFileFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 uriFactory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Celemas\Core\Factory;
6
7use Celemas\Core\Exception\ValueError;
8use Override;
9use Psr\Http\Message\RequestFactoryInterface as Requestfactory;
10use Psr\Http\Message\RequestInterface as Request;
11use Psr\Http\Message\ResponseFactoryInterface as ResponseFactory;
12use Psr\Http\Message\ResponseInterface as Response;
13use Psr\Http\Message\ServerRequestFactoryInterface as ServerRequestFactory;
14use Psr\Http\Message\ServerRequestInterface as ServerRequest;
15use Psr\Http\Message\StreamFactoryInterface as StreamFactory;
16use Psr\Http\Message\StreamInterface as Stream;
17use Psr\Http\Message\UploadedFileFactoryInterface as UploadedFileFactory;
18use Psr\Http\Message\UploadedFileInterface as UploadedFile;
19use Psr\Http\Message\UriFactoryInterface as UriFactory;
20use Psr\Http\Message\UriInterface as Uri;
21use Stringable;
22
23/** @api */
24abstract class AbstractFactory implements Factory
25{
26    protected RequestFactory $requestFactory;
27    protected ResponseFactory $responseFactory;
28    protected ServerRequestFactory $serverRequestFactory;
29    protected StreamFactory $streamFactory;
30    protected UploadedFileFactory $uploadedFileFactory;
31    protected UriFactory $uriFactory;
32
33    #[Override]
34    abstract public function serverRequest(): ServerRequest;
35
36    #[Override]
37    public function request(string $method, Uri|string $uri): Request
38    {
39        return $this->requestFactory->createRequest($method, $uri);
40    }
41
42    #[Override]
43    public function response(int $code = 200, string $reasonPhrase = ''): Response
44    {
45        if ($reasonPhrase === '') {
46            return $this->responseFactory->createResponse($code);
47        }
48
49        return $this->responseFactory->createResponse($code, $reasonPhrase);
50    }
51
52    #[Override]
53    public function stream(string|Stringable $content = ''): Stream
54    {
55        return $this->streamFactory->createStream((string) $content);
56    }
57
58    #[Override]
59    public function streamFromFile(string $filename, string $mode = 'r'): Stream
60    {
61        return $this->streamFactory->createStreamFromFile($filename, $mode);
62    }
63
64    #[Override]
65    public function streamFromResource(mixed $resource): Stream
66    {
67        if (is_resource($resource)) {
68            return $this->streamFactory->createStreamFromResource($resource);
69        }
70
71        throw new ValueError('Value must be a valid resource');
72    }
73
74    #[Override]
75    public function uploadedFile(
76        Stream $stream,
77        ?int $size = null,
78        int $error = \UPLOAD_ERR_OK,
79        ?string $clientFilename = null,
80        ?string $clientMediaType = null,
81    ): UploadedFile {
82        return $this->uploadedFileFactory->createUploadedFile(
83            $stream,
84            $size,
85            $error,
86            $clientFilename,
87            $clientMediaType,
88        );
89    }
90
91    #[Override]
92    public function uri(string $uri = ''): Uri
93    {
94        return $this->uriFactory->createUri($uri);
95    }
96
97    #[Override]
98    public function responseFactory(): ResponseFactory
99    {
100        return $this->responseFactory;
101    }
102
103    #[Override]
104    public function requestFactory(): RequestFactory
105    {
106        return $this->requestFactory;
107    }
108
109    #[Override]
110    public function streamFactory(): StreamFactory
111    {
112        return $this->streamFactory;
113    }
114
115    #[Override]
116    public function serverRequestFactory(): ServerRequestFactory
117    {
118        return $this->serverRequestFactory;
119    }
120
121    #[Override]
122    public function uploadedFileFactory(): UploadedFileFactory
123    {
124        return $this->uploadedFileFactory;
125    }
126
127    #[Override]
128    public function uriFactory(): UriFactory
129    {
130        return $this->uriFactory;
131    }
132}

Branches

Below are the source code lines that represent each code branch as identified by Xdebug. Please note a branch is not necessarily coterminous with a line, a line may contain multiple branches and therefore show up more than once. Please also be aware that some branches may be implicit rather than explicit, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

AbstractFactory->request
37    public function request(string $method, Uri|string $uri): Request
38    {
39        return $this->requestFactory->createRequest($method, $uri);
40    }
AbstractFactory->requestFactory
106        return $this->requestFactory;
107    }
AbstractFactory->response
43    public function response(int $code = 200, string $reasonPhrase = ''): Response
44    {
45        if ($reasonPhrase === '') {
46            return $this->responseFactory->createResponse($code);
49        return $this->responseFactory->createResponse($code, $reasonPhrase);
50    }
AbstractFactory->responseFactory
100        return $this->responseFactory;
101    }
AbstractFactory->serverRequestFactory
118        return $this->serverRequestFactory;
119    }
AbstractFactory->stream
53    public function stream(string|Stringable $content = ''): Stream
54    {
55        return $this->streamFactory->createStream((string) $content);
56    }
AbstractFactory->streamFactory
112        return $this->streamFactory;
113    }
AbstractFactory->streamFromFile
59    public function streamFromFile(string $filename, string $mode = 'r'): Stream
60    {
61        return $this->streamFactory->createStreamFromFile($filename, $mode);
62    }
AbstractFactory->streamFromResource
65    public function streamFromResource(mixed $resource): Stream
66    {
67        if (is_resource($resource)) {
68            return $this->streamFactory->createStreamFromResource($resource);
71        throw new ValueError('Value must be a valid resource');
72    }
AbstractFactory->uploadedFile
76        Stream $stream,
77        ?int $size = null,
78        int $error = \UPLOAD_ERR_OK,
79        ?string $clientFilename = null,
80        ?string $clientMediaType = null,
81    ): UploadedFile {
82        return $this->uploadedFileFactory->createUploadedFile(
83            $stream,
84            $size,
85            $error,
86            $clientFilename,
87            $clientMediaType,
88        );
89    }
AbstractFactory->uploadedFileFactory
124        return $this->uploadedFileFactory;
125    }
AbstractFactory->uri
92    public function uri(string $uri = ''): Uri
93    {
94        return $this->uriFactory->createUri($uri);
95    }
AbstractFactory->uriFactory
130        return $this->uriFactory;
131    }