Май 19

Ниже приведён код теста
Continue reading »

Теги:
Окт 06

Навеяно http://habrahabr.ru/blogs/webdev/70903/ – много чего идеологически взято оттуда.
Но код там написан неудобно для меня, поэтому написал свой класс (3 класса) для фильтрации пользовательского контента.

Делает следующее: вырезает все неразрешённые теги, в разрешённых при этом удаляет все неразрешённые атрибуты.
После этого для всех ссылок на сторонние сайты проставляет атрибут target=»_blank». После этого проверяет все атрибуты всех тегов, где может встречаться ссылка (img src, к примеру) и если протокола нет среди разрешённых (используется parse_url), добавляется http://.
Работает небыстро.
Использовать при публиковании.
TagsStripper – здесь все классы
index – пример использования
TestTagsStripper – тесты

Теги:
Сен 30

Иногда бывает так, что у PHP по каким-то причинам нет доступа к интернету (NTLM-авторизация, блин(().
Тогда придётся ставить всё вручную.
В принципе, процесс установки описан на официальном сайте, но неправильно.
Действовать можно так:
1.Скачать последнюю стабильную версию PHPUnit (при написании заметки была скачана версия PHPUnit-3.4.0).
2. Разархивировать и скопировать содержимое папки PHPUnit-3.4.0 в папку путь-к-php\PEAR.
3. Изменить файл путь-к-php\PEAR\phpuint.bat:

Было

set PHPBIN="@php_bin@"
%PHPBIN% "@bin_dir@\phpunit" %*

Стало

set PHPBIN="путь-к-php\php"
%PHPBIN% ""путь-к-php\PEAR\phpunit.php" %*

Собственно, всё.

Теги:
Сен 18

Сначала устанавливаем PEAR.
Далее нужно зарегистрировать канал PHPUnit

путь-к-php\pear channel-discover pear.phpunit.de

Теперь можно установить PHPUnit

путь-к-php\pear install phpunit/PHPUnit

При этом может поругаться на версию PEAR. Надо обновить – см. заметку по установке PEAR.
Если не получилось установить с помощью PEAR.
После этого нужно писать тесты.
Подойдёт что-то вроде

ModelAdv.php

<?
//инициализация - можно вынести в отдельный файл
$_SERVER['HTTP_HOST'] = 'my_project';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
//возникают ошибки, т.к. не все серверные переменные установлены
ini_set('display_errors','off');
error_reporting(E_ERROR);
require_once ('S:/wamp/www/moikompas/htdocs/init.php');
ini_set('display_errors','on');
error_reporting(E_ALL);

ini_set('include_path', ini_get('include_path') . ';путь-к-проекту;путь-к-PEAR;.');

require_once 'PHPUnit/Framework.php';

echo "--started--\n";

//--инициализация
/*
//это для тестирования контроллера - для задания всех его свойств
cfg::init('/groups/test/');

//здесь идёт передача управления контроллеру.
//вывод нам не нужен
ob_start();
require_once ('htdocs/index.php');
ob_clean();*/

//загружаем тестируемый класс (если нет автозагрузки)
load::c('adv');

//собственно сами тесты
class AdvTest extends PHPUnit_Framework_TestCase
{
	public function test_renderOpenxBannerOnPage()
	{
		$params =
			array
			(
				array
				(//всё правильно
					'in' 	=> array ('category' => 'biznes', 'place' => 'modules_top'),
					'out' 	=> array ('zoneid' => 74, 'n' => 'a1ebea39')
				),
				array
				(//всё правильно - вернуть умолчание
					'in' 	=> array ('category' => 'biznes', 'place' => 'modules_middle'),
					'out' 	=> array ('zoneid' => 2, 'n' => 'a159618f')
				),
				array
				(//неверная категория - вернуть умолчание
					'in' 	=> array ('category' => 'biznes1', 'place' => 'modules_top'),
					'out' 	=> array ('zoneid' => 73, 'n' => 'ae343b6d')
				),
				array
				(//неверное место показа - вернуть ''
					'in' 	=> array ('category' => 'biznes', 'place' => 'modules_to'),
					'out' 	=> ''
				),
				array
				(//неверная категория и место показа - вернуть ''
					'in' 	=> array ('category' => 'biznes12', 'place' => 'modules_to'),
					'out' 	=> ''
				),
			);
		foreach ($params as $par)
		{
			$out = adv::renderOpenxBannerOnPage($par['in']['category'], $par['in']['place'], true);
			$this->assertEquals($out, $par['out']);
		}
	}
	public function test_renderOpenxBannerByParams()
	{
		$params =
			array
			(
				array
				(//всё правильно
					'in' 	=> array ('bannerpage' => 'compas', 'place' => 'top', 'category' => 'biznes'),
					'out' 	=> array ('zoneid' => 45, 'n' => 'ae7d79d4')
				),
				array
				(//всё правильно
					'in' 	=> array ('bannerpage' => 'compas', 'place' => 'right', 'category' => 'razvlecheniya'),
					'out' 	=> array ('zoneid' => 29, 'n' => 'a14675ed')
				),
				array
				(//всё правильно
					'in' 	=> array ('bannerpage' => 'index', 'place' => 'right', 'category' => null),
					'out' 	=> array ('zoneid' => 7, 'n' => 'a2a070c5')
				),
				array
				(//всё правильно - вернуть умолчание
					'in' 	=> array ('bannerpage' => 'index', 'place' => 'top', 'category' => 'biznes'),
					'out' 	=> array ('zoneid' => 5, 'n' => 'abff2e70')
				),
				array
				(//страница компаса, неверная категория - вернуть умолчание
					'in' 	=> array ('bannerpage' => 'compas', 'place' => 'top', 'category' => ''),
					'out' 	=> array ('zoneid' => 44, 'n' => 'abf29464')
				),
				array
				(//неверное место показа - вернуть ''
					'in' 	=> array ('bannerpage' => 'index', 'place' => '', 'category' => 'biznes'),
					'out' 	=> ''
				),
			);
		foreach ($params as $par)
		{
			$out = adv::renderOpenxBannerByParams($par['in']['bannerpage'], $par['in']['place'], $par['in']['category'], true);
			//var_dump($out);
			$this->assertEquals($par['out'], $out);
		}
	}
}
?>

Запускать из папки с исполняемыми файлами php (где php.exe):

phpunit.bat путь-к-папке-tests\ModelAdv.php

А дальше – поехало: tdd, xp.

Ссылки по теме:
документация по установке,
документация по написанию тестов,
phpUnderControl (зачем?)

Теги:
Июл 28

Установка PHPUnit производится через PEAR (Описание на англ.).
Главное дальше – это научить систему работать не только (а лучше – совсем не) с серверными переменными вроде $_SERVER['REQUEST_URI'], а с переданными урлами (чтобы эмулировать обращение к конкретной странице).
В рассматриваемом конкретном случае предполагается в начале каждого теста подгружать файл TestInit.php.
Листинг1. TestInit.php

<?
$_SERVER['HTTP_HOST'] = 'хост';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
//возникают ошибки, т.к. не все серверные переменные установлены
ini_set('display_errors','off');
error_reporting(E_ERROR);
require_once ('абсолютный-путь-к-рут-сайта/htdocs/init.php');
ini_set('display_errors','on');
error_reporting(E_ALL);

ini_set('include_path', ini_get('include_path')
    . ';абсолютный-путь-к-рут-сайта;абсолютный-путь-к-PEAR;.');

require_once 'PHPUnit/Framework.php';

echo "--started--\n";
?>

Проблема – отключить вывод из шаблонов (система была сделана слишком прямолинейной – нет единого центра управления выводом).
Запуск получается следующий:

C:\wamp\php5\PEAR>pear-phpunit.bat C:\wamp\www\moikompas\tests\ModelGroup.php

ССылки
Написание тестов – страницы PHPUnit Manual

Автоматизированное тестирование ZendFramework-приложений (manual)

Теги:
preload preload preload