setUp(); $this->setSyntax($syntax); $this->P->addMode('gfm_hr', new GfmHr()); $this->P->parse($input); return count(array_filter($this->H->calls, static fn($c) => $c[0] === 'hr')); } // ------------------------------------------------------------------ // DW flavor (`$conf['syntax'] = 'dokuwiki'`) // ------------------------------------------------------------------ public function testDwFourDashes() { $this->assertSame(1, $this->countHrCalls('dokuwiki', "\n----\n")); } public function testDwManyDashes() { $this->assertSame(1, $this->countHrCalls('dokuwiki', "\n--------\n")); } public function testDwThreeDashesNotHr() { $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n---\n")); } public function testDwAsterisksNotHr() { $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n***\n")); $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n********\n")); } public function testDwUnderscoresNotHr() { $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n___\n")); $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n_____\n")); } public function testDwLeadingSpaceNotHr() { $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n ----\n")); } public function testDwTrailingSpaceNotHr() { $this->assertSame(0, $this->countHrCalls('dokuwiki', "\n---- \n")); } public function testDwInterruptsParagraph() { $this->setSyntax('dokuwiki'); $this->P->addMode('gfm_hr', new GfmHr()); $this->P->parse("Foo\n----\nBar"); $calls = [ ['document_start', []], ['p_open', []], ['cdata', ["\nFoo"]], ['p_close', []], ['hr', []], ['p_open', []], ['cdata', ["\nBar"]], ['p_close', []], ['document_end', []], ]; $this->assertCalls($calls, $this->H->calls); } // ------------------------------------------------------------------ // GFM flavor (any non-`dokuwiki` syntax setting) // ------------------------------------------------------------------ public function testMdDashes() { foreach (['markdown', 'dw+md', 'md+dw'] as $syntax) { $this->assertSame(1, $this->countHrCalls($syntax, "\n---\n"), "syntax=$syntax: bare `---` must produce hr"); } } public function testMdAsterisks() { foreach (['markdown', 'dw+md', 'md+dw'] as $syntax) { $this->assertSame(1, $this->countHrCalls($syntax, "\n***\n"), "syntax=$syntax: bare `***` must produce hr"); } } public function testMdUnderscores() { foreach (['markdown', 'dw+md', 'md+dw'] as $syntax) { $this->assertSame(1, $this->countHrCalls($syntax, "\n___\n"), "syntax=$syntax: bare `___` must produce hr"); } } public function testMdManyChars() { $this->assertSame(1, $this->countHrCalls('markdown', "\n--------\n")); $this->assertSame(1, $this->countHrCalls('markdown', "\n********\n")); $this->assertSame(1, $this->countHrCalls('markdown', "\n________\n")); } public function testMdTooFew() { $this->assertSame(0, $this->countHrCalls('markdown', "\n--\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n**\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n__\n")); } public function testMdInternalSpacesNotSupported() { $this->assertSame(0, $this->countHrCalls('markdown', "\n- - -\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n* * *\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n_ _ _\n")); } public function testMdLeadingSpaceNotSupported() { $this->assertSame(0, $this->countHrCalls('markdown', "\n ***\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n ---\n")); } public function testMdTrailingSpaceNotSupported() { $this->assertSame(0, $this->countHrCalls('markdown', "\n--- \n")); } public function testMdMixedChars() { $this->assertSame(0, $this->countHrCalls('markdown', "\n-*-\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n***---\n")); } public function testMdLetterMixed() { $this->assertSame(0, $this->countHrCalls('markdown', "\n---a\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\na---\n")); $this->assertSame(0, $this->countHrCalls('markdown', "\n---a---\n")); } public function testMdInterruptsParagraph() { $this->setSyntax('markdown'); $this->P->addMode('gfm_hr', new GfmHr()); $this->P->addMode('eol', new Eol()); $this->P->parse("Foo\n***\nbar"); $modes = array_column($this->H->calls, 0); $this->assertContains('hr', $modes, 'thematic break interrupts paragraph without blank line (spec 28)'); } // ------------------------------------------------------------------ // Common // ------------------------------------------------------------------ public function testSortValue() { $mode = new GfmHr(); $this->assertSame(160, $mode->getSort()); } }