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