1<?php 2require_once 'parser.inc.php'; 3 4/** 5 * Tests to ensure functionality of the <code> syntax tag. 6 * 7 * @group parser_code 8 */ 9class TestOfDoku_Parser_Code extends TestOfDoku_Parser { 10 11 function setUp() { 12 parent::setUp(); 13 $this->P->addMode('code',new Doku_Parser_Mode_Code()); 14 } 15 16 function testCode() { 17 $this->P->parse('Foo <code>Test</code> Bar'); 18 $calls = array ( 19 array('document_start',array()), 20 array('p_open',array()), 21 array('cdata',array("\n".'Foo ')), 22 array('p_close',array()), 23 array('code',array('Test',null,null)), 24 array('p_open',array()), 25 array('cdata',array(' Bar')), 26 array('p_close',array()), 27 array('document_end',array()), 28 ); 29 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 30 } 31 32 function testCodeBash() { 33 $this->P->parse('Foo <code bash>Test</code> Bar'); 34 $calls = array ( 35 array('document_start',array()), 36 array('p_open',array()), 37 array('cdata',array("\n".'Foo ')), 38 array('p_close',array()), 39 array('code',array('Test','bash',null)), 40 array('p_open',array()), 41 array('cdata',array(' Bar')), 42 array('p_close',array()), 43 array('document_end',array()), 44 ); 45 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 46 } 47 48 function testCodeDownload() { 49 $this->P->parse('Foo <code bash script.sh>Test</code> Bar'); 50 $calls = array ( 51 array('document_start',array()), 52 array('p_open',array()), 53 array('cdata',array("\n".'Foo ')), 54 array('p_close',array()), 55 array('code',array('Test','bash','script.sh')), 56 array('p_open',array()), 57 array('cdata',array(' Bar')), 58 array('p_close',array()), 59 array('document_end',array()), 60 ); 61 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 62 } 63 64 function testCodeToken() { 65 $this->P->parse('Foo <code2>Bar</code2><code>Test</code>'); 66 $calls = array ( 67 array('document_start',array()), 68 array('p_open',array()), 69 array('cdata',array("\n".'Foo <code2>Bar</code2>')), 70 array('p_close',array()), 71 array('code',array('Test',null,null)), 72 array('document_end',array()), 73 ); 74 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 75 } 76 77 function testCodeOptionsArray_OneOption() { 78 $this->P->parse('Foo <code C [enable_line_numbers]>Test</code> Bar'); 79 $calls = array ( 80 array('document_start',array()), 81 array('p_open',array()), 82 array('cdata',array("\n".'Foo ')), 83 array('p_close',array()), 84 array('code',array('Test','C', null, 85 array('enable_line_numbers' => 1) 86 )), 87 array('p_open',array()), 88 array('cdata',array(' Bar')), 89 array('p_close',array()), 90 array('document_end',array()), 91 ); 92 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 93 } 94 95 function testCodeOptionsArray_TwoOptions() { 96 $this->P->parse('Foo <code C [enable_line_numbers highlight_lines_extra="3"]>Test</code> Bar'); 97 $calls = array ( 98 array('document_start',array()), 99 array('p_open',array()), 100 array('cdata',array("\n".'Foo ')), 101 array('p_close',array()), 102 array('code',array('Test','C', null, 103 array('enable_line_numbers' => true, 104 'highlight_lines_extra' => array(3) 105 ))), 106 array('p_open',array()), 107 array('cdata',array(' Bar')), 108 array('p_close',array()), 109 array('document_end',array()), 110 ); 111 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 112 } 113 114 function testCodeOptionsArray_UnknownOption() { 115 $this->P->parse('Foo <code C [unknown="I will be deleted/ignored!"]>Test</code> Bar'); 116 $calls = array ( 117 array('document_start',array()), 118 array('p_open',array()), 119 array('cdata',array("\n".'Foo ')), 120 array('p_close',array()), 121 array('code',array('Test','C', null, null)), 122 array('p_open',array()), 123 array('cdata',array(' Bar')), 124 array('p_close',array()), 125 array('document_end',array()), 126 ); 127 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 128 } 129 130 function testCodeOptionsArray_EnableLineNumbers1() { 131 $this->P->parse('Foo <code C [enable_line_numbers]>Test</code> Bar'); 132 $calls = array ( 133 array('document_start',array()), 134 array('p_open',array()), 135 array('cdata',array("\n".'Foo ')), 136 array('p_close',array()), 137 array('code',array('Test','C', null, 138 array('enable_line_numbers' => true) 139 )), 140 array('p_open',array()), 141 array('cdata',array(' Bar')), 142 array('p_close',array()), 143 array('document_end',array()), 144 ); 145 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 146 } 147 148 function testCodeOptionsArray_EnableLineNumbers2() { 149 $this->P->parse('Foo <code C [enable_line_numbers="1"]>Test</code> Bar'); 150 $calls = array ( 151 array('document_start',array()), 152 array('p_open',array()), 153 array('cdata',array("\n".'Foo ')), 154 array('p_close',array()), 155 array('code',array('Test','C', null, 156 array('enable_line_numbers' => true) 157 )), 158 array('p_open',array()), 159 array('cdata',array(' Bar')), 160 array('p_close',array()), 161 array('document_end',array()), 162 ); 163 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 164 } 165 166 function testCodeOptionsArray_EnableLineNumbers3() { 167 $this->P->parse('Foo <code C [enable_line_numbers="0"]>Test</code> Bar'); 168 $calls = array ( 169 array('document_start',array()), 170 array('p_open',array()), 171 array('cdata',array("\n".'Foo ')), 172 array('p_close',array()), 173 array('code',array('Test','C', null, 174 array('enable_line_numbers' => false) 175 )), 176 array('p_open',array()), 177 array('cdata',array(' Bar')), 178 array('p_close',array()), 179 array('document_end',array()), 180 ); 181 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 182 } 183 184 function testCodeOptionsArray_EnableLineNumbers4() { 185 $this->P->parse('Foo <code C [enable_line_numbers=""]>Test</code> Bar'); 186 $calls = array ( 187 array('document_start',array()), 188 array('p_open',array()), 189 array('cdata',array("\n".'Foo ')), 190 array('p_close',array()), 191 array('code',array('Test','C', null, 192 array('enable_line_numbers' => true) 193 )), 194 array('p_open',array()), 195 array('cdata',array(' Bar')), 196 array('p_close',array()), 197 array('document_end',array()), 198 ); 199 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 200 } 201 202 function testCodeOptionsArray_HighlightLinesExtra1() { 203 $this->P->parse('Foo <code C [enable_line_numbers highlight_lines_extra="42, 123, 456, 789"]>Test</code> Bar'); 204 $calls = array ( 205 array('document_start',array()), 206 array('p_open',array()), 207 array('cdata',array("\n".'Foo ')), 208 array('p_close',array()), 209 array('code',array('Test','C', null, 210 array('enable_line_numbers' => true, 211 'highlight_lines_extra' => array(42, 123, 456, 789) 212 ))), 213 array('p_open',array()), 214 array('cdata',array(' Bar')), 215 array('p_close',array()), 216 array('document_end',array()), 217 ); 218 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 219 } 220 221 function testCodeOptionsArray_HighlightLinesExtra2() { 222 $this->P->parse('Foo <code C [enable_line_numbers highlight_lines_extra]>Test</code> Bar'); 223 $calls = array ( 224 array('document_start',array()), 225 array('p_open',array()), 226 array('cdata',array("\n".'Foo ')), 227 array('p_close',array()), 228 array('code',array('Test','C', null, 229 array('enable_line_numbers' => true, 230 'highlight_lines_extra' => array(1)) 231 )), 232 array('p_open',array()), 233 array('cdata',array(' Bar')), 234 array('p_close',array()), 235 array('document_end',array()), 236 ); 237 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 238 } 239 240 function testCodeOptionsArray_HighlightLinesExtra3() { 241 $this->P->parse('Foo <code C [enable_line_numbers highlight_lines_extra=""]>Test</code> Bar'); 242 $calls = array ( 243 array('document_start',array()), 244 array('p_open',array()), 245 array('cdata',array("\n".'Foo ')), 246 array('p_close',array()), 247 array('code',array('Test','C', null, 248 array('enable_line_numbers' => true, 249 'highlight_lines_extra' => array(1)) 250 )), 251 array('p_open',array()), 252 array('cdata',array(' Bar')), 253 array('p_close',array()), 254 array('document_end',array()), 255 ); 256 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 257 } 258 259 function testCodeOptionsArray_StartLineNumbersAt1() { 260 $this->P->parse('Foo <code C [enable_line_numbers [enable_line_numbers start_line_numbers_at="42"]]>Test</code> Bar'); 261 $calls = array ( 262 array('document_start',array()), 263 array('p_open',array()), 264 array('cdata',array("\n".'Foo ')), 265 array('p_close',array()), 266 array('code',array('Test','C', null, 267 array('enable_line_numbers' => true, 268 'start_line_numbers_at' => 42) 269 )), 270 array('p_open',array()), 271 array('cdata',array(' Bar')), 272 array('p_close',array()), 273 array('document_end',array()), 274 ); 275 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 276 } 277 278 function testCodeOptionsArray_StartLineNumbersAt2() { 279 $this->P->parse('Foo <code C [enable_line_numbers [enable_line_numbers start_line_numbers_at]]>Test</code> Bar'); 280 $calls = array ( 281 array('document_start',array()), 282 array('p_open',array()), 283 array('cdata',array("\n".'Foo ')), 284 array('p_close',array()), 285 array('code',array('Test','C', null, 286 array('enable_line_numbers' => true, 287 'start_line_numbers_at' => 1) 288 )), 289 array('p_open',array()), 290 array('cdata',array(' Bar')), 291 array('p_close',array()), 292 array('document_end',array()), 293 ); 294 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 295 } 296 297 function testCodeOptionsArray_StartLineNumbersAt3() { 298 $this->P->parse('Foo <code C [enable_line_numbers [enable_line_numbers start_line_numbers_at=""]]>Test</code> Bar'); 299 $calls = array ( 300 array('document_start',array()), 301 array('p_open',array()), 302 array('cdata',array("\n".'Foo ')), 303 array('p_close',array()), 304 array('code',array('Test','C', null, 305 array('enable_line_numbers' => true, 306 'start_line_numbers_at' => 1) 307 )), 308 array('p_open',array()), 309 array('cdata',array(' Bar')), 310 array('p_close',array()), 311 array('document_end',array()), 312 ); 313 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 314 } 315 316 function testCodeOptionsArray_EnableKeywordLinks1() { 317 $this->P->parse('Foo <code C [enable_keyword_links="false"]>Test</code> Bar'); 318 $calls = array ( 319 array('document_start',array()), 320 array('p_open',array()), 321 array('cdata',array("\n".'Foo ')), 322 array('p_close',array()), 323 array('code',array('Test','C', null, 324 array('enable_keyword_links' => false) 325 )), 326 array('p_open',array()), 327 array('cdata',array(' Bar')), 328 array('p_close',array()), 329 array('document_end',array()), 330 ); 331 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 332 } 333 334 function testCodeOptionsArray_EnableKeywordLinks2() { 335 $this->P->parse('Foo <code C [enable_keyword_links="true"]>Test</code> Bar'); 336 $calls = array ( 337 array('document_start',array()), 338 array('p_open',array()), 339 array('cdata',array("\n".'Foo ')), 340 array('p_close',array()), 341 array('code',array('Test','C', null, 342 array('enable_keyword_links' => true) 343 )), 344 array('p_open',array()), 345 array('cdata',array(' Bar')), 346 array('p_close',array()), 347 array('document_end',array()), 348 ); 349 $this->assertEquals(array_map('stripbyteindex',$this->H->calls),$calls); 350 } 351 352} 353 354