* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\CommonMark\Tests\Functional\Extension\Autolink; use League\CommonMark\Environment\Environment; use League\CommonMark\Extension\Autolink\AutolinkExtension; use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension; use League\CommonMark\MarkdownConverter; use PHPUnit\Framework\TestCase; final class EmailAutolinkParserTest extends TestCase { /** * @dataProvider dataProviderForEmailAutolinks */ public function testEmailAutolinks(string $input, string $expected): void { $environment = new Environment(); $environment->addExtension(new CommonMarkCoreExtension()); $environment->addExtension(new AutolinkExtension()); $converter = new MarkdownConverter($environment); $this->assertEquals($expected, \trim((string) $converter->convert($input))); } /** * @return iterable> */ public function dataProviderForEmailAutolinks(): iterable { yield ['You can try emailing foo@example.com but that inbox doesn\'t actually exist.', '

You can try emailing foo@example.com but that inbox doesn\'t actually exist.

']; yield ['> This processor can even handle email addresses like foo@example.com inside of blockquotes!', "
\n

This processor can even handle email addresses like foo@example.com inside of blockquotes!

\n
"]; yield ['@invalid', '

@invalid

']; // GFM spec tests yield ['foo@bar.baz', '

foo@bar.baz

']; yield ['hello@mail+xyz.example isn\'t valid, but hello+xyz@mail.example is.', '

hello@mail+xyz.example isn\'t valid, but hello+xyz@mail.example is.

']; yield ['a.b-c_d@a.b', '

a.b-c_d@a.b

']; yield ['a.b-c_d@a.b.', '

a.b-c_d@a.b.

']; yield ['a.b-c_d@a.b-', '

a.b-c_d@a.b-

']; yield ['a.b-c_d@a.b_', '

a.b-c_d@a.b_

']; // Regression: CommonMark autolinks should not be double-linked yield ['', '

foo@example.com

']; yield ['[me@mydomain.com](mailto:me@mydomain.com)', '

me@mydomain.com

']; yield ['[email **me@mydomain.com**](mailto:me@mydomain.com)', '

email me@mydomain.com

']; } }