1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
<?php
namespace Roundcube\Tests;
/**
+-----------------------------------------------------------------------+
| This file is part of the Roundcube Webmail client |
| |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| A class for easier testing of code that uses rcmail_output classes |
+-----------------------------------------------------------------------+
| Author: Aleksander Machniak <alec@alec.pl> |
+-----------------------------------------------------------------------+
*/
/**
* A class for easier testing of code that uses rcmail_output classes
*/
class OutputHtmlMock extends \rcmail_output_html
{
const E_EXIT = 101;
const E_REDIRECT = 102;
public $output;
public $headers = [];
public $errorCode;
public $errorMessage;
public $template = '';
/**
* Redirect to a certain url
*
* @param mixed $p Either a string with the action or url parameters as key-value pairs
* @param int $delay Delay in seconds
* @param bool $secure Redirect to secure location (see rcmail::url())
*/
public function redirect($p = [], $delay = 1, $secure = false)
{
if (!empty($this->env['extwin'])) {
$p['extwin'] = 1;
}
$location = $this->app->url($p, false, false, $secure);
// header('Location: ' . $location);
throw new ExitException("Location: $location", self::E_REDIRECT);
}
/**
* Send the request output to the client.
* This will either parse a skin template.
*
* @param string $templ Template name
* @param bool $exit True if script should terminate (default)
*/
public function send($templ = null, $exit = true)
{
$this->template = $templ;
parent::send($templ, false);
if ($exit) {
throw new ExitException("Output sent", self::E_EXIT);
}
}
/**
* A helper to send output to the browser and exit
*
* @param string $body The output body
* @param array $headers Headers
*/
public function sendExit($body = '', $headers = [])
{
foreach ($headers as $header) {
$this->header($header);
}
$this->output = $body;
throw new ExitException("Output sent", self::E_EXIT);
}
/**
* A helper to send HTTP error code and message to the browser, and exit.
*
* @param int $code The HTTP error code
* @param string $message The HTTP error message
*/
public function sendExitError($code, $message = '')
{
$this->errorCode = $code;
$this->errorMessage = $message;
throw new ExitException("Output sent (error)", self::E_EXIT);
}
/**
* Process template and write to stdOut
*
* @param string $template HTML template content
*/
public function write($template = '')
{
ob_start();
parent::write($template);
$this->output = ob_get_contents();
ob_end_clean();
}
/**
* Parse a specific skin template and deliver to stdout (or return)
*
* @param string $name Template name
* @param bool $exit Exit script
* @param bool $write Don't write to stdout, return parsed content instead
*
* @link http://php.net/manual/en/function.exit.php
*/
function parse($name = 'main', $exit = true, $write = true)
{
//ob_start();
parent::parse($name, false, $write);
//$this->output = ob_get_contents();
//ob_end_clean();
if ($exit) {
throw new ExitException("Output sent", self::E_EXIT);
}
}
/**
* Delete all stored env variables and commands
*/
public function reset($all = false)
{
parent::reset($all);
$this->headers = [];
$this->output = null;
$this->template = null;
$this->errorCode = null;
$this->errorMessage = null;
}
/**
* A wrapper for header() function, so it can be replaced for automated tests
*
* @param string $header The header string
* @param bool $replace Replace previously set header?
*/
public function header($header, $replace = true)
{
$this->headers[] = $header;
}
/**
* Return the output
*/
public function getOutput()
{
return $this->output;
}
/**
* Return private/protected property
*/
public function getProperty($name)
{
return $this->{$name};
}
}
|