diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:30:02 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-05-01 15:30:02 -0400 |
commit | 1de335ad3f395ca6861085393ba366a9e3fb4a0d (patch) | |
tree | f1fdd326034e05177596851be6a7127615d81498 /vendor/zordius/lightncandy/tests/errorTest.php | |
parent | 9c75fa8ff6d4d38ef552c00fef5969fb154765e8 (diff) | |
parent | f6d65e533c62f6deb21342d4901ece24497b433e (diff) |
Merge commit 'f6d65'
# Conflicts:
# skins/ArchLinux/ArchLinux.php
Diffstat (limited to 'vendor/zordius/lightncandy/tests/errorTest.php')
-rw-r--r-- | vendor/zordius/lightncandy/tests/errorTest.php | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/vendor/zordius/lightncandy/tests/errorTest.php b/vendor/zordius/lightncandy/tests/errorTest.php new file mode 100644 index 00000000..30ecd97d --- /dev/null +++ b/vendor/zordius/lightncandy/tests/errorTest.php @@ -0,0 +1,410 @@ +<?php + +require_once('src/lightncandy.php'); +require_once('tests/helpers_for_test.php'); + +$tmpdir = sys_get_temp_dir(); +$errlog_fn = tempnam($tmpdir, 'terr_'); + +function start_catch_error_log() { + global $errlog_fn; + date_default_timezone_set('GMT'); + if (file_exists($errlog_fn)) { + unlink($errlog_fn); + } + return ini_set('error_log', $errlog_fn); +} + +function stop_catch_error_log() { + global $errlog_fn; + ini_restore('error_log'); + if (!file_exists($errlog_fn)) { + return null; + } + return array_map(function ($l) { + $l = rtrim($l); + preg_match('/GMT\] (.+)/', $l, $m); + return isset($m[1]) ? $m[1] : $l; + }, file($errlog_fn)); +} + +class errorTest extends PHPUnit_Framework_TestCase +{ + public function testException() + { + $this->setExpectedException('Exception', 'Bad token {{{foo}} ! Do you mean {{foo}} or {{{foo}}}?'); + $php = LightnCandy::compile('{{{foo}}', Array('flags' => LightnCandy::FLAG_ERROR_EXCEPTION)); + } + + public function testErrorLog() + { + start_catch_error_log(); + $php = LightnCandy::compile('{{{foo}}', Array('flags' => LightnCandy::FLAG_ERROR_LOG)); + $e = stop_catch_error_log(); + if ($e) { + $this->assertEquals(Array('Bad token {{{foo}} ! Do you mean {{foo}} or {{{foo}}}?'), $e); + } else { + $this->markTestIncomplete('skip HHVM'); + } + } + + /** + * @dataProvider renderErrorProvider + */ + public function testRenderingException($test) + { + $this->setExpectedException('Exception', $test['expected']); + $php = LightnCandy::compile($test['template'], $test['options']); + $renderer = LightnCandy::prepare($php); + $renderer(null, LCRun3::DEBUG_ERROR_EXCEPTION); + } + + /** + * @dataProvider renderErrorProvider + */ + public function testRenderingErrorLog($test) + { + start_catch_error_log(); + $php = LightnCandy::compile($test['template'], $test['options']); + $renderer = LightnCandy::prepare($php); + $renderer(null, LCRun3::DEBUG_ERROR_LOG); + $e = stop_catch_error_log(); + if ($e) { + $this->assertEquals(Array($test['expected']), $e); + } else { + $this->markTestIncomplete('skip HHVM'); + } + } + + public function renderErrorProvider() + { + $errorCases = Array( + Array( + 'template' => '{{{foo}}}', + 'expected' => 'LCRun3: [foo] is not exist', + ), + Array( + 'template' => '{{foo}}', + 'options' => Array( + 'hbhelpers' => Array( + 'foo' => function () { + return 1/0; + } + ), + ), + 'expected' => 'LCRun3: call custom helper \'foo\' error: Division by zero', + ), + ); + + return array_map(function($i) { + if (!isset($i['options'])) { + $i['options'] = Array('flags' => LightnCandy::FLAG_RENDER_DEBUG); + } + if (!isset($i['options']['flags'])) { + $i['options']['flags'] = LightnCandy::FLAG_RENDER_DEBUG; + } + return Array($i); + }, $errorCases); + } + + /** + * @dataProvider errorProvider + */ + public function testErrors($test) + { + global $tmpdir; + + $php = LightnCandy::compile($test['template'], $test['options']); + $context = LightnCandy::getContext(); + + // This case should be compiled without error + if (!isset($test['expected'])) { + return; + } + + $this->assertEquals($test['expected'], $context['error'], "Code: $php"); + } + + public function errorProvider() + { + $errorCases = Array( + Array( + 'template' => '{{testerr1}}}', + 'expected' => 'Bad token {{testerr1}}} ! Do you mean {{testerr1}} or {{{testerr1}}}?', + ), + Array( + 'template' => '{{{testerr2}}', + 'expected' => 'Bad token {{{testerr2}} ! Do you mean {{testerr2}} or {{{testerr2}}}?', + ), + Array( + 'template' => '{{{#testerr3}}}', + 'expected' => 'Bad token {{{#testerr3}}} ! Do you mean {{#testerr3}} ?', + ), + Array( + 'template' => '{{{!testerr4}}}', + 'expected' => 'Bad token {{{!testerr4}}} ! Do you mean {{!testerr4}} ?', + ), + Array( + 'template' => '{{{^testerr5}}}', + 'expected' => 'Bad token {{{^testerr5}}} ! Do you mean {{^testerr5}} ?', + ), + Array( + 'template' => '{{{/testerr6}}}', + 'expected' => 'Bad token {{{/testerr6}}} ! Do you mean {{/testerr6}} ?', + ), + Array( + 'template' => '{{win[ner.test1}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming in {{win[ner.test1}}', + ), + Array( + 'template' => '{{win]ner.test2}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'win]ner.test2\' in {{win]ner.test2}} !', + ), + Array( + 'template' => '{{wi[n]ner.test3}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'wi[n]ner.test3\' in {{wi[n]ner.test3}} !', + ), + Array( + 'template' => '{{winner].[test4]}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'winner].[test4]\' in {{winner].[test4]}} !', + ), + Array( + 'template' => '{{winner[.test5]}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'winner[.test5]\' in {{winner[.test5]}} !', + ), + Array( + 'template' => '{{winner.[.test6]}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{winner.[#te.st7]}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{test8}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{test9]}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'test9]\' in {{test9]}} !', + ), + Array( + 'template' => '{{testA[}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'testA[\' in {{testA[}} !', + ), + Array( + 'template' => '{{[testB}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming in {{[testB}}', + ), + Array( + 'template' => '{{]testC}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \']testC\' in {{]testC}} !', + ), + Array( + 'template' => '{{[testD]}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{te]stE}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'te]stE\' in {{te]stE}} !', + ), + Array( + 'template' => '{{tee[stF}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming in {{tee[stF}}', + ), + Array( + 'template' => '{{te.e[stG}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming in {{te.e[stG}}', + ), + Array( + 'template' => '{{te.e]stH}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'te.e]stH\' in {{te.e]stH}} !', + ), + Array( + 'template' => '{{te.e[st.endI}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming in {{te.e[st.endI}}', + ), + Array( + 'template' => '{{te.e]st.endJ}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'te.e]st.endJ\' in {{te.e]st.endJ}} !', + ), + Array( + 'template' => '{{te.[est].endK}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{te.t[est].endL}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'te.t[est].endL\' in {{te.t[est].endL}} !', + ), + Array( + 'template' => '{{te.t[est]o.endM}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'te.t[est]o.endM\' in {{te.t[est]o.endM}} !', + ), + Array( + 'template' => '{{te.[est]o.endN}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + 'expected' => 'Wrong variable naming as \'te.[est]o.endN\' in {{te.[est]o.endN}} !', + ), + Array( + 'template' => '{{te.[e.st].endO}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{te.[e.s[t].endP}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{te.[e[s.t].endQ}}', + 'options' => Array('flags' => LightnCandy::FLAG_ADVARNAME), + ), + Array( + 'template' => '{{helper}}', + 'options' => Array('helpers' => Array( + 'helper' => Array('bad input'), + )), + 'expected' => 'I found an array in helpers with key as helper, please fix it.', + ), + Array( + 'template' => '<ul>{{#each item}}<li>{{name}}</li>', + 'expected' => 'Unclosed token {{{#each item}}} !!', + ), + Array( + 'template' => 'issue63: {{test_join}} Test! {{this}} {{/test_join}}', + 'expected' => 'Unexpect token: {{/test_join}} !', + ), + Array( + 'template' => '{{#if a}}TEST{{/with}}', + 'options' => Array('flags' => LightnCandy::FLAG_WITH), + 'expected' => 'Unexpect token: {{/with}} !', + ), + Array( + 'template' => '{{#foo}}error{{/bar}}', + 'expected' => 'Unexpect token {{/bar}} ! Previous token {{#[foo]}} is not closed', + ), + Array( + 'template' => '{{../foo}}', + 'expected' => 'Do not support {{../var}}, you should do compile with LightnCandy::FLAG_PARENT flag', + ), + Array( + 'template' => '{{..}}', + 'expected' => 'Do not support {{../var}}, you should do compile with LightnCandy::FLAG_PARENT flag', + ), + Array( + 'template' => '{{test_join [a]=b}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_NAMEDARG, + 'helpers' => Array('test_join') + ), + 'expected' => "Wrong argument name as '[a]' in {{test_join [a]=b}} ! You should fix your template or compile with LightnCandy::FLAG_ADVARNAME flag.", + ), + Array( + 'template' => '{{a=b}}', + 'options' => Array('flags' => LightnCandy::FLAG_NAMEDARG), + 'expected' => 'Do not support name=value in {{a=b}}, you should use it after a custom helper.', + ), + Array( + 'template' => '{{test a=b}}', + 'options' => Array('flags' => LightnCandy::FLAG_NAMEDARG), + 'expected' => 'Do not support name=value in {{test a=b}}, maybe you missing the custom helper?', + ), + Array( + 'template' => '{{#test a=b}}YA~{{/test}}', + 'options' => Array('flags' => LightnCandy::FLAG_NAMEDARG), + 'expected' => 'Do not support name=value in {{#test a=b}}, maybe you missing the block custom helper?', + ), + Array( + 'template' => '{{#foo}}1{{^}}2{{/foo}}', + 'expected' => 'Do not support {{^}}, you should do compile with LightnCandy::FLAG_ELSE flag', + ), + Array( + 'template' => '{{#with a}OK!{{/with}}', + 'options' => Array('flags' => LightnCandy::FLAG_WITH), + 'expected' => 'Unclosed token {{{#with a}OK!{{/with}}} !!', + ), + Array( + 'template' => '{{#each a}OK!{{/each}}', + 'expected' => 'Unclosed token {{{#each a}OK!{{/each}}} !!', + ), + Array( + 'template' => '{{#with items}}OK!{{/with}}', + 'options' => Array('flags' => LightnCandy::FLAG_WITH), + ), + Array( + 'template' => '{{#with}}OK!{{/with}}', + 'options' => Array('flags' => LightnCandy::FLAG_WITH), + 'expected' => 'No argument after {{#with}} !', + ), + Array( + 'template' => '{{>not_found}}', + 'expected' => "Can not find partial file for 'not_found', you should set correct basedir and fileext in options", + ), + Array( + 'template' => '{{>tests/test1 foo}}', + 'options' => Array('basedir' => '.'), + 'expected' => 'Do not support {{>tests/test1 [foo]}}, you should do compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag', + ), + Array( + 'template' => '{{#with foo}}ABC{{/with}}', + 'expected' => 'Do not support {{#with var}}, you should do compile with LightnCandy::FLAG_WITH flag', + ), + Array( + 'template' => '{{abc}}', + 'options' => Array('helpers' => Array('abc')), + 'expected' => 'Can not find custom helper function defination abc() !', + ), + Array( + 'template' => '{{=~= =~=}}', + 'expected' => "Can not set delimiter contains '=' , you try to set delimiter as '~=' and '=~'.", + ), + Array( + 'template' => '{{>recursive}}', + 'options' => Array('basedir' => 'tests', 'flags' => LightnCandy::FLAG_WITH), + 'expected' => Array( + 'I found recursive partial includes as the path: recursive -> recursive! You should fix your template or compile with LightnCandy::FLAG_RUNTIMEPARTIAL flag.', + "Skip rendering partial 'recursive' again due to recursive detected", + ) + ), + Array( + 'template' => '{{test_join (foo bar)}}', + 'options' => Array( + 'flags' => LightnCandy::FLAG_ADVARNAME, + 'helpers' => Array('test_join'), + ), + 'expected' => "Custom helper 'foo' not found!", + ), + ); + + return array_map(function($i) { + if (!isset($i['options'])) { + $i['options'] = Array('flags' => 0); + } + if (!isset($i['options']['flags'])) { + $i['options']['flags'] = 0; + } + if (isset($i['expected']) && !is_array($i['expected'])) { + $i['expected'] = Array($i['expected']); + } + return Array($i); + }, $errorCases); + } +} + + +?> |