Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Mink package.
|
Chris@0
|
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
|
Chris@0
|
6 *
|
Chris@0
|
7 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
8 * file that was distributed with this source code.
|
Chris@0
|
9 */
|
Chris@0
|
10
|
Chris@0
|
11 namespace Behat\Mink;
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * Mink sessions manager.
|
Chris@0
|
15 *
|
Chris@0
|
16 * @author Konstantin Kudryashov <ever.zet@gmail.com>
|
Chris@0
|
17 */
|
Chris@0
|
18 class Mink
|
Chris@0
|
19 {
|
Chris@0
|
20 private $defaultSessionName;
|
Chris@0
|
21
|
Chris@0
|
22 /**
|
Chris@0
|
23 * Sessions.
|
Chris@0
|
24 *
|
Chris@0
|
25 * @var Session[]
|
Chris@0
|
26 */
|
Chris@0
|
27 private $sessions = array();
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Initializes manager.
|
Chris@0
|
31 *
|
Chris@0
|
32 * @param Session[] $sessions
|
Chris@0
|
33 */
|
Chris@0
|
34 public function __construct(array $sessions = array())
|
Chris@0
|
35 {
|
Chris@0
|
36 foreach ($sessions as $name => $session) {
|
Chris@0
|
37 $this->registerSession($name, $session);
|
Chris@0
|
38 }
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@0
|
41 /**
|
Chris@0
|
42 * Stops all started sessions.
|
Chris@0
|
43 */
|
Chris@0
|
44 public function __destruct()
|
Chris@0
|
45 {
|
Chris@0
|
46 $this->stopSessions();
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 /**
|
Chris@0
|
50 * Registers new session.
|
Chris@0
|
51 *
|
Chris@0
|
52 * @param string $name
|
Chris@0
|
53 * @param Session $session
|
Chris@0
|
54 */
|
Chris@0
|
55 public function registerSession($name, Session $session)
|
Chris@0
|
56 {
|
Chris@0
|
57 $name = strtolower($name);
|
Chris@0
|
58
|
Chris@0
|
59 $this->sessions[$name] = $session;
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * Checks whether session with specified name is registered.
|
Chris@0
|
64 *
|
Chris@0
|
65 * @param string $name
|
Chris@0
|
66 *
|
Chris@0
|
67 * @return Boolean
|
Chris@0
|
68 */
|
Chris@0
|
69 public function hasSession($name)
|
Chris@0
|
70 {
|
Chris@0
|
71 return isset($this->sessions[strtolower($name)]);
|
Chris@0
|
72 }
|
Chris@0
|
73
|
Chris@0
|
74 /**
|
Chris@0
|
75 * Sets default session name to use.
|
Chris@0
|
76 *
|
Chris@0
|
77 * @param string $name name of the registered session
|
Chris@0
|
78 *
|
Chris@0
|
79 * @throws \InvalidArgumentException
|
Chris@0
|
80 */
|
Chris@0
|
81 public function setDefaultSessionName($name)
|
Chris@0
|
82 {
|
Chris@0
|
83 $name = strtolower($name);
|
Chris@0
|
84
|
Chris@0
|
85 if (!isset($this->sessions[$name])) {
|
Chris@0
|
86 throw new \InvalidArgumentException(sprintf('Session "%s" is not registered.', $name));
|
Chris@0
|
87 }
|
Chris@0
|
88
|
Chris@0
|
89 $this->defaultSessionName = $name;
|
Chris@0
|
90 }
|
Chris@0
|
91
|
Chris@0
|
92 /**
|
Chris@0
|
93 * Returns default session name or null if none.
|
Chris@0
|
94 *
|
Chris@0
|
95 * @return null|string
|
Chris@0
|
96 */
|
Chris@0
|
97 public function getDefaultSessionName()
|
Chris@0
|
98 {
|
Chris@0
|
99 return $this->defaultSessionName;
|
Chris@0
|
100 }
|
Chris@0
|
101
|
Chris@0
|
102 /**
|
Chris@0
|
103 * Returns registered session by it's name or default one.
|
Chris@0
|
104 *
|
Chris@0
|
105 * @param string $name session name
|
Chris@0
|
106 *
|
Chris@0
|
107 * @return Session
|
Chris@0
|
108 *
|
Chris@0
|
109 * @throws \InvalidArgumentException If the named session is not registered
|
Chris@0
|
110 */
|
Chris@0
|
111 public function getSession($name = null)
|
Chris@0
|
112 {
|
Chris@0
|
113 return $this->locateSession($name);
|
Chris@0
|
114 }
|
Chris@0
|
115
|
Chris@0
|
116 /**
|
Chris@0
|
117 * Checks whether a named session (or the default session) has already been started.
|
Chris@0
|
118 *
|
Chris@0
|
119 * @param string $name session name - if null then the default session will be checked
|
Chris@0
|
120 *
|
Chris@0
|
121 * @return bool whether the session has been started
|
Chris@0
|
122 *
|
Chris@0
|
123 * @throws \InvalidArgumentException If the named session is not registered
|
Chris@0
|
124 */
|
Chris@0
|
125 public function isSessionStarted($name = null)
|
Chris@0
|
126 {
|
Chris@0
|
127 $session = $this->locateSession($name);
|
Chris@0
|
128
|
Chris@0
|
129 return $session->isStarted();
|
Chris@0
|
130 }
|
Chris@0
|
131
|
Chris@0
|
132 /**
|
Chris@0
|
133 * Returns session asserter.
|
Chris@0
|
134 *
|
Chris@0
|
135 * @param Session|string $session session object or name
|
Chris@0
|
136 *
|
Chris@0
|
137 * @return WebAssert
|
Chris@0
|
138 */
|
Chris@0
|
139 public function assertSession($session = null)
|
Chris@0
|
140 {
|
Chris@0
|
141 if (!($session instanceof Session)) {
|
Chris@0
|
142 $session = $this->getSession($session);
|
Chris@0
|
143 }
|
Chris@0
|
144
|
Chris@0
|
145 return new WebAssert($session);
|
Chris@0
|
146 }
|
Chris@0
|
147
|
Chris@0
|
148 /**
|
Chris@0
|
149 * Resets all started sessions.
|
Chris@0
|
150 */
|
Chris@0
|
151 public function resetSessions()
|
Chris@0
|
152 {
|
Chris@0
|
153 foreach ($this->sessions as $session) {
|
Chris@0
|
154 if ($session->isStarted()) {
|
Chris@0
|
155 $session->reset();
|
Chris@0
|
156 }
|
Chris@0
|
157 }
|
Chris@0
|
158 }
|
Chris@0
|
159
|
Chris@0
|
160 /**
|
Chris@0
|
161 * Restarts all started sessions.
|
Chris@0
|
162 */
|
Chris@0
|
163 public function restartSessions()
|
Chris@0
|
164 {
|
Chris@0
|
165 foreach ($this->sessions as $session) {
|
Chris@0
|
166 if ($session->isStarted()) {
|
Chris@0
|
167 $session->restart();
|
Chris@0
|
168 }
|
Chris@0
|
169 }
|
Chris@0
|
170 }
|
Chris@0
|
171
|
Chris@0
|
172 /**
|
Chris@0
|
173 * Stops all started sessions.
|
Chris@0
|
174 */
|
Chris@0
|
175 public function stopSessions()
|
Chris@0
|
176 {
|
Chris@0
|
177 foreach ($this->sessions as $session) {
|
Chris@0
|
178 if ($session->isStarted()) {
|
Chris@0
|
179 $session->stop();
|
Chris@0
|
180 }
|
Chris@0
|
181 }
|
Chris@0
|
182 }
|
Chris@0
|
183
|
Chris@0
|
184 /**
|
Chris@0
|
185 * Returns the named or default session without starting it.
|
Chris@0
|
186 *
|
Chris@0
|
187 * @param string $name session name
|
Chris@0
|
188 *
|
Chris@0
|
189 * @return Session
|
Chris@0
|
190 *
|
Chris@0
|
191 * @throws \InvalidArgumentException If the named session is not registered
|
Chris@0
|
192 */
|
Chris@0
|
193 protected function locateSession($name = null)
|
Chris@0
|
194 {
|
Chris@0
|
195 $name = strtolower($name) ?: $this->defaultSessionName;
|
Chris@0
|
196
|
Chris@0
|
197 if (null === $name) {
|
Chris@0
|
198 throw new \InvalidArgumentException('Specify session name to get');
|
Chris@0
|
199 }
|
Chris@0
|
200
|
Chris@0
|
201 if (!isset($this->sessions[$name])) {
|
Chris@0
|
202 throw new \InvalidArgumentException(sprintf('Session "%s" is not registered.', $name));
|
Chris@0
|
203 }
|
Chris@0
|
204
|
Chris@0
|
205 $session = $this->sessions[$name];
|
Chris@0
|
206
|
Chris@0
|
207 return $session;
|
Chris@0
|
208 }
|
Chris@0
|
209 }
|