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