PageRenderTime 60ms CodeModel.GetById 10ms app.highlight 42ms RepoModel.GetById 1ms app.codeStats 1ms

/lib/smarty/unit_test/test_cases.php

http://github.com/gabrys/wikidot
PHP | 450 lines | 367 code | 37 blank | 46 comment | 1 complexity | 824dbd2706cdb143395df4f36920cc97 MD5 | raw file
  1<?php
  2
  3require_once './config.php';
  4require_once SMARTY_DIR . 'Smarty.class.php';
  5require_once 'PHPUnit.php';
  6
  7class Obj {
  8    public $val = 'val';
  9    public $arr = array('one' => 'one', 'two' => 2);
 10    public $ten = 10;
 11
 12    function meth($a="a", $b="b") {
 13        return "$a:$b";
 14    }
 15
 16    function six() {
 17        return 6;
 18    }
 19}
 20
 21    
 22class SmartyTest extends PHPUnit_TestCase {   
 23    // contains the object handle of the string class
 24    public $abc;
 25    // contains the last triggered error's errorlevel
 26    public $errorlevel;
 27
 28    // constructor of the test suite
 29    function SmartyTest($name) {
 30       $this->PHPUnit_TestCase($name);
 31    }
 32
 33    // called before the test functions will be executed    
 34    // this function is defined in PHPUnit_TestCase and overwritten 
 35    // here
 36    function setUp() {
 37        // create a new instance of String with the
 38        // string 'abc'
 39        $this->smarty = new Smarty;
 40    }
 41    // called after the test functions are executed    
 42    // this function is defined in PHPUnit_TestCase and overwritten 
 43    // here    
 44    function tearDown() {
 45        // delete your instance
 46        unset($this->smarty);
 47    }
 48    
 49    // dummy errorhandler for functions that are supposed to call trigger_error()
 50    function error_handler($errorlevel) {
 51        if ($errorlevel) $this->errorlevel = $errorlevel;
 52    }
 53
 54    /* DIRECTORY TESTS */
 55    
 56    // test that template_dir exists
 57    function test_template_dir_exists() {
 58        $this->assertTrue(file_exists($this->smarty->template_dir));                       
 59    }
 60    // test that template_dir is a directory
 61    function test_template_dir_is_dir() {
 62        $this->assertTrue(is_dir($this->smarty->template_dir));                       
 63    }
 64    // test that template_dir is readable
 65    function test_template_dir_is_readable() {
 66        $this->assertTrue(is_readable($this->smarty->template_dir));                       
 67    }
 68    // test that config_dir exists
 69    function test_config_dir_exists() {
 70        $this->assertTrue(file_exists($this->smarty->config_dir));                       
 71    }
 72    // test that config_dir is a directory
 73    function test_config_dir_is_dir() {
 74        $this->assertTrue(is_dir($this->smarty->config_dir));                       
 75    }
 76    // test that config_dir is readable
 77    function test_config_dir_is_readable() {
 78        $this->assertTrue(is_readable($this->smarty->config_dir));                       
 79    }
 80    // test that compile_dir exists
 81    function test_compile_dir_exists() {
 82        $this->assertTrue(file_exists($this->smarty->compile_dir));                       
 83    }
 84    // test that compile_dir is a directory
 85    function test_compile_dir_is_dir() {
 86        $this->assertTrue(is_dir($this->smarty->compile_dir));                       
 87    }
 88    // test that compile_dir is readable
 89    function test_compile_dir_is_readable() {
 90        $this->assertTrue(is_readable($this->smarty->compile_dir));                       
 91    }
 92    // test that compile_dir is writable
 93    function test_compile_dir_is_writable() {
 94        $this->assertTrue(is_writable($this->smarty->compile_dir));                       
 95    }
 96    // test that cache_dir exists
 97    function test_cache_dir_exists() {
 98        $this->assertTrue(file_exists($this->smarty->cache_dir));                       
 99    }
100    // test that cache_dir is a directory
101    function test_cache_dir_is_dir() {
102        $this->assertTrue(is_dir($this->smarty->cache_dir));                       
103    }
104    // test that cache_dir is readable
105    function test_cache_dir_is_readable() {
106        $this->assertTrue(is_readable($this->smarty->cache_dir));                       
107    }
108    // test that cache_dir is writable
109    function test_cache_dir_is_writable() {
110        $this->assertTrue(is_writable($this->smarty->cache_dir));                       
111    }
112
113    /* METHOD EXISTS TESTS */
114    function test_assign_method_exists() {
115        $this->assertTrue(method_exists($this->smarty, 'assign'));
116    }
117    function test_assign_by_ref_method_exists() {
118        $this->assertTrue(method_exists($this->smarty, 'assign_by_ref'));
119    }
120    function test_append_method_exists() {
121        $this->assertTrue(method_exists($this->smarty, 'append'));
122    }
123    function test_append_by_ref_method_exists() {
124        $this->assertTrue(method_exists($this->smarty, 'append_by_ref'));
125    }
126    function test_clear_assign_method_exists() {
127        $this->assertTrue(method_exists($this->smarty, 'clear_assign'));
128    }
129    function test_register_function_method_exists() {
130        $this->assertTrue(method_exists($this->smarty, 'register_function'));
131    }
132    function test_unregister_function_method_exists() {
133        $this->assertTrue(method_exists($this->smarty, 'unregister_function'));
134    }
135    function test_register_object_method_exists() {
136        $this->assertTrue(method_exists($this->smarty, 'register_object'));
137    }
138    function test_unregister_object_method_exists() {
139        $this->assertTrue(method_exists($this->smarty, 'unregister_object'));
140    }
141    function test_register_block_method_exists() {
142        $this->assertTrue(method_exists($this->smarty, 'register_block'));
143    }
144    function test_unregister_block_method_exists() {
145        $this->assertTrue(method_exists($this->smarty, 'unregister_block'));
146    }
147    function test_register_compiler_function_method_exists() {
148        $this->assertTrue(method_exists($this->smarty, 'register_compiler_function'));
149    }
150    function test_unregister_compiler_function_method_exists() {
151        $this->assertTrue(method_exists($this->smarty, 'unregister_compiler_function'));
152    }
153    function test_register_modifier_method_exists() {
154        $this->assertTrue(method_exists($this->smarty, 'register_modifier'));
155    }
156    function test_unregister_modifier_method_exists() {
157        $this->assertTrue(method_exists($this->smarty, 'unregister_modifier'));
158    }
159    function test_register_resource_method_exists() {
160        $this->assertTrue(method_exists($this->smarty, 'register_resource'));
161    }
162    function test_unregister_resource_method_exists() {
163        $this->assertTrue(method_exists($this->smarty, 'unregister_resource'));
164    }
165    function test_register_prefilter_method_exists() {
166        $this->assertTrue(method_exists($this->smarty, 'register_prefilter'));
167    }
168    function test_unregister_prefilter_method_exists() {
169        $this->assertTrue(method_exists($this->smarty, 'unregister_prefilter'));
170    }
171    function test_register_postfilter_method_exists() {
172        $this->assertTrue(method_exists($this->smarty, 'register_postfilter'));
173    }
174    function test_unregister_postfilter_method_exists() {
175        $this->assertTrue(method_exists($this->smarty, 'unregister_postfilter'));
176    }
177    function test_register_outputfilter_method_exists() {
178        $this->assertTrue(method_exists($this->smarty, 'register_outputfilter'));
179    }
180    function test_unregister_outputfilter_method_exists() {
181        $this->assertTrue(method_exists($this->smarty, 'unregister_outputfilter'));
182    }
183    function test_load_filter_method_exists() {
184        $this->assertTrue(method_exists($this->smarty, 'load_filter'));
185    }
186    function test_clear_cache_method_exists() {
187        $this->assertTrue(method_exists($this->smarty, 'clear_cache'));
188    }
189    function test_clear_all_cache_method_exists() {
190        $this->assertTrue(method_exists($this->smarty, 'clear_all_cache'));
191    }
192    function test_is_cached_method_exists() {
193        $this->assertTrue(method_exists($this->smarty, 'is_cached'));
194    }
195    function test_clear_all_assign_method_exists() {
196        $this->assertTrue(method_exists($this->smarty, 'clear_all_assign'));
197    }
198    function test_clear_compiled_tpl_method_exists() {
199        $this->assertTrue(method_exists($this->smarty, 'clear_compiled_tpl'));
200    }
201    function test_template_exists_method_exists() {
202        $this->assertTrue(method_exists($this->smarty, 'template_exists'));
203    }
204    function test_get_template_vars_method_exists() {
205        $this->assertTrue(method_exists($this->smarty, 'get_template_vars'));
206    }
207    function test_get_config_vars_method_exists() {
208        $this->assertTrue(method_exists($this->smarty, 'get_config_vars'));
209    }
210    function test_trigger_error_method_exists() {
211        $this->assertTrue(method_exists($this->smarty, 'trigger_error'));
212    }
213    function test_display_method_exists() {
214        $this->assertTrue(method_exists($this->smarty, 'display'));
215    }
216    function test_fetch_method_exists() {
217        $this->assertTrue(method_exists($this->smarty, 'fetch'));
218    }
219    function test_config_load_method_exists() {
220        $this->assertTrue(method_exists($this->smarty, 'config_load'));
221    }
222    function test_get_registered_object_method_exists() {
223        $this->assertTrue(method_exists($this->smarty, 'get_registered_object'));
224    }
225    function test_clear_config_method_exists() {
226        $this->assertTrue(method_exists($this->smarty, 'clear_config'));
227    }
228    function test_get_plugin_filepath() {
229        $this->assertTrue(method_exists($this->smarty, '_get_plugin_filepath'));
230    }
231
232    
233    function test_clear_compiled_tpl() {
234        $this->assertTrue($this->smarty->clear_compiled_tpl());
235    }
236    
237    /* DISPLAY TESTS */
238    
239    // test that display() executes properly
240    function test_call_to_display() {
241        ob_start();
242        $this->smarty->display('index.tpl');
243        $output = ob_get_contents();
244        ob_end_clean();
245        $this->assertEquals($output, 'TEST STRING');
246    }
247
248    /* FETCH TESTS */
249
250    // test that fetch() executes properly
251    function test_call_to_fetch() {
252        $this->assertEquals($this->smarty->fetch('index.tpl'), 'TEST STRING');
253    }
254    
255    /* ASSIGN TESTS */
256
257    // test assigning a simple template variable
258    function test_assign_var() {
259        $this->smarty->assign('foo', 'bar');
260        $this->assertEquals($this->smarty->fetch('assign_var.tpl'), 'bar');
261    }
262
263    /* PARSING TESTS */
264    
265    // test assigning and calling an object
266    function test_parse_obj_meth() {
267        $obj  = new Obj();
268        $this->smarty->assign('obj', $obj);
269        $this->smarty->assign('foo', 'foo');
270        $this->assertEquals('foo:2.5
2712.5:foo
2722.5:b
273val:foo
274foo:val
275foo:foo
276one:2
277foo:foo:b', $this->smarty->fetch('parse_obj_meth.tpl'));
278    }
279    
280    // test assigning and calling an object
281    function test_parse_math() {
282        $obj  = new Obj();
283        $this->smarty->assign('obj', $obj);
284        $this->smarty->assign('flt', 2.5);
285        $this->smarty->assign('items', array(1, 2));
286        $this->assertEquals('3
2873.5
2887
28911
2904
2914.5
2928
29312
29412.5
29525
29616
29720
2988.5
2997', $this->smarty->fetch('parse_math.tpl'));
300    }
301    
302    /* CONFIG FILE TESTS */
303
304    // test assigning a double quoted global variable
305    function test_config_load_globals_double_quotes() {
306        // load the global var
307        $this->smarty->config_load('globals_double_quotes.conf');
308        // test that it is assigned
309        $this->assertEquals($this->smarty->_config[0]['vars']['foo'], 'bar');
310    }
311
312    // test assigning a single quoted global variable
313    function test_config_load_globals_single_quotes() {
314        // load the global var
315        $this->smarty->config_load('globals_single_quotes.conf');
316        // test that it is assigned
317        $this->assertEquals($this->smarty->_config[0]['vars']['foo'], 'bar');
318    }
319
320    // test loading and running modifier.escape.php
321    function test_escape_modifier_get_plugins_filepath() {
322        $filepath = $this->smarty->_get_plugin_filepath('modifier', 'escape');
323        $this->assertTrue($filepath);
324    }
325
326    function test_escape_modifier_include_file() {
327        $filepath = $this->smarty->_get_plugin_filepath('modifier', 'escape');
328        $this->assertTrue(include($filepath));
329    }
330
331    function test_escape_modifier_function_exists() {
332        $this->assertTrue(function_exists('smarty_modifier_escape'));
333    }
334
335    function test_escape_modifier_escape_default() {
336        $string = smarty_modifier_escape("<html><body></body></html>");
337        $this->assertEquals('&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;',
338                            $string);
339    }
340
341    function test_escape_modifier_escape_html() {
342        $string = smarty_modifier_escape("<html><body></body></html>", 'html');
343        $this->assertEquals('&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;',
344                            $string);
345    }
346
347    function test_escape_modifier_escape_htmlall() {
348        $string = smarty_modifier_escape("<html><body></body></html>", 'htmlall');
349        $this->assertEquals('&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;',
350                            $string);
351    }
352
353    function test_escape_modifier_escape_url() {
354        $string = smarty_modifier_escape("http://test.com?foo=bar", 'url');
355        $this->assertEquals('http%3A%2F%2Ftest.com%3Ffoo%3Dbar', $string);
356    }
357
358    function test_escape_modifier_escape_quotes() {
359        $string = smarty_modifier_escape("'\\'\\''", 'quotes');
360        $this->assertEquals("\\'\\'\\'\\'", $string);
361    }
362
363    function test_escape_modifier_escape_hex() {
364        $string = smarty_modifier_escape("abcd", 'hex');
365        $this->assertEquals('%61%62%63%64', $string);
366    }
367
368    function test_escape_modifier_escape_hexentity() {
369        $string = smarty_modifier_escape("ABCD", 'hexentity');
370        $this->assertEquals('&#x41;&#x42;&#x43;&#x44;', $string);
371    }
372
373    function test_escape_modifier_escape_javascript() {
374        $string = smarty_modifier_escape("\r\n\\", 'javascript');
375        $this->assertEquals('\\r\\n\\\\', $string);
376    }
377
378
379    function test_core_is_secure_file_exists() {
380        $file = SMARTY_CORE_DIR . 'core.is_secure.php';
381        $this->assertTrue(file_exists($file));
382    }
383
384    function test_core_is_secure_file_include() {
385        $file = SMARTY_CORE_DIR . 'core.is_secure.php';
386        $this->assertTrue(include($file));
387    }
388
389    function test_core_is_secure_function_exists() {
390        $this->assertTrue(function_exists('smarty_core_is_secure'));
391    }
392
393    function test_core_is_secure_function_is_secure_true() {
394        $security = $this->smarty->security;
395        $this->smarty->security = true;
396
397        /* check if index.tpl is secure (should be true) */
398        $params = array('resource_type' => 'file',
399                        'resource_base_path' => dirname(__FILE__) . '/templates',
400                        'resource_name' => dirname(__FILE__) . '/templates/index.tpl');
401        $this->assertTrue(smarty_core_is_secure($params, $this->smarty));
402        $this->smarty->security = $security;
403    }
404
405    function test_core_is_secure_function_is_secure_false() {
406        $security = $this->smarty->security;
407        $this->smarty->security = true;
408        /* check if test_cases.php is secure (should be false) */
409        $params = array('resource_type' => 'file',
410                        'resource_base_path' => dirname(__FILE__) . '/templates',
411                        'resource_name' => __FILE__);
412        $this->assertFalse(smarty_core_is_secure($params, $this->smarty));
413        $this->smarty->security = $security;
414
415    }
416
417    // test constants and security
418    function test_core_is_secure_function_smarty_var_const() {
419        define('TEST_CONSTANT', 'test constant');
420        $this->assertEquals('test constant', $this->smarty->fetch('constant.tpl',
421                                                             null, 'var_const'));
422    }
423
424    function test_core_is_secure_function_smarty_var_const_allowed() {
425        $security = $this->smarty->security;
426        $security_settings = $this->smarty->security_settings;
427        $this->smarty->security_settings['ALLOW_CONSTANTS'] = true;
428        $this->smarty->security = true;
429        $this->assertEquals('test constant', $this->smarty->fetch('constant.tpl',
430                                                     null, 'var_const_allowed'));
431        $this->smarty->security_settings = $security_settings;
432        $this->smarty->security = $security;   
433    }
434
435    function test_core_is_secure_function_smarty_var_const_not_allowed() {
436        $security = $this->smarty->security;
437        $this->smarty->security = true;
438        /* catch errors: */
439        $this->errorlevel = null;
440        set_error_handler(array(&$this, 'error_handler'));
441        $this->smarty->fetch('constant.tpl', null, 'var_const_not_allowed');
442        restore_error_handler();
443
444        $this->assertEquals( $this->errorlevel, E_USER_WARNING);
445        $this->smarty->security = $security;
446    }
447
448}
449
450?>