P->addMode('gfm_html_entity', new GfmHtmlEntity()); $this->P->parse($input); $this->assertCalls([ ['document_start', []], ['p_open', []], ['cdata', [$expectedCdata]], ['p_close', []], ['document_end', []], ], $this->H->calls); } public function testDecimalAscii() { $this->assertParsedCdata('x # y', "\nx # y"); } public function testDecimalMultibyte() { $this->assertParsedCdata('aӒb', "\na\u{04D2}b"); } public function testHexLowercase() { $this->assertParsedCdata('aಫb', "\na\u{0CAB}b"); } public function testHexUppercase() { $this->assertParsedCdata('aആb', "\na\u{0D06}b"); } public function testHexQuoteCharacter() { $this->assertParsedCdata('a"b', "\na\"b"); } public function testZeroMapsToReplacement() { $this->assertParsedCdata('a�b', "\na\u{FFFD}b"); } public function testSurrogateMapsToReplacement() { $this->assertParsedCdata('a�b', "\na\u{FFFD}b"); } public function testMaxValidCodepoint() { $this->assertParsedCdata('a􏿿b', "\na" . Unicode::toUtf8([0x10FFFF]) . 'b'); } public function testNonEntityTooManyDecimalDigitsStaysLiteral() { $this->assertParsedCdata('a�b', "\na�b"); } public function testNonEntityHexLetterAfterAmpStaysLiteral() { $this->assertParsedCdata('a&#abcdef0;b', "\na&#abcdef0;b"); } public function testEmptyEntityStaysLiteral() { $this->assertParsedCdata('a&#;b', "\na&#;b"); } public function testMissingSemicolonStaysLiteral() { $this->assertParsedCdata('a# b', "\na# b"); } public function testMultipleNumericEntitiesInSequence() { $this->assertParsedCdata('#Ӓಫ', "\n#\u{04D2}\u{0CAB}"); } public function testTabDecodes() { $this->assertParsedCdata('a b', "\na\tb"); } public function testNewlineDecodes() { $this->assertParsedCdata('foo bar', "\nfoo\n\nbar"); } public function testNamedAmp() { // & decodes to '&', renderer re-escapes on output $this->assertParsedCdata('a&b', "\na&b"); } public function testNamedCopy() { $this->assertParsedCdata('a©b', "\na\u{00A9}b"); } public function testNamedAElig() { $this->assertParsedCdata('aÆb', "\na\u{00C6}b"); } public function testNamedNbsp() { $this->assertParsedCdata('a b', "\na\u{00A0}b"); } public function testNamedMultiCodepoint() { // ≧̸ -> U+2267 + U+0338 (combining solidus) $this->assertParsedCdata('a≧̸b', "\na\u{2267}\u{0338}b"); } public function testNamedUnknownStaysLiteral() { $this->assertParsedCdata('a&MadeUpEntity;b', "\na&MadeUpEntity;b"); } public function testNamedNoSemicolonStaysLiteral() { $this->assertParsedCdata('a© b', "\na© b"); } public function testMixedNumericAndNamed() { $this->assertParsedCdata('#©"', "\n#\u{00A9}\""); } }