Net_Growl
[ class tree: Net_Growl ] [ index: Net_Growl ] [ all elements ]

Source for file GntpMock.php

Documentation is available at GntpMock.php

  1. <?php
  2. /**
  3.  * Copyright (c) 2009-2013, Laurent Laville <pear@laurent-laville.org>
  4.  *                          Bertrand Mansion <bmansion@mamasam.com>
  5.  *
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  *
  12.  *     * Redistributions of source code must retain the above copyright
  13.  *       notice, this list of conditions and the following disclaimer.
  14.  *     * Redistributions in binary form must reproduce the above copyright
  15.  *       notice, this list of conditions and the following disclaimer in the
  16.  *       documentation and/or other materials provided with the distribution.
  17.  *     * Neither the name of the authors nor the names of its contributors
  18.  *       may be used to endorse or promote products derived from this software
  19.  *       without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  25.  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31.  * POSSIBILITY OF SUCH DAMAGE.
  32.  *
  33.  * PHP version 5
  34.  *
  35.  * @category Networking
  36.  * @package  Net_Growl
  37.  * @author   Laurent Laville <pear@laurent-laville.org>
  38.  * @author   Bertrand Mansion <bmansion@mamasam.com>
  39.  * @license  http://www.opensource.org/licenses/bsd-license.php  BSD
  40.  * @version  SVN: $Id: GntpMock.php 329265 2013-01-22 17:51:31Z farell $
  41.  * @link     http://growl.laurent-laville.org/
  42.  * @link     http://pear.php.net/package/Net_Growl
  43.  * @since    File available since Release 2.1.0
  44.  */
  45.  
  46. /**
  47.  * Mock adapter intended for testing
  48.  *
  49.  * Can be used to test applications depending on Net_Growl package without
  50.  * actually performing any GNTP requests. This adapter will return responses
  51.  * previously added via addResponse()
  52.  * <code>
  53.  *  $mock = Net_Growl::singleton($appName, $notifications, $password, $options);
  54.  *  $mock->addResponse(
  55.  *          "GNTP/1.0 -OK NONE\r\n" .
  56.  *          "..."
  57.  *  );
  58.  *
  59.  * // This will return the response set above
  60.  * $response = $mock->register();
  61.  * </code>
  62.  *
  63.  * @category Networking
  64.  * @package  Net_Growl
  65.  * @author   Laurent Laville <pear@laurent-laville.org>
  66.  * @license  http://www.opensource.org/licenses/bsd-license.php  BSD
  67.  * @version  Release: 2.7.0
  68.  * @link     http://growl.laurent-laville.org/
  69.  * @link     http://pear.php.net/package/Net_Growl
  70.  * @since    Class available since Release 2.1.0
  71.  */
  72. class Net_Growl_GntpMock extends Net_Growl
  73. {
  74.     /**
  75.      * A queue of responses to be returned by sendRequest()
  76.      *
  77.      * @var array 
  78.      */
  79.     protected $responses = array();
  80.  
  81.     /**
  82.      * Class constructor
  83.      *
  84.      * @param mixed  &$application  Can be either a Net_Growl_Application object
  85.      *                               or the application name string
  86.      * @param array  $notifications List of notification types
  87.      * @param string $password      (optional) Password for Growl
  88.      * @param array  $options       (optional) List of options : 'host', 'port',
  89.      *                               'protocol', 'timeout' for Growl socket server.
  90.      *                               'passwordHashAlgorithm', 'encryptionAlgorithm'
  91.      *                               to secure communications.
  92.      *                               'debug' to know what data are sent and received.
  93.      */
  94.     protected function __construct(&$application$notifications = array(),
  95.         $password ''$options = array()
  96.     {
  97.         parent::__construct($application$notifications$password$options);
  98.     }
  99.  
  100.     /**
  101.      * Sends the REGISTER message type
  102.      *
  103.      * @return Net_Growl_Response 
  104.      * @throws Net_Growl_Exception if remote server communication failure
  105.      */
  106.     public function sendRegister()
  107.     {
  108.         $response $this->sendRequest(nullnull);
  109.         if ($response->getStatus(== 'OK'
  110.             && $response->getResponseAction(== 'REGISTER'
  111.         {
  112.             $this->isRegistered = true;
  113.         }
  114.         return $response;
  115.     }
  116.  
  117.     /**
  118.      * Sends the NOTIFY message type
  119.      *
  120.      * @param string $name        Notification name
  121.      * @param string $title       Notification title
  122.      * @param string $description Notification description
  123.      * @param string $options     Notification options
  124.      *
  125.      * @return Net_Growl_Response 
  126.      * @throws Net_Growl_Exception if remote server communication failure
  127.      */
  128.     public function sendNotify($name$title$description$options)
  129.     {
  130.         $response $this->sendRequest(nullnull);
  131.         if ($response->getStatus(== 'OK'
  132.             && $response->getResponseAction(== 'NOTIFY'
  133.         {
  134.             $this->growlNotificationCount++;
  135.         }
  136.         return $response;
  137.     }
  138.  
  139.     /**
  140.      * Returns the next response from the queue built by addResponse()
  141.      *
  142.      * If the queue is empty it will return default empty response with status 400,
  143.      * if an Exception object was added to the queue it will be thrown.
  144.      *
  145.      * @param string $method   NOT USED
  146.      * @param mixed  $data     NOT USED
  147.      * @param bool   $callback NOT USED
  148.      *
  149.      * @return Net_Growl_Response 
  150.      * @throws Exception
  151.      */
  152.     protected function sendRequest($method$data$callback = false)
  153.     {
  154.         if (count($this->responses> 0{
  155.             $response array_shift($this->responses);
  156.             if ($response instanceof Net_Growl_Response{
  157.                 $this->debug($response->__toString());
  158.                 return $response;
  159.             else {
  160.                 // rethrow the exception
  161.                 $class   get_class($response);
  162.                 $message $response->getMessage();
  163.                 $code    $response->getCode();
  164.                 throw new $class($message$code);
  165.             }
  166.         else {
  167.             $this->debug('Bad Request''error');
  168.             return self::createResponseFromString("Bad Request\r\n");
  169.         }
  170.     }
  171.  
  172.     /**
  173.      * Adds response to the queue
  174.      *
  175.      * @param mixed $response Either a string, a pointer to an open file,
  176.      *                         an instance of Net_Growl_Exception or Exception
  177.      *
  178.      * @return void 
  179.      * @throws Net_Growl_Exception
  180.      */
  181.     public function addResponse($response)
  182.     {
  183.         if (is_string($response)) {
  184.             $response $this->createResponseFromString($response);
  185.         elseif (is_resource($response)) {
  186.             $response $this->createResponseFromFile($response);
  187.         elseif (!$response instanceof Net_Growl_Exception
  188.             && !$response instanceof Exception
  189.         {
  190.             throw new Net_Growl_Exception('Parameter is not a valid response');
  191.         }
  192.         $this->responses[$response;
  193.     }
  194.  
  195.     /**
  196.      * Creates a new Net_Growl_Response object from a string
  197.      *
  198.      * @param string $str Expected Growl Response
  199.      *
  200.      * @return Net_Growl_Response 
  201.      */
  202.     protected function createResponseFromString($str)
  203.     {
  204.         $parts    preg_split('!(\r?\n){1}!m'$str2);
  205.         $response = new Net_Growl_Response($parts[0]);
  206.         if (isset($parts[1])) {
  207.             $response->appendBody($parts[1]);
  208.         }
  209.         return $response;
  210.     }
  211.  
  212.     /**
  213.      * Creates a new Net_Growl_Response object from a file
  214.      *
  215.      * @param resource $fp File pointer returned by fopen()
  216.      *
  217.      * @return Net_Growl_Response 
  218.      */
  219.     protected function createResponseFromFile($fp)
  220.     {
  221.         $response = new Net_Growl_Response(fgets($fp));
  222.         while (!feof($fp)) {
  223.             $response->appendBody(fread($fp8192));
  224.         }
  225.         return $response;
  226.     }
  227. }

Documentation generated on Tue, 29 Jan 2013 18:30:05 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.