Преглед изворни кода

Clean up pragma exception fix, add test coverage.

Justin Hileman пре 14 година
родитељ
комит
36ac3710f1
2 измењених фајлова са 29 додато и 5 уклоњено
  1. 5 5
      Mustache.php
  2. 24 0
      test/MustachePragmaTest.php

+ 5 - 5
Mustache.php

@@ -403,10 +403,11 @@ class Mustache {
 		$options_string = $matches['options_string'];
 
 		if (!in_array($pragma_name, $this->_pragmasImplemented)) {
-			if($this->_throwsException(MustacheException::UNKNOWN_PRAGMA))
+			if ($this->_throwsException(MustacheException::UNKNOWN_PRAGMA)) {
 				throw new MustacheException('Unknown pragma: ' . $pragma_name, MustacheException::UNKNOWN_PRAGMA);
-			else
+			} else {
 				return '';
+			}
 		}
 
 		$options = array();
@@ -451,10 +452,9 @@ class Mustache {
 	 */
 	protected function _getPragmaOptions($pragma_name) {
 		if (!$this->_hasPragma($pragma_name)) {
-			if($this->_throwsException(MustacheException::UNKNOWN_PRAGMA))
+			if ($this->_throwsException(MustacheException::UNKNOWN_PRAGMA)) {
 				throw new MustacheException('Unknown pragma: ' . $pragma_name, MustacheException::UNKNOWN_PRAGMA);
-			else
-				return array();
+			}
 		}
 
 		return (is_array($this->_localPragmas[$pragma_name])) ? $this->_localPragmas[$pragma_name] : array();

+ 24 - 0
test/MustachePragmaTest.php

@@ -20,6 +20,20 @@ class MustachePragmaTest extends PHPUnit_Framework_TestCase {
 		$this->fail('Mustache should have thrown an unknown pragma exception');
 	}
 
+	public function testSuppressUnknownPragmaException() {
+		$m = new LessWhinyMustache();
+
+		try {
+			$this->assertEquals('', $m->render('{{%I-HAVE-THE-GREATEST-MUSTACHE}}'));
+		} catch (MustacheException $e) {
+			if ($e->getCode() == MustacheException::UNKNOWN_PRAGMA) {
+				$this->fail('Mustache should have thrown an unknown pragma exception');
+			} else {
+				throw $e;
+			}
+		}
+	}
+
 	public function testPragmaReplace() {
 		$m = new Mustache();
 		$this->assertEquals('', $m->render('{{%UNESCAPED}}'), 'Pragma tag not removed');
@@ -47,4 +61,14 @@ class MustachePragmaTest extends PHPUnit_Framework_TestCase {
 		$this->assertEquals('>>>', $m->render('{{%UNESCAPED}}{{symbol}}'));
 		$this->assertEquals('>>>', $m->render('{{{symbol}}}'));
 	}
+}
+
+class LessWhinyMustache extends Mustache {
+	protected $_throwsExceptions = array(
+		MustacheException::UNKNOWN_VARIABLE         => false,
+		MustacheException::UNCLOSED_SECTION         => true,
+		MustacheException::UNEXPECTED_CLOSE_SECTION => true,
+		MustacheException::UNKNOWN_PARTIAL          => false,
+		MustacheException::UNKNOWN_PRAGMA           => false,
+	);
 }