Differences Between: [Versions 310 and 400]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * PHP lang parser test. 19 * 20 * @package tool_customlang 21 * @copyright 2015 Damyon Wiese 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace tool_customlang\local\mlang; 26 27 use advanced_testcase; 28 use moodle_exception; 29 30 /** 31 * PHP lang parser test class. 32 * 33 * @package tool_customlang 34 * @copyright 2015 Damyon Wiese 35 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 36 */ 37 class phpparser_test extends advanced_testcase { 38 39 40 /** 41 * Test get instance static method. 42 * 43 */ 44 public function test_get_instance(): void { 45 46 $instance = phpparser::get_instance(); 47 48 $this->assertInstanceOf('tool_customlang\local\mlang\phpparser', $instance); 49 $this->assertEquals($instance, phpparser::get_instance()); 50 } 51 52 /** 53 * Test get instance parse method. 54 * 55 * @dataProvider parse_provider 56 * @param string $phpcode PHP code to test 57 * @param array $expected Expected result 58 * @param bool $exception if an exception is expected 59 */ 60 public function test_parse(string $phpcode, array $expected, bool $exception): void { 61 62 $instance = phpparser::get_instance(); 63 64 if ($exception) { 65 $this->expectException(moodle_exception::class); 66 } 67 68 $strings = $instance->parse($phpcode); 69 70 $this->assertEquals(count($expected), count($strings)); 71 foreach ($strings as $key => $langstring) { 72 $this->assertEquals($expected[$key][0], $langstring->id); 73 $this->assertEquals($expected[$key][1], $langstring->text); 74 } 75 } 76 77 /** 78 * Data provider for the test_parse. 79 * 80 * @return array 81 */ 82 public function parse_provider() : array { 83 return [ 84 'Invalid PHP code' => [ 85 'No PHP code', [], false 86 ], 87 'No PHP open tag' => [ 88 "\$string['example'] = 'text';\n", [], false 89 ], 90 'One string code' => [ 91 "<?php \$string['example'] = 'text';\n", [['example', 'text']], false 92 ], 93 'Extra spaces' => [ 94 "<?php \$string['example'] = 'text';\n", [['example', 'text']], false 95 ], 96 'Extra tabs' => [ 97 "<?php \$string['example']\t=\t'text';\n", [['example', 'text']], false 98 ], 99 'Double quote string' => [ 100 "<?php 101 \$string['example'] = \"text\"; 102 \$string[\"example2\"] = 'text2'; 103 \$string[\"example3\"] = \"text3\"; 104 ", [ 105 ['example', 'text'], 106 ['example2', 'text2'], 107 ['example3', 'text3'], 108 ], false 109 ], 110 'Multiple lines strings' => [ 111 "<?php 112 \$string['example'] = 'First line\nsecondline'; 113 \$string['example2'] = \"First line\nsecondline2\"; 114 ", [ 115 ['example', "First line\nsecondline"], 116 ['example2', "First line\nsecondline2"], 117 ], false 118 ], 119 'Two strings code' => [ 120 "<?php 121 \$string['example'] = 'text'; 122 \$string['example2'] = 'text2'; 123 ", [ 124 ['example', 'text'], 125 ['example2', 'text2'], 126 ], false 127 ], 128 'Scaped characters' => [ 129 "<?php 130 \$string['example'] = 'Thos are \\' quotes \" 1'; 131 \$string['example2'] = \"Thos are ' quotes \\\" 2\"; 132 ", [ 133 ['example', "Thos are ' quotes \" 1"], 134 ['example2', "Thos are ' quotes \" 2"], 135 ], false 136 ], 137 'PHP with single line comments' => [ 138 "<?php 139 // This is a comment. 140 \$string['example'] = 'text'; 141 // This is another commment. 142 ", [ 143 ['example', 'text'], 144 ], false 145 ], 146 'PHP with block comments' => [ 147 "<?php 148 /* This is a block comment. */ 149 \$string['example'] = 'text'; 150 /* This is another 151 block comment. */ 152 ", [ 153 ['example', 'text'], 154 ], false 155 ], 156 'Wrong variable name' => [ 157 "<?php 158 \$stringwrong['example'] = 'text'; 159 \$wringstring['example'] = 'text'; 160 ", [], false 161 ], 162 'Single line commented valid line' => [ 163 "<?php 164 // \$string['example'] = 'text'; 165 ", [], false 166 ], 167 'Block commented valid line' => [ 168 "<?php 169 /* 170 \$string['example'] = 'text'; 171 */ 172 ", [], false 173 ], 174 'Syntax error 1 (double assignation)' => [ 175 "<?php 176 \$string['example'] = 'text' = 'wrong'; 177 ", [], true 178 ], 179 'Syntax error 2 (no closing string)' => [ 180 "<?php 181 \$string['example'] = 'wrong; 182 ", [], true 183 ], 184 'Syntax error 3 (Array without key)' => [ 185 "<?php 186 \$string[] = 'wrong'; 187 ", [], true 188 ], 189 'Syntax error 4 (Array not open)' => [ 190 "<?php 191 \$string'example'] = 'wrong'; 192 ", [], true 193 ], 194 'Syntax error 5 (Array not closed)' => [ 195 "<?php 196 \$string['example' = 'wrong'; 197 ", [], true 198 ], 199 'Syntax error 6 (Missing assignment)' => [ 200 "<?php 201 \$string['example'] 'wrong'; 202 ", [], true 203 ], 204 ]; 205 } 206 207 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body