14c45c9a6c89f917ae0ea25c53368b5e4e037485
[yaffs-website] / vendor / symfony / http-foundation / Tests / CookieTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\HttpFoundation\Tests;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\HttpFoundation\Cookie;
16
17 /**
18  * CookieTest.
19  *
20  * @author John Kary <john@johnkary.net>
21  * @author Hugo Hamon <hugo.hamon@sensio.com>
22  *
23  * @group time-sensitive
24  */
25 class CookieTest extends TestCase
26 {
27     public function invalidNames()
28     {
29         return array(
30             array(''),
31             array(',MyName'),
32             array(';MyName'),
33             array(' MyName'),
34             array("\tMyName"),
35             array("\rMyName"),
36             array("\nMyName"),
37             array("\013MyName"),
38             array("\014MyName"),
39         );
40     }
41
42     /**
43      * @dataProvider invalidNames
44      * @expectedException \InvalidArgumentException
45      */
46     public function testInstantiationThrowsExceptionIfCookieNameContainsInvalidCharacters($name)
47     {
48         new Cookie($name);
49     }
50
51     /**
52      * @expectedException \InvalidArgumentException
53      */
54     public function testInvalidExpiration()
55     {
56         new Cookie('MyCookie', 'foo', 'bar');
57     }
58
59     public function testNegativeExpirationIsNotPossible()
60     {
61         $cookie = new Cookie('foo', 'bar', -100);
62
63         $this->assertSame(0, $cookie->getExpiresTime());
64     }
65
66     public function testGetValue()
67     {
68         $value = 'MyValue';
69         $cookie = new Cookie('MyCookie', $value);
70
71         $this->assertSame($value, $cookie->getValue(), '->getValue() returns the proper value');
72     }
73
74     public function testGetPath()
75     {
76         $cookie = new Cookie('foo', 'bar');
77
78         $this->assertSame('/', $cookie->getPath(), '->getPath() returns / as the default path');
79     }
80
81     public function testGetExpiresTime()
82     {
83         $cookie = new Cookie('foo', 'bar');
84
85         $this->assertEquals(0, $cookie->getExpiresTime(), '->getExpiresTime() returns the default expire date');
86
87         $cookie = new Cookie('foo', 'bar', $expire = time() + 3600);
88
89         $this->assertEquals($expire, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
90     }
91
92     public function testGetExpiresTimeIsCastToInt()
93     {
94         $cookie = new Cookie('foo', 'bar', 3600.9);
95
96         $this->assertSame(3600, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date as an integer');
97     }
98
99     public function testConstructorWithDateTime()
100     {
101         $expire = new \DateTime();
102         $cookie = new Cookie('foo', 'bar', $expire);
103
104         $this->assertEquals($expire->format('U'), $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
105     }
106
107     /**
108      * @requires PHP 5.5
109      */
110     public function testConstructorWithDateTimeImmutable()
111     {
112         $expire = new \DateTimeImmutable();
113         $cookie = new Cookie('foo', 'bar', $expire);
114
115         $this->assertEquals($expire->format('U'), $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date');
116     }
117
118     public function testGetExpiresTimeWithStringValue()
119     {
120         $value = '+1 day';
121         $cookie = new Cookie('foo', 'bar', $value);
122         $expire = strtotime($value);
123
124         $this->assertEquals($expire, $cookie->getExpiresTime(), '->getExpiresTime() returns the expire date', 1);
125     }
126
127     public function testGetDomain()
128     {
129         $cookie = new Cookie('foo', 'bar', 0, '/', '.myfoodomain.com');
130
131         $this->assertEquals('.myfoodomain.com', $cookie->getDomain(), '->getDomain() returns the domain name on which the cookie is valid');
132     }
133
134     public function testIsSecure()
135     {
136         $cookie = new Cookie('foo', 'bar', 0, '/', '.myfoodomain.com', true);
137
138         $this->assertTrue($cookie->isSecure(), '->isSecure() returns whether the cookie is transmitted over HTTPS');
139     }
140
141     public function testIsHttpOnly()
142     {
143         $cookie = new Cookie('foo', 'bar', 0, '/', '.myfoodomain.com', false, true);
144
145         $this->assertTrue($cookie->isHttpOnly(), '->isHttpOnly() returns whether the cookie is only transmitted over HTTP');
146     }
147
148     public function testCookieIsNotCleared()
149     {
150         $cookie = new Cookie('foo', 'bar', time() + 3600 * 24);
151
152         $this->assertFalse($cookie->isCleared(), '->isCleared() returns false if the cookie did not expire yet');
153     }
154
155     public function testCookieIsCleared()
156     {
157         $cookie = new Cookie('foo', 'bar', time() - 20);
158
159         $this->assertTrue($cookie->isCleared(), '->isCleared() returns true if the cookie has expired');
160
161         $cookie = new Cookie('foo', 'bar');
162
163         $this->assertFalse($cookie->isCleared());
164
165         $cookie = new Cookie('foo', 'bar', 0);
166
167         $this->assertFalse($cookie->isCleared());
168
169         $cookie = new Cookie('foo', 'bar', -1);
170
171         $this->assertFalse($cookie->isCleared());
172     }
173
174     public function testToString()
175     {
176         $cookie = new Cookie('foo', 'bar', $expire = strtotime('Fri, 20-May-2011 15:25:52 GMT'), '/', '.myfoodomain.com', true);
177         $this->assertEquals('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; Max-Age=0; path=/; domain=.myfoodomain.com; secure; httponly', (string) $cookie, '->__toString() returns string representation of the cookie');
178
179         $cookie = new Cookie('foo', 'bar with white spaces', strtotime('Fri, 20-May-2011 15:25:52 GMT'), '/', '.myfoodomain.com', true);
180         $this->assertEquals('foo=bar%20with%20white%20spaces; expires=Fri, 20-May-2011 15:25:52 GMT; Max-Age=0; path=/; domain=.myfoodomain.com; secure; httponly', (string) $cookie, '->__toString() encodes the value of the cookie according to RFC 3986 (white space = %20)');
181
182         $cookie = new Cookie('foo', null, 1, '/admin/', '.myfoodomain.com');
183         $this->assertEquals('foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', $expire = time() - 31536001).'; Max-Age=0; path=/admin/; domain=.myfoodomain.com; httponly', (string) $cookie, '->__toString() returns string representation of a cleared cookie if value is NULL');
184
185         $cookie = new Cookie('foo', 'bar', 0, '/', '');
186         $this->assertEquals('foo=bar; path=/; httponly', (string) $cookie);
187     }
188
189     public function testRawCookie()
190     {
191         $cookie = new Cookie('foo', 'b a r', 0, '/', null, false, false);
192         $this->assertFalse($cookie->isRaw());
193         $this->assertEquals('foo=b%20a%20r; path=/', (string) $cookie);
194
195         $cookie = new Cookie('foo', 'b+a+r', 0, '/', null, false, false, true);
196         $this->assertTrue($cookie->isRaw());
197         $this->assertEquals('foo=b+a+r; path=/', (string) $cookie);
198     }
199
200     public function testGetMaxAge()
201     {
202         $cookie = new Cookie('foo', 'bar');
203         $this->assertEquals(0, $cookie->getMaxAge());
204
205         $cookie = new Cookie('foo', 'bar', $expire = time() + 100);
206         $this->assertEquals($expire - time(), $cookie->getMaxAge());
207
208         $cookie = new Cookie('foo', 'bar', $expire = time() - 100);
209         $this->assertEquals(0, $cookie->getMaxAge());
210     }
211
212     public function testFromString()
213     {
214         $cookie = Cookie::fromString('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; path=/; domain=.myfoodomain.com; secure; httponly');
215         $this->assertEquals(new Cookie('foo', 'bar', strtotime('Fri, 20-May-2011 15:25:52 GMT'), '/', '.myfoodomain.com', true, true, true), $cookie);
216
217         $cookie = Cookie::fromString('foo=bar', true);
218         $this->assertEquals(new Cookie('foo', 'bar', 0, '/', null, false, false), $cookie);
219     }
220
221     public function testFromStringWithHttpOnly()
222     {
223         $cookie = Cookie::fromString('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; path=/; domain=.myfoodomain.com; secure; httponly');
224         $this->assertTrue($cookie->isHttpOnly());
225
226         $cookie = Cookie::fromString('foo=bar; expires=Fri, 20-May-2011 15:25:52 GMT; path=/; domain=.myfoodomain.com; secure');
227         $this->assertFalse($cookie->isHttpOnly());
228     }
229
230     public function testSameSiteAttributeIsCaseInsensitive()
231     {
232         $cookie = new Cookie('foo', 'bar', 0, '/', null, false, true, false, 'Lax');
233         $this->assertEquals('lax', $cookie->getSameSite());
234     }
235 }