syntax tag. * * @group parser_code */ class CodeTest extends ParserTestBase { function setUp() : void { parent::setUp(); $this->P->addMode('code',new Code()); } function testCode() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test',null,null]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeBash() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','bash',null]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeDownload() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','bash','script.sh']], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeToken() { $this->P->parse('Foo BarTest'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo Bar']], ['p_close',[]], ['code',['Test',null,null]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_OneOption() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => 1] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_TwoOptions() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'highlight_lines_extra' => [3] ]]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_UnknownOption() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, null]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_EnableLineNumbers1() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_EnableLineNumbers2() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_EnableLineNumbers3() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => false] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_EnableLineNumbers4() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_HighlightLinesExtra1() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'highlight_lines_extra' => [42, 123, 456, 789] ]]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_HighlightLinesExtra2() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'highlight_lines_extra' => [1]] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_HighlightLinesExtra3() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'highlight_lines_extra' => [1]] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_StartLineNumbersAt1() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'start_line_numbers_at' => 42] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_StartLineNumbersAt2() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'start_line_numbers_at' => 1] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_StartLineNumbersAt3() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_line_numbers' => true, 'start_line_numbers_at' => 1] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_EnableKeywordLinks1() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_keyword_links' => false] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } function testCodeOptionsArray_EnableKeywordLinks2() { $this->P->parse('Foo Test Bar'); $calls = [ ['document_start',[]], ['p_open',[]], ['cdata',["\n".'Foo ']], ['p_close',[]], ['code',['Test','C', null, ['enable_keyword_links' => true] ]], ['p_open',[]], ['cdata',[' Bar']], ['p_close',[]], ['document_end',[]], ]; $this->assertCalls($calls, $this->H->calls); } public function highlightOptionsProvider() { return [ ['', null], ['something weird', null], ['enable_line_numbers', ['enable_line_numbers' => true]], ['enable_line_numbers=1', ['enable_line_numbers' => true]], ['enable_line_numbers="1"', ['enable_line_numbers' => true]], ['enable_line_numbers=0', ['enable_line_numbers' => false]], ['enable_line_numbers="0"', ['enable_line_numbers' => false]], ['enable_line_numbers=false', ['enable_line_numbers' => false]], ['enable_line_numbers="false"', ['enable_line_numbers' => false]], ['highlight_lines_extra', ['highlight_lines_extra' => [1]]], ['highlight_lines_extra=17', ['highlight_lines_extra' => [17]]], ['highlight_lines_extra=17,19', ['highlight_lines_extra' => [17, 19]]], ['highlight_lines_extra="17,19"', ['highlight_lines_extra' => [17, 19]]], ['highlight_lines_extra="17,19,17"', ['highlight_lines_extra' => [17, 19]]], ['start_line_numbers_at', ['start_line_numbers_at' => 1]], ['start_line_numbers_at=12', ['start_line_numbers_at' => 12]], ['start_line_numbers_at="12"', ['start_line_numbers_at' => 12]], ['enable_keyword_links', ['enable_keyword_links' => true]], ['enable_keyword_links=1', ['enable_keyword_links' => true]], ['enable_keyword_links="1"', ['enable_keyword_links' => true]], ['enable_keyword_links=0', ['enable_keyword_links' => false]], ['enable_keyword_links="0"', ['enable_keyword_links' => false]], ['enable_keyword_links=false', ['enable_keyword_links' => false]], ['enable_keyword_links="false"', ['enable_keyword_links' => false]], [ 'enable_line_numbers weird nothing highlight_lines_extra=17,19 start_line_numbers_at="12" enable_keyword_links=false', [ 'enable_line_numbers' => true, 'highlight_lines_extra' => [17, 19], 'start_line_numbers_at' => 12, 'enable_keyword_links' => false ] ], ]; } /** * @dataProvider highlightOptionsProvider * @param string $input options to parse * @param array|null $expect expected outcome */ public function testHighlightOptionParser($input, $expect) { $code = new Code(); $output = $this->callInaccessibleMethod($code, 'parseHighlightOptions', [$input]); $this->assertEquals($expect, $output); } }