1<?php
2
3/**
4 * Hoa
5 *
6 *
7 * @license
8 *
9 * New BSD License
10 *
11 * Copyright © 2007-2017, Hoa community. All rights reserved.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions are met:
15 *     * Redistributions of source code must retain the above copyright
16 *       notice, this list of conditions and the following disclaimer.
17 *     * Redistributions in binary form must reproduce the above copyright
18 *       notice, this list of conditions and the following disclaimer in the
19 *       documentation and/or other materials provided with the distribution.
20 *     * Neither the name of the Hoa nor the names of its contributors may be
21 *       used to endorse or promote products derived from this software without
22 *       specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37namespace Hoa\Stream\Test\Unit;
38
39use Hoa\Stream\Bucket as SUT;
40use Hoa\Test;
41
42/**
43 * Class \Hoa\Stream\Test\Unit\Bucket.
44 *
45 * Test suite of the stream bucket.
46 *
47 * @copyright  Copyright © 2007-2017 Hoa community
48 * @license    New BSD License
49 */
50class Bucket extends Test\Unit\Suite
51{
52    public function case_constants()
53    {
54        $this
55            ->boolean(SUT::IS_A_BRIGADE)
56                ->isTrue()
57            ->boolean(SUT::IS_A_STREAM)
58                ->isFalse();
59    }
60
61    public function case_construct_a_brigade()
62    {
63        $this
64            ->given($brigade = 'foo')
65            ->when($result = new SUT($brigade, SUT::IS_A_BRIGADE))
66            ->then
67                ->boolean($result->getType())
68                    ->isEqualTo(SUT::IS_A_BRIGADE)
69                ->variable($result->getBrigade())
70                    ->isIdenticalTo($brigade)
71                    ->isIdenticalTo('foo');
72    }
73
74    public function case_construct_a_stream()
75    {
76        $this
77            ->given(
78                $stream = fopen(__FILE__, 'r'),
79                $buffer = 'bar'
80            )
81            ->when($result = new SUT($stream, SUT::IS_A_STREAM, $buffer))
82            ->then
83                ->boolean($result->getType())
84                    ->isEqualTo(SUT::IS_A_STREAM)
85                ->let($bucket = $this->invoke($result)->getBucket())
86                ->object($bucket)
87                    ->isInstanceOf(\StdClass::class)
88                ->resource($bucket->bucket)
89                ->string($bucket->data)
90                    ->isEqualTo($buffer)
91                ->integer($bucket->datalen)
92                    ->isEqualTo(strlen($buffer))
93                ->object($result->getBrigade())
94                    ->isIdenticalTo($bucket);
95    }
96
97    public function case_eob()
98    {
99        $this
100            ->given(
101                $stream = fopen(__FILE__, 'r'),
102                $bucket = new SUT($stream, SUT::IS_A_STREAM)
103            )
104            ->when($result = $bucket->eob())
105            ->then
106                ->boolean($result)
107                    ->isTrue();
108    }
109
110    public function case_set_data()
111    {
112        $this
113            ->given(
114                $stream    = fopen(__FILE__, 'r'),
115                $oldBuffer = 'bar',
116                $bucket    = new SUT($stream, SUT::IS_A_STREAM, $oldBuffer),
117                $buffer    = 'bazqux'
118            )
119            ->when($result = $bucket->setData('bazqux'))
120            ->then
121                ->string($result)
122                    ->isEqualTo($oldBuffer)
123                ->let($_bucket = $this->invoke($bucket)->getBucket())
124                ->object($_bucket)
125                    ->isInstanceOf(\StdClass::class)
126                ->resource($_bucket->bucket)
127                ->string($_bucket->data)
128                    ->isEqualTo($buffer)
129                ->integer($_bucket->datalen)
130                    ->isEqualTo(strlen($buffer))
131                ->object($bucket->getBrigade())
132                    ->isIdenticalTo($_bucket);
133    }
134
135    public function case_get_data()
136    {
137        $this
138            ->given(
139                $stream = fopen(__FILE__, 'r'),
140                $buffer = 'bar',
141                $bucket = new SUT($stream, SUT::IS_A_STREAM, $buffer)
142            )
143            ->when($result = $bucket->getData())
144            ->then
145                ->string($result)
146                    ->isEqualTo($buffer)
147                    ->isEqualTo($this->invoke($bucket)->getBucket()->data);
148    }
149
150    public function case_get_length()
151    {
152        $this
153            ->given(
154                $stream = fopen(__FILE__, 'r'),
155                $buffer = 'bar',
156                $bucket = new SUT($stream, SUT::IS_A_STREAM, $buffer)
157            )
158            ->when($result = $bucket->getLength())
159            ->then
160                ->integer($result)
161                    ->isEqualTo(strlen($buffer))
162                    ->isEqualTo($this->invoke($bucket)->getBucket()->datalen);
163    }
164}
165