Current File : /home/jvzmxxx/wiki1/extensions/Flow/tests/phpunit/TemplateHelperTest.php
<?php

namespace Flow\Tests;

use Lightncandy;
use Flow\TemplateHelper;

/**
 * @group Flow
 */
class TemplateHelperTest extends \MediaWikiTestCase {

	public function provideTraversalAttackFilenames() {
		return array_map( function( $x ) { return array( $x ); }, array(
			'.',
			'..',
			'./foo',
			'../foo',
			'foo/./bar',
			'foo/../bar',
			'foo/bar/.',
			'foo/bar/..',
		) );
	}

	/**
	 * @dataProvider provideTraversalAttackFilenames
	 * @expectedException \Flow\Exception\FlowException
	 */
	public function testGetTemplateFilenamesTraversalAttack( $templateName ) {
		$helper = new TemplateHelper( '/does/not/exist' );
		$helper->getTemplateFilenames( $templateName );
	}

	public function testIfCond() {
		$code = TemplateHelper::compile( "{{#ifCond foo \"or\" bar}}Works{{/ifCond}}", '' );
		$renderer = Lightncandy::prepare( $code );

		$this->assertEquals( 'Works', $renderer( array( 'foo' => true, 'bar' => false ) ) );
		$this->assertEquals( '', $renderer( array( 'foo' => false, 'bar' => false ) ) );
		/*
		FIXME: Why won't this work!?
		$code2 = TemplateHelper::compile( "{{#ifCond foo \"===\" bar}}Works{{/ifCond}}", '' );
		$renderer2 = Lightncandy::prepare( $code2 );
		$this->assertEquals( 'Works', $renderer2( array( 'foo' => 1, 'bar' => 1 ) ) );
		$this->assertEquals( '', $renderer2( array( 'foo' => 2, 'bar' => 3 ) ) );*/
	}
}