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 as LUT;
40use Hoa\Stream\Context as SUT;
41use Hoa\Test;
42
43/**
44 * Class \Hoa\Stream\Test\Unit\Context.
45 *
46 * Test suite of the context stream class.
47 *
48 * @copyright  Copyright © 2007-2017 Hoa community
49 * @license    New BSD License
50 */
51class Context extends Test\Unit\Suite
52{
53    public function case_get_instance_with_empty_id()
54    {
55        $this
56            ->exception(function () {
57                SUT::getInstance(null);
58            })
59            ->isInstanceOf(LUT\Exception::class);
60    }
61
62    public function case_get_new_instance()
63    {
64        $this
65            ->when($result = SUT::getInstance('foo'))
66            ->then
67                ->object($result)
68                    ->isInstanceOf(SUT::class);
69    }
70
71    public function case_get_new_instances()
72    {
73        $this
74            ->when($result = SUT::getInstance('foo'))
75            ->then
76                ->object($result)
77                    ->isNotIdenticalTo(SUT::getInstance('bar'));
78    }
79
80    public function case_get_same_instance()
81    {
82        $this
83            ->when($result = SUT::getInstance('foo'))
84            ->then
85                ->object($result)
86                    ->isIdenticalTo(SUT::getInstance('foo'));
87    }
88
89    public function case_get_id()
90    {
91        $this
92            ->given(
93                $id      = 'foo',
94                $context = SUT::getInstance($id)
95            )
96            ->when($result = $context->getId())
97            ->then
98                ->string($result)
99                    ->isEqualTo($id);
100    }
101
102    public function case_context_exists()
103    {
104        $this
105            ->given(
106                $id = 'foo',
107                SUT::getInstance($id)
108            )
109            ->when($result = SUT::contextExists($id))
110            ->then
111                ->boolean($result)
112                    ->isTrue();
113    }
114
115    public function case_context_does_not_exist()
116    {
117        $this
118            ->when($result = SUT::contextExists('foo'))
119            ->then
120                ->boolean($result)
121                    ->isFalse();
122    }
123
124    public function case_set_options()
125    {
126        $this
127            ->given(
128                $context = SUT::getInstance('foo'),
129                $options = ['bar' => ['baz' => 'qux']]
130            )
131            ->when($result = $context->setOptions($options))
132            ->then
133                ->boolean($result)
134                    ->isTrue();
135    }
136
137    public function case_get_options()
138    {
139        $this
140            ->given(
141                $context = SUT::getInstance('foo'),
142                $options = ['bar' => ['baz' => 'qux']],
143                $context->setOptions($options)
144            )
145            ->when($result = $context->getOptions())
146            ->then
147                ->array($result)
148                    ->isEqualTo($options);
149    }
150
151    public function case_set_parameters()
152    {
153        $this
154            ->given(
155                $context    = SUT::getInstance('foo'),
156                $parameters = [
157                    'notificaion' => 'callback',
158                    'options'     => ['bar' => ['baz' => 'qux']]
159                ]
160            )
161            ->when($result = $context->setParameters($parameters))
162            ->then
163                ->boolean($result)
164                    ->isTrue();
165    }
166
167    public function case_get_parameters()
168    {
169        $this
170            ->given(
171                $context    = SUT::getInstance('foo'),
172                $parameters = [
173                    'notification' => 'callback',
174                    'options'      => ['bar' => ['baz' => 'qux']]
175                ],
176                $context->setParameters($parameters)
177            )
178            ->when($result = $context->getParameters())
179            ->then
180                ->array($result)
181                    ->isEqualTo($parameters);
182    }
183
184    public function case_get_context()
185    {
186        $this
187            ->given($context = SUT::getInstance('foo'))
188            ->when($result = $context->getContext())
189            ->then
190                ->resource($result)
191                    ->isStreamContext();
192    }
193}
194