let DEV_2 be trunk
[m6w6/ext-http] / phpunit / CookieTest.php
1 <?php
2
3 ini_set("date.timezone", "Europe/Vienna");
4
5 class CookieTest extends PHPUnit_Framework_TestCase {
6 function testEmpty() {
7 $c = new http\Cookie;
8 $o = clone $c;
9 $a = array(
10 "cookies" => array(),
11 "extras" => array(),
12 "flags" => 0,
13 "expires" => -1,
14 "path" => "",
15 "domain" => "",
16 "max-age" => -1,
17 );
18 $this->assertEquals($a, $c->toArray());
19 $this->assertEquals($a, $o->toArray());
20 }
21
22 function testExpiresAsDate() {
23 $d = new DateTime;
24 $c = new http\Cookie(array("expires" => $d->format(DateTime::RFC1123)));
25 $this->assertEquals($d->format("U"), $c->getExpires());
26 }
27
28 function testNumeric() {
29 $c = new http\Cookie("1=%20; 2=%22; 3=%5D", 0, array(2));
30 $this->assertEquals("1=%20; 3=%5D; 2=%22; ", (string) $c);
31 }
32
33 function testRaw() {
34 $c = new http\Cookie("1=%20; 2=%22; e3=%5D", http\Cookie::PARSE_RAW, array(2));
35 $this->assertEquals("1=%2520; e3=%255D; 2=%2522; ", (string) $c);
36 }
37
38 function testSimple() {
39 $orig = new http\Cookie("key=value");
40 $copy = clone $orig;
41 $same = new http\Cookie($copy);
42 $even = new http\Cookie($same->toArray());
43 foreach (array($orig, $copy) as $c) {
44 $this->assertEquals("value", $c->getCookie("key"));
45 $this->assertEquals(-1, $c->getExpires());
46 $this->assertEquals(-1, $c->getMaxAge());
47 $this->assertEquals(0, $c->getFlags());
48 $this->assertEquals(null, $c->getPath());
49 $this->assertEquals(null, $c->getDomain());
50 $this->assertEquals(array(), $c->getExtras());
51 $this->assertEquals(array("key" => "value"), $c->getCookies());
52 $this->assertEquals("key=value; ", $c->toString());
53 $this->assertEquals(
54 array (
55 "cookies" =>
56 array (
57 "key" => "value",
58 ),
59 "extras" =>
60 array (
61 ),
62 "flags" => 0,
63 "expires" => -1,
64 "path" => "",
65 "domain" => "",
66 "max-age" => -1,
67 ),
68 $c->toArray()
69 );
70 }
71 }
72
73 function testExpires() {
74 $c = new http\Cookie("this=expires; expires=Tue, 24 Jan 2012 10:35:32 +0100");
75 $this->assertEquals("expires", $c->getCookie("this"));
76 $this->assertEquals(1327397732, $c->getExpires());
77 $o = clone $c;
78 $t = time();
79 $o->setExpires();
80 $this->assertEquals(-1, $o->getExpires());
81 $this->assertNotEquals(-1, $c->getExpires());
82 $o->setExpires($t);
83 $this->assertEquals($t, $o->getExpires());
84 $this->assertNotEquals($t, $c->getExpires());
85 $this->assertEquals(
86 sprintf(
87 "this=expires; expires=%s; ",
88 date_create("@$t")
89 ->setTimezone(new DateTimezone("UTC"))
90 ->format("D, d M Y H:i:s \\G\\M\\T")
91 ),
92 $o->toString()
93 );
94 }
95
96 function testMaxAge() {
97 $c = new http\Cookie("this=max-age; max-age=12345");
98 $this->assertEquals("max-age", $c->getCookie("this"));
99 $this->assertEquals(12345, $c->getMaxAge());
100 $o = clone $c;
101 $t = 54321;
102 $o->setMaxAge();
103 $this->assertEquals(-1, $o->getMaxAge());
104 $this->assertNotEquals(-1, $c->getMaxAge());
105 $o->setMaxAge($t);
106 $this->assertEquals($t, $o->getMaxAge());
107 $this->assertNotEquals($t, $c->getMaxAge());
108 $this->assertEquals(
109 "this=max-age; max-age=$t; ",
110 $o->toString()
111 );
112 }
113
114 function testPath() {
115 $c = new http\Cookie("this=has a path; path=/down; ");
116 $this->assertEquals("has a path", $c->getCookie("this"));
117 $this->assertEquals("this=has%20a%20path; path=/down; ", (string)$c);
118 $this->assertEquals("/down", $c->getPath());
119 $o = clone $c;
120 $p = "/up";
121 $o->setPath();
122 $this->assertEquals(null, $o->getPath());
123 $this->assertNotEquals(null, $c->getPath());
124 $o->setPath($p);
125 $this->assertEquals($p, $o->getPath());
126 $this->assertNotEquals($p, $c->getPath());
127 $this->assertEquals("this=has%20a%20path; path=$p; ", $o->toString());
128 }
129
130 function testDomain() {
131 $c = new http\Cookie("this=has a domain; domain=.example.com; ");
132 $this->assertEquals("has a domain", $c->getCookie("this"));
133 $this->assertEquals("this=has%20a%20domain; domain=.example.com; ", (string)$c);
134 $this->assertEquals(".example.com", $c->getDomain());
135 $o = clone $c;
136 $d = "sub.example.com";
137 $o->setDomain();
138 $this->assertEquals(null, $o->getDomain());
139 $this->assertNotEquals(null, $c->getDomain());
140 $o->setDomain($d);
141 $this->assertEquals($d, $o->getDomain());
142 $this->assertNotEquals($d, $c->getDomain());
143 $this->assertEquals("this=has%20a%20domain; domain=$d; ", $o->toString());
144 }
145
146 function testFlags() {
147 $c = new http\Cookie("icanhas=flags; secure; httpOnly");
148 $this->assertEquals(http\Cookie::SECURE, $c->getFlags() & http\Cookie::SECURE, "secure");
149 $this->assertEquals(http\Cookie::HTTPONLY, $c->getFlags() & http\Cookie::HTTPONLY, "httpOnly");
150 $c->setFlags($c->getFlags() ^ http\Cookie::SECURE);
151 $this->assertEquals(0, $c->getFlags() & http\Cookie::SECURE, "secure");
152 $this->assertEquals(http\Cookie::HTTPONLY, $c->getFlags() & http\Cookie::HTTPONLY, "httpOnly");
153 $c->setFlags($c->getFlags() ^ http\Cookie::HTTPONLY);
154 $this->assertEquals(0, $c->getFlags() & http\Cookie::SECURE, "secure");
155 $this->assertEquals(0, $c->getFlags() & http\Cookie::HTTPONLY, "httpOnly");
156 $this->assertEquals("icanhas=flags; ", $c->toString());
157 $c->setFlags(http\Cookie::SECURE|http\Cookie::HTTPONLY);
158 $this->assertEquals("icanhas=flags; secure; httpOnly; ", $c->toString());
159 }
160
161 function testExtras() {
162 $c = new http\Cookie("c1=v1; e0=1; e2=2; c2=v2", 0, array("e0", "e1", "e2"));
163 $this->assertEquals(array("c1"=>"v1", "c2"=>"v2"), $c->getCookies());
164 $this->assertEquals(array("e0"=>"1", "e2"=>"2"), $c->getExtras());
165 $c->addExtra("e1", 1);
166 $c->setExtra("e0");
167 $c->setExtra("e3", 123);
168 $this->assertEquals(123, $c->getExtra("e3"));
169 $c->setExtra("e3");
170 $this->assertEquals(array("e2"=>"2", "e1"=>1), $c->getExtras());
171 $this->assertEquals("c1=v1; c2=v2; e2=2; e1=1; ", $c->toString());
172 $c->addExtras(array("e3"=>3, "e4"=>4));
173 $this->assertEquals(array("e2"=>"2", "e1"=>1, "e3"=>3, "e4"=>4), $c->getExtras());
174 $this->assertEquals("c1=v1; c2=v2; e2=2; e1=1; e3=3; e4=4; ", $c->toString());
175 $c->setExtras(array("e"=>"x"));
176 $this->assertEquals(array("e"=>"x"), $c->getExtras());
177 $this->assertEquals("c1=v1; c2=v2; e=x; ", $c->toString());
178 $c->setExtras();
179 $this->assertEquals(array(), $c->getExtras());
180 $this->assertEquals("c1=v1; c2=v2; ", $c->toString());
181 }
182
183 function testCookies() {
184 $c = new http\Cookie("e0=1; c1=v1; e2=2; c2=v2", 0, array("c0", "c1", "c2"));
185 $this->assertEquals(array("c1"=>"v1", "c2"=>"v2"), $c->getExtras());
186 $this->assertEquals(array("e0"=>"1", "e2"=>"2"), $c->getCookies());
187 $c->addCookie("e1", 1);
188 $c->setCookie("e0");
189 $c->setCookie("e3", 123);
190 $this->assertEquals(123, $c->getCookie("e3"));
191 $c->setCookie("e3");
192 $this->assertEquals(array("e2"=>"2", "e1"=>1), $c->getCookies());
193 $this->assertEquals("e2=2; e1=1; c1=v1; c2=v2; ", $c->toString());
194 $c->addCookies(array("e3"=>3, "e4"=>4));
195 $this->assertEquals(array("e2"=>"2", "e1"=>1, "e3"=>3, "e4"=>4), $c->getCookies());
196 $this->assertEquals("e2=2; e1=1; e3=3; e4=4; c1=v1; c2=v2; ", $c->toString());
197 $c->setCookies(array("e"=>"x"));
198 $this->assertEquals(array("e"=>"x"), $c->getCookies());
199 $this->assertEquals("e=x; c1=v1; c2=v2; ", $c->toString());
200 $c->setCookies();
201 $this->assertEquals(array(), $c->getCookies());
202 $this->assertEquals("c1=v1; c2=v2; ", $c->toString());
203 }
204 }