* @author Kornel LesiĆski
* @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License
* @version SVN: $Id: PhptalTest.php 915 2010-06-20 21:05:04Z kornel $
* @link http://phptal.org/
*/
class PhptalTest extends PHPTAL_TestCase
{
function test01()
{
$tpl = $this->newPHPTAL('input/phptal.01.html');
$tpl->setOutputMode(PHPTAL::XML);
$res = $tpl->execute();
$this->assertEquals('', $res);
}
function testXmlHeader()
{
$tpl = $this->newPHPTAL('input/phptal.02.html');
$res = normalize_html($tpl->execute());
$exp = normalize_html_file('output/phptal.02.html');
$this->assertEquals($exp, $res);
}
function testExceptionNoEcho()
{
$tpl = $this->newPHPTAL('input/phptal.03.html');
ob_start();
try {
$res = $tpl->execute();
}
catch (Exception $e)
{
}
$c = ob_get_contents();
ob_end_clean();
$this->assertEquals('', $c);
}
function testRepositorySingle()
{
$tpl = $this->newPHPTAL('phptal.01.html');
$tpl->setTemplateRepository('input');
$tpl->setOutputMode(PHPTAL::XML);
$res = $tpl->execute();
$this->assertEquals('', $res);
}
function testRepositorySingleWithSlash()
{
$tpl = $this->newPHPTAL('phptal.01.html');
$tpl->setTemplateRepository('input/');
$tpl->setOutputMode(PHPTAL::XML);
$res = $tpl->execute();
$this->assertEquals('', $res);
}
function testRepositoryMuliple()
{
$tpl = $this->newPHPTAL('phptal.01.html');
$tpl->setTemplateRepository(array('bar', 'input/'));
$tpl->setOutputMode(PHPTAL::XML);
$res = $tpl->execute();
$this->assertEquals('', $res);
}
function testSetTemplate()
{
$tpl = $this->newPHPTAL();
$tpl->setTemplateRepository(array('bar', 'input/'));
$tpl->setOutputMode(PHPTAL::XML);
$tpl->setTemplate('phptal.01.html');
$res = $tpl->execute();
$this->assertEquals('', $res);
}
function testXmlMode()
{
$tpl = $this->newPHPTAL('input/xml.04.xml');
$tpl->setOutputMode(PHPTAL::XML);
$res = $tpl->execute();
$exp = file_get_contents('input/xml.04.xml');
$this->assertXMLEquals($exp, $res);
}
function testSource()
{
$source = '';
$tpl = $this->newPHPTAL();
$tpl->foo = 'foo value';
$tpl->setSource($source);
$res = $tpl->execute();
$this->assertEquals('foo value', $res);
$this->assertRegExp('/^tpl_\d{8}_/', $tpl->getFunctionName());
$this->assertContains('string', $tpl->getFunctionName());
$this->assertNotContains(PHPTAL_VERSION, $tpl->getFunctionName());
}
/**
* @todo: write it :)
*/
function testFunctionNameChangesWhenSettingsChange()
{
$this->markTestIncomplete();
}
function testSourceWithPath()
{
$source = '';
$tpl = $this->newPHPTAL();
$tpl->foo = 'foo value';
$tpl->setSource($source, $fakename = 'abc12345');
$res = $tpl->execute();
$this->assertEquals('foo value', $res);
$this->assertRegExp('/^tpl_\d{8}_/', $tpl->getFunctionName());
$this->assertContains($fakename, $tpl->getFunctionName());
$this->assertNotContains(PHPTAL_VERSION, $tpl->getFunctionName());
}
function testStripComments()
{
$tpl = $this->newPHPTAL('input/phptal.04.html');
$exp = normalize_html_file('output/phptal.04.html');
$tpl->stripComments(true);
$res = $tpl->execute();
$res = normalize_html($res);
$this->assertEquals($exp, $res);
}
function testStripCommentsReset()
{
$tpl = $this->newPHPTAL('input/phptal.04.html');
$exp = normalize_html_file('output/phptal.04.html');
$tpl->stripComments(false);
$tpl->stripComments(true);
$res = $tpl->execute();
$res = normalize_html($res);
$this->assertEquals($exp, $res);
}
function testStripCommentsUnset()
{
$tpl = $this->newPHPTAL('input/phptal.04.html');
$exp = normalize_html_file('input/phptal.04.html');
$tpl->stripComments(true);
$tpl->stripComments(false);
$res = $tpl->execute();
$res = normalize_html($res);
$this->assertEquals($exp, $res);
}
function testUnknownOutputMode()
{
try {
$tpl = $this->newPHPTAL();
$tpl->setOutputMode('unknown');
$this->assertTrue(false);
}
catch (PHPTAL_Exception $e)
{
$this->assertTrue(true);
}
}
function testZeroedContent()
{
$tpl = $this->newPHPTAL('input/phptal.05.html');
$res = $tpl->execute();
$exp = normalize_html_file('input/phptal.05.html');
$this->assertEquals($exp, $res);
}
function testOnlineExpression()
{
$tpl = $this->newPHPTAL('input/phptal.06.html');
$tpl->foo = 'hello
';
$res = $tpl->execute();
$exp = normalize_html_file('output/phptal.06.html');
$this->assertEquals($exp, $res);
}
function testDirAsTemplate()
{
try {
$tpl = $this->newPHPTAL(dirname(__FILE__));
$tpl->execute();
$this->fail("Executed directory as if it was a template file");
}
catch(PHPTAL_IOException $e) {
// ok
}
catch(PHPTAL_Exception $e) {
$this->fail("Thrown exception ".get_class($e)." (".$e->getMessage().") rather than PHPTAL_IOException");
}
}
function testEncodingUppercase()
{
$tpl = $this->newPHPTAL();
$tpl->setEncoding('utf-8');
$this->assertEquals('UTF-8', $tpl->getEncoding());
}
/**
* @expectedException PHPTAL_TemplateException
*/
function testPHPParseErrorDoesNotStopPHPTAL2()
{
$tpl = $this->newPHPTAL()->setSource('');
ob_start();
echo "\n".__CLASS__."::testPHPParseErrorDoesNotStopPHPTAL2 failed\n";
try {
@$tpl->execute(); // if test dies for no apparent reason, the reason is '@'
}
catch(Exception $e) {
ob_end_clean();
throw $e;
}
ob_end_clean();
}
/**
* @expectedException PHPTAL_ConfigurationException
*/
function testThrowsIfNoTemplate()
{
$this->newPHPTAL()->execute();
}
function testCreateMethod()
{
$obj = PHPTAL::create();
$this->assertType('PHPTAL', $obj);
try {
$obj->execute();
$this->fail("Should not execute without template");
}
catch(PHPTAL_ConfigurationException $e) {
$this->assertContains('No template', $e->getMessage());
}
}
function testCreateWithFileMethod()
{
$obj = PHPTAL::create('input/phptal.01.html');
$this->assertType('PHPTAL', $obj);
$obj->getCodePath();
}
}