You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.2 KiB
187 lines
5.2 KiB
<?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
|
|
{
|
|
public const E_EXIT = 101;
|
|
public 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())
|
|
*/
|
|
#[\Override]
|
|
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)
|
|
*/
|
|
#[\Override]
|
|
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
|
|
*/
|
|
#[\Override]
|
|
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
|
|
*/
|
|
#[\Override]
|
|
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
|
|
*/
|
|
#[\Override]
|
|
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
|
|
*
|
|
* @see http://php.net/manual/en/function.exit.php
|
|
*/
|
|
#[\Override]
|
|
public 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
|
|
*/
|
|
#[\Override]
|
|
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?
|
|
*/
|
|
#[\Override]
|
|
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};
|
|
}
|
|
}
|