Skip to content

Commit 619e8fa

Browse files
committed
Added missing test for event_dispatcher and yaml
1 parent e415465 commit 619e8fa

21 files changed

+3461
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the symfony package.
5+
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
11+
$_test_dir = realpath(dirname(__FILE__).'/../..');
12+
require_once($_test_dir.'/../lib/vendor/lime/lime.php');
13+
require_once($_test_dir.'/../lib/event_dispatcher/sfEvent.php');
14+
require_once($_test_dir.'/../lib/event_dispatcher/sfEventDispatcher.php');
15+
16+
$t = new lime_test(19);
17+
18+
$dispatcher = new sfEventDispatcher();
19+
20+
// ->connect() ->disconnect()
21+
$t->diag('->connect() ->disconnect()');
22+
$dispatcher->connect('bar', 'listenToBar');
23+
$t->is($dispatcher->getListeners('bar'), array('listenToBar'), '->connect() connects a listener to an event name');
24+
$dispatcher->connect('bar', 'listenToBarBar');
25+
$t->is($dispatcher->getListeners('bar'), array('listenToBar', 'listenToBarBar'), '->connect() can connect several listeners for the same event name');
26+
27+
$dispatcher->connect('barbar', 'listenToBarBar');
28+
$dispatcher->disconnect('bar', 'listenToBarBar');
29+
$t->is($dispatcher->getListeners('bar'), array('listenToBar'), '->disconnect() disconnects a listener for an event name');
30+
$t->is($dispatcher->getListeners('barbar'), array('listenToBarBar'), '->disconnect() disconnects a listener for an event name');
31+
32+
$t->ok($dispatcher->disconnect('foobar', 'listen') === false, '->disconnect() returns false if the listener does not exist');
33+
34+
// ->getListeners() ->hasListeners()
35+
$t->diag('->getListeners() ->hasListeners()');
36+
$t->is($dispatcher->hasListeners('foo'), false, '->hasListeners() returns false if the event has no listener');
37+
$dispatcher->connect('foo', 'listenToFoo');
38+
$t->is($dispatcher->hasListeners('foo'), true, '->hasListeners() returns true if the event has some listeners');
39+
$dispatcher->disconnect('foo', 'listenToFoo');
40+
$t->is($dispatcher->hasListeners('foo'), false, '->hasListeners() returns false if the event has no listener');
41+
42+
$t->is($dispatcher->getListeners('bar'), array('listenToBar'), '->getListeners() returns an array of listeners connected to the given event name');
43+
$t->is($dispatcher->getListeners('foobar'), array(), '->getListeners() returns an empty array if no listener are connected to the given event name');
44+
45+
$listener = new Listener();
46+
47+
// ->notify()
48+
$t->diag('->notify()');
49+
$listener->reset();
50+
$dispatcher = new sfEventDispatcher();
51+
$dispatcher->connect('foo', array($listener, 'listenToFoo'));
52+
$dispatcher->connect('foo', array($listener, 'listenToFooBis'));
53+
$e = $dispatcher->notify($event = new sfEvent(new stdClass(), 'foo'));
54+
$t->is($listener->getValue(), 'listenToFoolistenToFooBis', '->notify() notifies all registered listeners in order');
55+
$t->is($e, $event, '->notify() returns the event object');
56+
57+
$listener->reset();
58+
$dispatcher = new sfEventDispatcher();
59+
$dispatcher->connect('foo', array($listener, 'listenToFooBis'));
60+
$dispatcher->connect('foo', array($listener, 'listenToFoo'));
61+
$dispatcher->notify(new sfEvent(new stdClass(), 'foo'));
62+
$t->is($listener->getValue(), 'listenToFooBislistenToFoo', '->notify() notifies all registered listeners in order');
63+
64+
// ->notifyUntil()
65+
$t->diag('->notifyUntil()');
66+
$listener->reset();
67+
$dispatcher = new sfEventDispatcher();
68+
$dispatcher->connect('foo', array($listener, 'listenToFoo'));
69+
$dispatcher->connect('foo', array($listener, 'listenToFooBis'));
70+
$e = $dispatcher->notifyUntil($event = new sfEvent(new stdClass(), 'foo'));
71+
$t->is($listener->getValue(), 'listenToFoolistenToFooBis', '->notifyUntil() notifies all registered listeners in order and stops if it returns true');
72+
$t->is($e, $event, '->notifyUntil() returns the event object');
73+
74+
$listener->reset();
75+
$dispatcher = new sfEventDispatcher();
76+
$dispatcher->connect('foo', array($listener, 'listenToFooBis'));
77+
$dispatcher->connect('foo', array($listener, 'listenToFoo'));
78+
$e = $dispatcher->notifyUntil($event = new sfEvent(new stdClass(), 'foo'));
79+
$t->is($listener->getValue(), 'listenToFooBis', '->notifyUntil() notifies all registered listeners in order and stops if it returns true');
80+
81+
// ->filter()
82+
$t->diag('->filter()');
83+
$listener->reset();
84+
$dispatcher = new sfEventDispatcher();
85+
$dispatcher->connect('foo', array($listener, 'filterFoo'));
86+
$dispatcher->connect('foo', array($listener, 'filterFooBis'));
87+
$e = $dispatcher->filter($event = new sfEvent(new stdClass(), 'foo'), 'foo');
88+
$t->is($e->getReturnValue(), '-*foo*-', '->filter() filters a value');
89+
$t->is($e, $event, '->filter() returns the event object');
90+
91+
$listener->reset();
92+
$dispatcher = new sfEventDispatcher();
93+
$dispatcher->connect('foo', array($listener, 'filterFooBis'));
94+
$dispatcher->connect('foo', array($listener, 'filterFoo'));
95+
$e = $dispatcher->filter($event = new sfEvent(new stdClass(), 'foo'), 'foo');
96+
$t->is($e->getReturnValue(), '*-foo-*', '->filter() filters a value');
97+
98+
class Listener
99+
{
100+
protected
101+
$value = '';
102+
103+
function filterFoo(sfEvent $event, $foo)
104+
{
105+
return "*$foo*";
106+
}
107+
108+
function filterFooBis(sfEvent $event, $foo)
109+
{
110+
return "-$foo-";
111+
}
112+
113+
function listenToFoo(sfEvent $event)
114+
{
115+
$this->value .= 'listenToFoo';
116+
}
117+
118+
function listenToFooBis(sfEvent $event)
119+
{
120+
$this->value .= 'listenToFooBis';
121+
122+
return true;
123+
}
124+
125+
function getValue()
126+
{
127+
return $this->value;
128+
}
129+
130+
function reset()
131+
{
132+
$this->value = '';
133+
}
134+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the symfony package.
5+
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
6+
*
7+
* For the full copyright and license information, please view the LICENSE
8+
* file that was distributed with this source code.
9+
*/
10+
11+
$_test_dir = realpath(dirname(__FILE__).'/../..');
12+
require_once($_test_dir.'/../lib/vendor/lime/lime.php');
13+
require_once($_test_dir.'/../lib/event_dispatcher/sfEvent.php');
14+
require_once($_test_dir.'/../lib/event_dispatcher/sfEventDispatcher.php');
15+
16+
$t = new lime_test(11);
17+
18+
$subject = new stdClass();
19+
$parameters = array('foo' => 'bar');
20+
$event = new sfEvent($subject, 'name', $parameters);
21+
22+
// ->getSubject()
23+
$t->diag('->getSubject()');
24+
$t->is($event->getSubject(), $subject, '->getSubject() returns the event subject');
25+
26+
// ->getName()
27+
$t->diag('->getName()');
28+
$t->is($event->getName(), 'name', '->getName() returns the event name');
29+
30+
// ->getParameters()
31+
$t->diag('->getParameters()');
32+
$t->is($event->getParameters(), $parameters, '->getParameters() returns the event parameters');
33+
34+
// ->getReturnValue() ->setReturnValue()
35+
$t->diag('->getReturnValue() ->setReturnValue()');
36+
$event->setReturnValue('foo');
37+
$t->is($event->getReturnValue(), 'foo', '->getReturnValue() returns the return value of the event');
38+
39+
// ->setProcessed() ->isProcessed()
40+
$t->diag('->setProcessed() ->isProcessed()');
41+
$event->setProcessed(true);
42+
$t->is($event->isProcessed(), true, '->isProcessed() returns true if the event has been processed');
43+
$event->setProcessed(false);
44+
$t->is($event->isProcessed(), false, '->setProcessed() changes the processed status');
45+
46+
// ArrayAccess interface
47+
$t->diag('ArrayAccess interface');
48+
$t->is($event['foo'], 'bar', 'sfEvent implements the ArrayAccess interface');
49+
$event['foo'] = 'foo';
50+
$t->is($event['foo'], 'foo', 'sfEvent implements the ArrayAccess interface');
51+
52+
try
53+
{
54+
$event['foobar'];
55+
$t->fail('::offsetGet() throws an InvalidArgumentException exception when the parameter does not exist');
56+
}
57+
catch (InvalidArgumentException $e)
58+
{
59+
$t->pass('::offsetGet() throws an InvalidArgumentException exception when the parameter does not exist');
60+
}
61+
62+
$t->ok(isset($event['foo']), 'sfEvent implements the ArrayAccess interface');
63+
unset($event['foo']);
64+
$t->ok(!isset($event['foo']), 'sfEvent implements the ArrayAccess interface');
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--- %YAML:1.0
2+
test: Simple Alias Example
3+
brief: >
4+
If you need to refer to the same item of data twice,
5+
you can give that item an alias. The alias is a plain
6+
string, starting with an ampersand. The item may then
7+
be referred to by the alias throughout your document
8+
by using an asterisk before the name of the alias.
9+
This is called an anchor.
10+
yaml: |
11+
- &showell Steve
12+
- Clark
13+
- Brian
14+
- Oren
15+
- *showell
16+
php: |
17+
array('Steve', 'Clark', 'Brian', 'Oren', 'Steve')
18+
19+
---
20+
test: Alias of a Mapping
21+
brief: >
22+
An alias can be used on any item of data, including
23+
sequences, mappings, and other complex data types.
24+
yaml: |
25+
- &hello
26+
Meat: pork
27+
Starch: potato
28+
- banana
29+
- *hello
30+
php: |
31+
array(array('Meat'=>'pork', 'Starch'=>'potato'), 'banana', array('Meat'=>'pork', 'Starch'=>'potato'))

0 commit comments

Comments
 (0)