1<?php 2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 3// 4// All Rights Reserved. See copyright.txt for details and a complete list of authors. 5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 6// $Id$ 7 8class Tiki_Event_ManagerTest extends PHPUnit_Framework_TestCase 9{ 10 private $called; 11 12 function setUp() 13 { 14 $this->called = 0; 15 } 16 17 function testTriggerUnknown() 18 { 19 $manager = new Tiki_Event_Manager; 20 $manager->trigger('tiki.wiki.update'); 21 22 $this->assertEquals(0, $this->called); 23 } 24 25 function testBindAndTrigger() 26 { 27 $manager = new Tiki_Event_Manager; 28 $manager->bind('tiki.wiki.update', [$this, 'callbackAdd']); 29 30 $manager->trigger('tiki.wiki.update'); 31 32 $this->assertEquals(1, $this->called); 33 } 34 35 function testChaining() 36 { 37 $manager = new Tiki_Event_Manager; 38 39 $manager->bind('tiki.wiki.update', 'tiki.wiki.save'); 40 $manager->bind('tiki.wiki.save', 'tiki.save'); 41 42 $manager->bind('tiki.save', [$this, 'callbackAdd']); 43 $manager->bind('tiki.wiki.save', [$this, 'callbackMultiply']); 44 $manager->bind('tiki.wiki.update', [$this, 'callbackMultiply']); 45 46 $manager->trigger('tiki.wiki.update'); 47 48 $this->assertEquals(4, $this->called); 49 } 50 51 function testProvideBindingArguments() 52 { 53 $manager = new Tiki_Event_Manager; 54 $manager->bind( 55 'tiki.wiki.update', 56 [$this, 'callbackAdd'], 57 ['amount' => 4,] 58 ); 59 60 $manager->bind( 61 'tiki.wiki.update', 62 [$this, 'callbackAdd'], 63 ['amount' => 5,] 64 ); 65 66 $manager->trigger('tiki.wiki.update'); 67 68 $this->assertEquals(9, $this->called); 69 } 70 71 function testCalltimeArgumentsOverrideBinding() 72 { 73 $manager = new Tiki_Event_Manager; 74 75 $manager->bind('tiki.wiki.update', 'tiki.wiki.save'); 76 77 $manager->bind('tiki.save', [$this, 'callbackAdd']); 78 $manager->bind('tiki.wiki.save', [$this, 'callbackAdd'], ['amount' => 3]); 79 $manager->bind('tiki.wiki.update', [$this, 'callbackMultiply']); 80 81 $manager->trigger('tiki.wiki.update', ['amount' => 4]); 82 83 $this->assertEquals(16, $this->called); 84 } 85 86 function testGenerateInheritenceGraph() 87 { 88 $manager = new Tiki_Event_Manager; 89 90 $manager->bind('tiki.wiki.update', 'tiki.wiki.save'); 91 $manager->bind('tiki.wiki.save', 'tiki.save'); 92 $manager->bind('tiki.file.save', 'tiki.save'); 93 94 $manager->bind('tiki.wiki.save', [$this, 'callbackMultiply']); 95 $manager->bind('tiki.wiki.update', [$this, 'callbackMultiply']); 96 $manager->bind('tiki.pageload', [$this, 'callbackMultiply']); 97 98 $this->assertEquals( 99 [ 100 'nodes' => [ 101 'tiki.wiki.update', 102 'tiki.wiki.save', 103 'tiki.file.save', 104 'tiki.pageload', 105 'tiki.save', 106 ], 107 'edges' => [ 108 ['from' => 'tiki.wiki.update', 'to' => 'tiki.wiki.save'], 109 ['from' => 'tiki.wiki.save', 'to' => 'tiki.save'], 110 ['from' => 'tiki.file.save', 'to' => 'tiki.save'], 111 ], 112 ], 113 $manager->getEventGraph() 114 ); 115 } 116 117 function testBindWithPriority() 118 { 119 $manager = new Tiki_Event_Manager; 120 121 $manager->bind('tiki.wiki.update', 'tiki.wiki.save'); 122 $manager->bind('tiki.wiki.save', 'tiki.save'); 123 124 $manager->bindPriority(10, 'tiki.save', [$this, 'callbackAdd']); 125 $manager->bind('tiki.wiki.save', [$this, 'callbackMultiply']); 126 $manager->bind('tiki.wiki.update', [$this, 'callbackMultiply']); 127 128 $manager->trigger('tiki.wiki.update'); 129 130 $this->assertEquals(1, $this->called); 131 } 132 133 function testIndependentTriggers() 134 { 135 $manager = new Tiki_Event_Manager; 136 137 $manager->bind('tiki.wiki.update', 'tiki.wiki.save'); 138 $manager->bind('tiki.wiki.save', 'tiki.save'); 139 140 $manager->bindPriority(10, 'tiki.save', [$this, 'callbackAdd']); 141 $manager->bind('tiki.wiki.save', [$this, 'callbackMultiply']); 142 $manager->bind('tiki.wiki.update', [$this, 'callbackMultiply']); 143 144 $manager->bindPriority( 145 5, 146 'tiki.test.foo', 147 function () use ($manager) { 148 $manager->trigger('tiki.wiki.update'); 149 } 150 ); 151 152 $manager->trigger('tiki.test.foo'); 153 154 $this->assertEquals(1, $this->called); 155 } 156 157 function callbackAdd($arguments) 158 { 159 $this->called += isset($arguments['amount']) ? $arguments['amount'] : 1; 160 } 161 162 function callbackMultiply($arguments) 163 { 164 $this->called *= isset($arguments['amount']) ? $arguments['amount'] : 2; 165 } 166} 167