Rudimentary unit test script.
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
require_once '../Mustache.php';
|
||||
require_once 'PHPUnit/Framework.php';
|
||||
|
||||
/**
|
||||
* A PHPUnit test case for Mustache.php.
|
||||
*
|
||||
* This is a very basic, very rudimentary unit test case. It's probably more important to have tests
|
||||
* than to have elegant tests, so let's bear with it for a bit.
|
||||
*
|
||||
* This class assumes an example directory exists at `../examples` with the following structure:
|
||||
*
|
||||
* @code
|
||||
* examples
|
||||
* foo
|
||||
* Foo.php
|
||||
* foo.mustache
|
||||
* foo.txt
|
||||
* bar
|
||||
* Bar.php
|
||||
* bar.mustache
|
||||
* bar.txt
|
||||
* @endcode
|
||||
*
|
||||
* To use this test:
|
||||
*
|
||||
* 1. {@link http://www.phpunit.de/manual/current/en/installation.html Install PHPUnit}
|
||||
* 2. run phpunit from the `test` directory:
|
||||
* `phpunit MustacheTest` or just `phpunit`
|
||||
* 3. Fix bugs. Lather, rinse, repeat.
|
||||
*
|
||||
* @extends PHPUnit_Framework_TestCase
|
||||
*/
|
||||
class MustacheTest extends PHPUnit_Framework_TestCase {
|
||||
|
||||
/**
|
||||
* Test everything in the `examples` directory.
|
||||
*
|
||||
* @dataProvider getExamples
|
||||
* @access public
|
||||
* @param mixed $class
|
||||
* @param mixed $template
|
||||
* @param mixed $output
|
||||
* @return void
|
||||
*/
|
||||
public function testExamples($class, $template, $output) {
|
||||
$m = new $class;
|
||||
$this->assertEquals($m->render($template), $output);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Data provider for testExamples method.
|
||||
*
|
||||
* Assumes that an `examples` directory exists inside parent directory.
|
||||
* This examples directory should contain any number of subdirectories, each of which contains
|
||||
* three files: one Mustache class (.php), one Mustache template (.mustache), and one output file
|
||||
* (.txt).
|
||||
*
|
||||
* This whole mess will be refined later to be more intuitive and less prescriptive, but it'll
|
||||
* do for now. Especially since it means we can have unit tests :)
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getExamples() {
|
||||
$basedir = dirname(__FILE__) . '/../examples/';
|
||||
|
||||
$ret = array();
|
||||
|
||||
$files = new RecursiveDirectoryIterator($basedir);
|
||||
while ($files->valid()) {
|
||||
|
||||
if ($files->hasChildren() && $children = $files->getChildren()) {
|
||||
$example = $files->getSubPathname();
|
||||
$class = null;
|
||||
$template = null;
|
||||
$output = null;
|
||||
|
||||
foreach ($children as $file) {
|
||||
if (!$file->isFile()) continue;
|
||||
|
||||
$filename = $file->getPathInfo();
|
||||
$info = pathinfo($filename);
|
||||
|
||||
switch($info['extension']) {
|
||||
case 'php':
|
||||
$class = $info['filename'];
|
||||
include_once($filename);
|
||||
break;
|
||||
|
||||
case 'mustache':
|
||||
$template = file_get_contents($filename);
|
||||
break;
|
||||
|
||||
case 'txt':
|
||||
$output = file_get_contents($filename);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$ret[$example] = array($class, $template, $output);
|
||||
}
|
||||
|
||||
$files->next();
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user