]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - vendor/zordius/lightncandy/tests/contextTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / zordius / lightncandy / tests / contextTest.php
diff --git a/vendor/zordius/lightncandy/tests/contextTest.php b/vendor/zordius/lightncandy/tests/contextTest.php
new file mode 100644 (file)
index 0000000..79d09cb
--- /dev/null
@@ -0,0 +1,301 @@
+<?php
+
+require_once('src/lightncandy.php');
+require_once('tests/helpers_for_test.php');
+
+class contextTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider compileProvider
+     */
+    public function testUsedFeature($test)
+    {
+        LightnCandy::compile($test['template'], $test['options']);
+        $context = LightnCandy::getContext();
+        $this->assertEquals($test['expected'], $context['usedFeature']);
+    }
+
+    public function compileProvider()
+    {
+        $default = Array(
+            'rootthis' => 0,
+            'enc' => 0,
+            'raw' => 0,
+            'sec' => 0,
+            'isec' => 0,
+            'if' => 0,
+            'else' => 0,
+            'unless' => 0,
+            'each' => 0,
+            'this' => 0,
+            'parent' => 0,
+            'with' => 0,
+            'comment' => 0,
+            'partial' => 0,
+            'dynpartial' => 0,
+            'helper' => 0,
+            'bhelper' => 0,
+            'hbhelper' => 0,
+            'delimiter' => 0,
+            'subexp' => 0,
+            'rawblock' => 0,
+        );
+
+        $compileCases = Array(
+             Array(
+                 'template' => 'abc',
+             ),
+
+             Array(
+                 'template' => 'abc{{def',
+             ),
+
+             Array(
+                 'template' => 'abc{{def}}',
+                 'expected' => Array(
+                     'enc' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => 'abc{{{def}}}',
+                 'expected' => Array(
+                     'raw' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => 'abc{{&def}}',
+                 'expected' => Array(
+                     'raw' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => 'abc{{this}}',
+                 'expected' => Array(
+                     'enc' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => 'abc{{this}}',
+                 'options' => Array('flags' => LightnCandy::FLAG_THIS),
+                 'expected' => Array(
+                     'enc' => 1,
+                     'this' => 1,
+                     'rootthis' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{#if abc}}OK!{{/if}}',
+                 'expected' => Array(
+                     'if' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{#unless abc}}OK!{{/unless}}',
+                 'expected' => Array(
+                     'unless' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{#with abc}}OK!{{/with}}',
+                 'expected' => Array(
+                     'with' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{#abc}}OK!{{/abc}}',
+                 'expected' => Array(
+                     'sec' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{^abc}}OK!{{/abc}}',
+                 'expected' => Array(
+                     'isec' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{#each abc}}OK!{{/each}}',
+                 'expected' => Array(
+                     'each' => 1
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{! test}}OK!{{! done}}',
+                 'expected' => Array(
+                     'comment' => 2
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{../OK}}',
+                 'expected' => Array(
+                     'parent' => 1,
+                     'enc' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{&../../OK}}',
+                 'expected' => Array(
+                     'parent' => 1,
+                     'raw' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{&../../../OK}} {{../OK}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'mytest' => function ($context) {
+                            return $context;
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'parent' => 2,
+                     'enc' => 1,
+                     'raw' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{mytest ../../../OK}} {{../OK}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'mytest' => function ($context) {
+                            return $context;
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'parent' => 2,
+                     'enc' => 2,
+                     'hbhelper' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{mytest . .}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'mytest' => function ($a, $b) {
+                            return '';
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'rootthis' => 2,
+                     'this' => 2,
+                     'enc' => 1,
+                     'hbhelper' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{mytest (mytest ..)}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'mytest' => function ($context) {
+                            return $context;
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'parent' => 1,
+                     'enc' => 1,
+                     'hbhelper' => 2,
+                     'subexp' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{mytest (mytest ..) .}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'mytest' => function ($context) {
+                            return $context;
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'parent' => 1,
+                     'rootthis' => 1,
+                     'this' => 1,
+                     'enc' => 1,
+                     'hbhelper' => 2,
+                     'subexp' => 1,
+                 ),
+             ),
+
+             Array(
+                 'template' => '{{mytest (mytest (mytest ..)) .}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'mytest' => function ($context) {
+                            return $context;
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'parent' => 1,
+                     'rootthis' => 1,
+                     'this' => 1,
+                     'enc' => 1,
+                     'hbhelper' => 3,
+                     'subexp' => 2,
+                 ),
+             ),
+
+             Array(
+                 'id' => '134',
+                 'template' => '{{#if 1}}{{keys (keys ../names)}}{{/if}}',
+                 'options' => Array(
+                    'flags' => LightnCandy::FLAG_HANDLEBARSJS,
+                    'hbhelpers' => Array(
+                        'keys' => function ($context) {
+                            return $context;
+                        }
+                    )
+                ),
+                 'expected' => Array(
+                     'parent' => 1,
+                     'enc' => 1,
+                     'if' => 1,
+                     'hbhelper' => 2,
+                     'subexp' => 1,
+                 ),
+             ),
+        );
+
+        return array_map(function($i) use ($default) {
+            if (!isset($i['options'])) {
+                $i['options'] = Array('flags' => 0);
+            }
+            if (!isset($i['options']['flags'])) {
+                $i['options']['flags'] = 0;
+            }
+            $i['expected'] = array_merge($default, isset($i['expected']) ? $i['expected'] : array());
+            return Array($i);
+        }, $compileCases);
+    }
+}
+
+
+?>