Permalink
Browse files

Segregate 5.3+ tests, exclude them from phpunit config.

  • Loading branch information...
1 parent 9316775 commit d1912038f3a3b6bfadefbabafc19ae823cb639c4 @bobthecow committed May 1, 2012
View
@@ -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>
@@ -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);
+ };
+ }
+}
@@ -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);
+ }
+}
@@ -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}}');
@@ -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}}');
@@ -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);
@@ -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 . ' }}';
+ }
}
@@ -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
@@ -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(
@@ -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;
@@ -49,7 +53,7 @@ public function testAccessorsAndMutators() {
}
public function testMagicMethods() {
- $foo = function() { echo 'foo'; };
+ $foo = array($this, 'getFoo');
$bar = 'BAR';
$helpers = new Mustache_HelperCollection;
Oops, something went wrong.

0 comments on commit d191203

Please sign in to comment.