public function testBasic()
 {
     $sender = new \stdClass();
     $event = new Event($sender, ['a' => 'b', 'c' => 'd']);
     $this->assertFalse($event->isDefaultPrevented());
     $event->preventDefault();
     $this->assertTrue($event->isDefaultPrevented());
     $this->assertTrue($event->hasParam('a'));
     $this->assertTrue($event->hasParam('c'));
     $this->assertEquals('b', $event->getParam('a'));
     $this->assertEquals('d', $event->getParam('c'));
 }
 /**
  * Plugin REST requests handler
  * 
  * @param Event $event
  */
 public static function handlePluginRESTRequest($event)
 {
     $request = $event->data[0];
     if (strtolower($request->endpoint) != 'plugin') {
         return;
     }
     if (!count($request->path)) {
         throw new RestException('rest_plugin_name_missing', 400);
     }
     $name = array_shift($request->path);
     $info = self::getPluginInfo(ucfirst($name));
     if (!count($request->path)) {
         throw new RestException('rest_endpoint_missing', 400);
     }
     $endpoint = array_shift($request->path);
     $class = ucfirst($name) . 'Plugin' . ucfirst($endpoint) . 'Endpoint';
     if (!class_exists($class)) {
         throw new RestException('rest_endpoint_not_implemented', 501);
     }
     $handler = new $class($request);
     if (!method_exists($handler, $request->method)) {
         throw new RestException('rest_method_not_implemented', 501);
     }
     Logger::debug('Forwarding call to ' . $class . '::' . $request->method . '() handler');
     $event->preventDefault();
     $event->result = call_user_func_array(array($handler, $request->method), $request->path);
 }