Clean up $options code.

* Add a nice descriptive comment to the constructor.
* Add test coverage for `_setOptions`.
* Fix a couple of bugs exposed by said tests.
This commit is contained in:
Justin Hileman
2011-03-01 13:36:05 -05:00
parent 9a866e9721
commit ebfe6495bb
2 changed files with 83 additions and 5 deletions
+23 -5
View File
@@ -112,6 +112,23 @@ class Mustache {
* This method accepts a $template string and a $view object. Optionally, pass an associative * This method accepts a $template string and a $view object. Optionally, pass an associative
* array of partials as well. * array of partials as well.
* *
* Passing an $options array allows overriding certain Mustache options during instantiation:
*
* $options = array(
* // `charset` -- must be supported by `htmlspecialentities()`. defaults to 'UTF-8'
* 'charset' => 'ISO-8859-1',
*
* // opening and closing delimiters, as an array or a space-separated string
* 'delimiters' => '<% %>',
*
* // an array of pragmas to enable
* 'pragmas' => array(
* Mustache::PRAGMA_UNESCAPED,
* Mustache::PRAGMA_DOT_NOTATION,
* Mustache::PRAGMA_IMPLICIT_ITERATOR
* ),
* );
*
* @access public * @access public
* @param string $template (default: null) * @param string $template (default: null)
* @param mixed $view (default: null) * @param mixed $view (default: null)
@@ -127,7 +144,7 @@ class Mustache {
} }
/** /**
* _setOptions function. * Helper function for setting options from constructor args.
* *
* @access protected * @access protected
* @param array $options * @param array $options
@@ -143,19 +160,20 @@ class Mustache {
if (!is_array($delims)) { if (!is_array($delims)) {
$delims = array_map('trim', explode(' ', $delims, 2)); $delims = array_map('trim', explode(' ', $delims, 2));
} }
$this->_otag = preg_quote($delims[0]); $this->_otag = $delims[0];
$this->_ctag = preg_quote($delims[1]); $this->_ctag = $delims[1];
} }
if (isset($options['pragmas'])) { if (isset($options['pragmas'])) {
foreach ($pragmas as $pragma_name) { foreach ($options['pragmas'] as $pragma_name) {
if (!in_array($pragma_name, $this->_pragmasImplemented)) { if (!in_array($pragma_name, $this->_pragmasImplemented)) {
throw new MustacheException('Unknown pragma: ' . $pragma_name, MustacheException::UNKNOWN_PRAGMA); throw new MustacheException('Unknown pragma: ' . $pragma_name, MustacheException::UNKNOWN_PRAGMA);
} }
} }
$this->_pragmas = $pragmas; $this->_pragmas = $options['pragmas'];
} }
} }
/** /**
* Mustache class clone method. * Mustache class clone method.
* *
+60
View File
@@ -72,6 +72,54 @@ class MustacheTest extends PHPUnit_Framework_TestCase {
$this->assertEquals($output, $m4->render($template)); $this->assertEquals($output, $m4->render($template));
} }
/**
* @dataProvider constructorOptions
*/
public function testConstructorOptions($options, $charset, $delimiters, $pragmas) {
$mustache = new MustacheExposedOptionsStub(null, null, null, $options);
$this->assertEquals($charset, $mustache->getCharset());
$this->assertEquals($delimiters, $mustache->getDelimiters());
$this->assertEquals($pragmas, $mustache->getPragmas());
}
public function constructorOptions() {
return array(
array(
array(),
'UTF-8',
array('{{', '}}'),
array(),
),
array(
array(
'charset' => 'UTF-8',
'delimiters' => '<< >>',
'pragmas' => array(Mustache::PRAGMA_UNESCAPED)
),
'UTF-8',
array('<<', '>>'),
array(Mustache::PRAGMA_UNESCAPED),
),
array(
array(
'charset' => 'cp866',
'delimiters' => array('[[[[', ']]]]'),
'pragmas' => array(Mustache::PRAGMA_DOT_NOTATION, Mustache::PRAGMA_IMPLICIT_ITERATOR)
),
'cp866',
array('[[[[', ']]]]'),
array(Mustache::PRAGMA_DOT_NOTATION, Mustache::PRAGMA_IMPLICIT_ITERATOR),
),
);
}
/**
* @expectedException MustacheException
*/
public function testConstructorInvalidPragmaOptionsThrowExceptions() {
$mustache = new Mustache(null, null, null, array('pragmas' => array('banana phone')));
}
/** /**
* Test __toString() function. * Test __toString() function.
* *
@@ -367,3 +415,15 @@ class MustacheTest extends PHPUnit_Framework_TestCase {
$this->assertEquals('{{win}}', $m->render()); $this->assertEquals('{{win}}', $m->render());
} }
} }
class MustacheExposedOptionsStub extends Mustache {
public function getPragmas() {
return $this->_pragmas;
}
public function getCharset() {
return $this->_charset;
}
public function getDelimiters() {
return array($this->_otag, $this->_ctag);
}
}