Skip to content

Commit

Permalink
Segregate 5.3+ tests, exclude them from phpunit config.
Browse files Browse the repository at this point in the history
  • Loading branch information
bobthecow committed May 1, 2012
1 parent 9316775 commit d191203
Show file tree
Hide file tree
Showing 8 changed files with 215 additions and 96 deletions.
3 changes: 2 additions & 1 deletion phpunit.xml.dist
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false" colors="true" bootstrap="./test/bootstrap.php">
<testsuite name="Mustache">
<directory>./test</directory>
<directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">./test/Mustache/Test/FiveThree</directory>
<directory suffix="Test.php">./test</directory>
</testsuite>

<filter>
Expand Down
@@ -0,0 +1,71 @@
<?php

/*
* This file is part of Mustache.php.
*
* (c) 2012 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

/**
* @group lambdas
* @group functional
*/
class Mustache_Test_FiveThree_Functional_HigherOrderSectionsTest extends PHPUnit_Framework_TestCase {

private $mustache;

public function setUp() {
$this->mustache = new Mustache_Mustache;
}

public function testAnonymousFunctionSectionCallback() {
$tpl = $this->mustache->loadTemplate('{{#wrapper}}{{name}}{{/wrapper}}');

$foo = new Mustache_Test_FiveThree_Functional_Foo;
$foo->name = 'Mario';
$foo->wrapper = function($text) {
return sprintf('<div class="anonymous">%s</div>', $text);
};

$this->assertEquals(sprintf('<div class="anonymous">%s</div>', $foo->name), $tpl->render($foo));
}

public function testSectionCallback() {
$one = $this->mustache->loadTemplate('{{name}}');
$two = $this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

$foo = new Mustache_Test_FiveThree_Functional_Foo;
$foo->name = 'Luigi';

$this->assertEquals($foo->name, $one->render($foo));
$this->assertEquals(sprintf('<em>%s</em>', $foo->name), $two->render($foo));
}

public function testViewArrayAnonymousSectionCallback() {
$tpl = $this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

$data = array(
'name' => 'Bob',
'wrap' => function($text) {
return sprintf('[[%s]]', $text);
}
);

$this->assertEquals(sprintf('[[%s]]', $data['name']), $tpl->render($data));
}
}

class Mustache_Test_FiveThree_Functional_Foo {
public $name = 'Justin';
public $lorem = 'Lorem ipsum dolor sit amet,';
public $wrap;

public function __construct() {
$this->wrap = function($text) {
return sprintf('<em>%s</em>', $text);
};
}
}
114 changes: 114 additions & 0 deletions test/Mustache/Test/FiveThree/Functional/MustacheSpecTest.php
@@ -0,0 +1,114 @@
<?php

/*
* This file is part of Mustache.php.
*
* (c) 2012 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

/**
* A PHPUnit test case wrapping the Mustache Spec
*
* @group mustache-spec
* @group functional
*/
class Mustache_Test_FiveThree_Functional_MustacheSpecTest extends PHPUnit_Framework_TestCase {

private static $mustache;

public static function setUpBeforeClass() {
self::$mustache = new Mustache_Mustache;
}

/**
* For some reason data providers can't mark tests skipped, so this test exists
* simply to provide a 'skipped' test if the `spec` submodule isn't initialized.
*/
public function testSpecInitialized() {
if (!file_exists(dirname(__FILE__).'/../../../../../vendor/spec/specs/')) {
$this->markTestSkipped('Mustache spec submodule not initialized: run "git submodule update --init"');
}
}

/**
* @group lambdas
* @dataProvider loadLambdasSpec
*/
public function testLambdasSpec($desc, $source, $partials, $data, $expected) {
$template = self::loadTemplate($source, $partials);
$this->assertEquals($expected, $template($this->prepareLambdasSpec($data)), $desc);
}

public function loadLambdasSpec() {
return $this->loadSpec('~lambdas');
}

/**
* Extract and lambdafy any 'lambda' values found in the $data array.
*/
private function prepareLambdasSpec($data) {
foreach ($data as $key => $val) {
if ($key === 'lambda') {
if (!isset($val['php'])) {
$this->markTestSkipped(sprintf('PHP lambda test not implemented for this test.'));
}

$func = $val['php'];
$data[$key] = function($text = null) use ($func) {
return eval($func);
};
} else if (is_array($val)) {
$data[$key] = $this->prepareLambdasSpec($val);
}
}

return $data;
}

/**
* Data provider for the mustache spec test.
*
* Loads YAML files from the spec and converts them to PHPisms.
*
* @access public
* @return array
*/
private function loadSpec($name) {
$filename = dirname(__FILE__) . '/../../../../../vendor/spec/specs/' . $name . '.yml';
if (!file_exists($filename)) {
return array();
}

$data = array();
$yaml = new sfYamlParser;
$file = file_get_contents($filename);

// @hack: pre-process the 'lambdas' spec so the Symfony YAML parser doesn't complain.
if ($name === '~lambdas') {
$file = str_replace(" !code\n", "\n", $file);
}

$spec = $yaml->parse($file);

foreach ($spec['tests'] as $test) {
$data[] = array(
$test['name'] . ': ' . $test['desc'],
$test['template'],
isset($test['partials']) ? $test['partials'] : array(),
$test['data'],
$test['expected'],
);
}

return $data;
}

private static function loadTemplate($source, $partials) {
self::$mustache->setPartials($partials);

return self::$mustache->loadTemplate($source);
}
}
48 changes: 0 additions & 48 deletions test/Mustache/Test/Functional/HigherOrderSectionsTest.php
Expand Up @@ -21,34 +21,6 @@ public function setUp() {
$this->mustache = new Mustache_Mustache;
}

public function testAnonymousFunctionSectionCallback() {
if (version_compare(PHP_VERSION, '5.3.0', '<')) {
$this->markTestSkipped('Unable to test anonymous function section callbacks in PHP < 5.3');
return;
}

$tpl = $this->mustache->loadTemplate('{{#wrapper}}{{name}}{{/wrapper}}');

$foo = new Mustache_Test_Functional_Foo;
$foo->name = 'Mario';
$foo->wrapper = function($text) {
return sprintf('<div class="anonymous">%s</div>', $text);
};

$this->assertEquals(sprintf('<div class="anonymous">%s</div>', $foo->name), $tpl->render($foo));
}

public function testSectionCallback() {
$one = $this->mustache->loadTemplate('{{name}}');
$two = $this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

$foo = new Mustache_Test_Functional_Foo;
$foo->name = 'Luigi';

$this->assertEquals($foo->name, $one->render($foo));
$this->assertEquals(sprintf('<em>%s</em>', $foo->name), $two->render($foo));
}

public function testRuntimeSectionCallback() {
$tpl = $this->mustache->loadTemplate('{{#doublewrap}}{{name}}{{/doublewrap}}');

Expand Down Expand Up @@ -80,19 +52,6 @@ public function testViewArraySectionCallback() {
$this->assertEquals($data['name'], $tpl->render($data));
}

public function testViewArrayAnonymousSectionCallback() {
$tpl = $this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

$data = array(
'name' => 'Bob',
'wrap' => function($text) {
return sprintf('[[%s]]', $text);
}
);

$this->assertEquals(sprintf('[[%s]]', $data['name']), $tpl->render($data));
}

public function testMonsters() {
$tpl = $this->mustache->loadTemplate('{{#title}}{{title}} {{/title}}{{name}}');

Expand All @@ -111,13 +70,6 @@ public function testMonsters() {
class Mustache_Test_Functional_Foo {
public $name = 'Justin';
public $lorem = 'Lorem ipsum dolor sit amet,';
public $wrap;

public function __construct() {
$this->wrap = function($text) {
return sprintf('<em>%s</em>', $text);
};
}

public function wrapWithEm($text) {
return sprintf('<em>%s</em>', $text);
Expand Down
16 changes: 10 additions & 6 deletions test/Mustache/Test/Functional/MustacheInjectionTest.php
Expand Up @@ -110,27 +110,31 @@ public function testLambdaInterpolationInjection() {
$tpl = $this->mustache->loadTemplate('{{ a }}');

$data = array(
'a' => function() {
return '{{ b }}';
},
'a' => array($this, 'lambdaInterpolationCallback'),
'b' => '{{ c }}',
'c' => 'FAIL'
);

$this->assertEquals('{{ c }}', $tpl->render($data));
}

public static function lambdaInterpolationCallback() {
return '{{ b }}';
}

public function testLambdaSectionInjection() {
$tpl = $this->mustache->loadTemplate('{{# a }}b{{/ a }}');

$data = array(
'a' => function ($text) {
return '{{ ' . $text . ' }}';
},
'a' => array($this, 'lambdaSectionCallback'),
'b' => '{{ c }}',
'c' => 'FAIL'
);

$this->assertEquals('{{ c }}', $tpl->render($data));
}

public static function lambdaSectionCallback($text) {
return '{{ ' . $text . ' }}';
}
}
35 changes: 0 additions & 35 deletions test/Mustache/Test/Functional/MustacheSpecTest.php
Expand Up @@ -86,41 +86,6 @@ public function loadInvertedSpec() {
return $this->loadSpec('inverted');
}

/**
* @group lambdas
* @dataProvider loadLambdasSpec
*/
public function testLambdasSpec($desc, $source, $partials, $data, $expected) {
$template = self::loadTemplate($source, $partials);
$this->assertEquals($expected, $template($this->prepareLambdasSpec($data)), $desc);
}

public function loadLambdasSpec() {
return $this->loadSpec('~lambdas');
}

/**
* Extract and lambdafy any 'lambda' values found in the $data array.
*/
private function prepareLambdasSpec($data) {
foreach ($data as $key => $val) {
if ($key === 'lambda') {
if (!isset($val['php'])) {
$this->markTestSkipped(sprintf('PHP lambda test not implemented for this test.'));
}

$func = $val['php'];
$data[$key] = function($text = null) use ($func) {
return eval($func);
};
} else if (is_array($val)) {
$data[$key] = $this->prepareLambdasSpec($val);
}
}

return $data;
}

/**
* @group partials
* @dataProvider loadPartialsSpec
Expand Down
10 changes: 7 additions & 3 deletions test/Mustache/Test/HelperCollectionTest.php
Expand Up @@ -11,7 +11,7 @@

class Mustache_Test_HelperCollectionTest extends PHPUnit_Framework_TestCase {
public function testConstructor() {
$foo = function() { echo 'foo'; };
$foo = array($this, 'getFoo');
$bar = 'BAR';

$helpers = new Mustache_HelperCollection(array(
Expand All @@ -23,8 +23,12 @@ public function testConstructor() {
$this->assertSame($bar, $helpers->get('bar'));
}

public static function getFoo() {
echo 'foo';
}

public function testAccessorsAndMutators() {
$foo = function() { echo 'foo'; };
$foo = array($this, 'getFoo');
$bar = 'BAR';

$helpers = new Mustache_HelperCollection;
Expand All @@ -49,7 +53,7 @@ public function testAccessorsAndMutators() {
}

public function testMagicMethods() {
$foo = function() { echo 'foo'; };
$foo = array($this, 'getFoo');
$bar = 'BAR';

$helpers = new Mustache_HelperCollection;
Expand Down

0 comments on commit d191203

Please sign in to comment.