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