added the constant() test (closes #120)
authorMark Story <mark@mark-story.com>
Sat, 11 Sep 2010 20:41:50 +0000 (16:41 -0400)
committerFabien Potencier <fabien.potencier@gmail.com>
Sun, 12 Sep 2010 05:50:05 +0000 (07:50 +0200)
CHANGELOG
doc/02-Twig-for-Template-Designers.markdown
lib/Twig/Extension/Core.php
test/Twig/Tests/Fixtures/tests/const.test [new file with mode: 0644]
test/Twig/Tests/integrationTest.php

index ae1e046..5f57cd7 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -5,6 +5,7 @@ Backward incompatibilities:
  * the odd and even filters are now tests:
      {{ foo|odd }} must now be written {{ foo is odd }}
 
+ * added a "constant" test
  * fixed objects with __toString() not being autoescaped
  * fixed subscript expressions when calling __call() (methods now keep the case)
  * added a "trans" filter
index 1dd9d25..6f8c972 100644 (file)
@@ -1239,6 +1239,16 @@ variable:
         the foo attribute really is the `false` PHP value
     {% endif %}
 
+### `constant`
+
+`constant` checks if a variable has the exact same value as a constant. You
+can use either global constants or class constants:
+
+    [twig]
+    {% if post.status is constant('Post::PUBLISHED') %}
+        the status attribute is exactly the same as Post::PUBLISHED
+    {% endif %}
+
 Extensions
 ----------
 
index 6934fb3..725816f 100644 (file)
@@ -95,6 +95,7 @@ class Twig_Extension_Core extends Twig_Extension
             'sameas'      => new Twig_Test_Function('twig_test_sameas'),
             'none'        => new Twig_Test_Function('twig_test_none'),
             'divisibleby' => new Twig_Test_Function('twig_test_divisibleby'),
+            'constant'    => new Twig_Test_Function('twig_test_constant'),
         );
     }
 
@@ -332,3 +333,8 @@ function twig_test_odd($value)
 {
     return $value % 2 == 1;
 }
+
+function twig_test_constant($value, $constant)
+{
+    return constant($constant) === $value;
+}
diff --git a/test/Twig/Tests/Fixtures/tests/const.test b/test/Twig/Tests/Fixtures/tests/const.test
new file mode 100644 (file)
index 0000000..83d33f4
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+"const" test
+--TEMPLATE--
+{{ 30719 is constant('E_ALL') ? 'ok' : 'no' }}
+{{ 'bar' is constant('Foo::BAR_NAME') ? 'ok' : 'no' }}
+{{ value is constant('Foo::BAR_NAME') ? 'ok' : 'no' }}
+--DATA--
+return array('value' => 'bar');
+--EXPECT--
+ok
+ok
+ok
\ No newline at end of file
index 9958d51..14ac53a 100644 (file)
@@ -81,6 +81,8 @@ class Twig_Tests_IntegrationTest extends PHPUnit_Framework_TestCase
 
 class Foo
 {
+    const BAR_NAME = 'bar';
+
     public function bar($param1 = null, $param2 = null)
     {
         return 'bar'.($param1 ? '_'.$param1 : '').($param2 ? '-'.$param2 : '');