diff options
author | 2022-06-10 05:31:36 +0200 | |
---|---|---|
committer | 2022-06-09 22:31:36 -0500 | |
commit | 76fb01cff1002f2a37e93869378802156c4eca7c (patch) | |
tree | c20534f1f3ca5ecdc8d38ed3c4bda96710a3338a /packages/markdown/remark/test/autolinking.test.js | |
parent | 0e5bb2949be4479b36cad66b8d4dd471aef595e5 (diff) | |
download | astro-76fb01cff1002f2a37e93869378802156c4eca7c.tar.gz astro-76fb01cff1002f2a37e93869378802156c4eca7c.tar.zst astro-76fb01cff1002f2a37e93869378802156c4eca7c.zip |
Fix autolinking of URLs inside links in Markdown (#3564)
Diffstat (limited to 'packages/markdown/remark/test/autolinking.test.js')
-rw-r--r-- | packages/markdown/remark/test/autolinking.test.js | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/packages/markdown/remark/test/autolinking.test.js b/packages/markdown/remark/test/autolinking.test.js new file mode 100644 index 000000000..9224247e0 --- /dev/null +++ b/packages/markdown/remark/test/autolinking.test.js @@ -0,0 +1,96 @@ +import { renderMarkdown } from '../dist/index.js'; +import chai from 'chai'; + +describe('autolinking', () => { + it('autolinks URLs starting with a protocol in plain text', async () => { + const { code } = await renderMarkdown( + `See https://example.com for more.`, + {} + ); + + chai + .expect(code.replace(/\n/g, '')) + .to.equal(`<p>See <a href="https://example.com">https://example.com</a> for more.</p>`); + }); + + it('autolinks URLs starting with "www." in plain text', async () => { + const { code } = await renderMarkdown( + `See www.example.com for more.`, + {} + ); + + chai + .expect(code.trim()) + .to.equal(`<p>See <a href="http://www.example.com">www.example.com</a> for more.</p>`); + }); + + it('does not autolink URLs in code blocks', async () => { + const { code } = await renderMarkdown( + 'See `https://example.com` or `www.example.com` for more.', + {} + ); + + chai + .expect(code.trim()) + .to.equal(`<p>See <code is:raw>https://example.com</code> or ` + + `<code is:raw>www.example.com</code> for more.</p>`); + }); + + it('does not autolink URLs in fenced code blocks', async () => { + const { code } = await renderMarkdown( + 'Example:\n```\nGo to https://example.com or www.example.com now.\n```', + {} + ); + + chai + .expect(code) + .to.contain(`<pre is:raw`) + .to.contain(`Go to https://example.com or www.example.com now.`); + }); + + it('does not autolink URLs starting with a protocol when nested inside links', async () => { + const { code } = await renderMarkdown( + `See [http://example.com](http://example.com) or ` + + `<a test href="https://example.com">https://example.com</a>`, + {} + ); + + chai + .expect(code.replace(/\n/g, '')) + .to.equal( + `<p>See <a href="http://example.com">http://example.com</a> or ` + + `<a test href="https://example.com">https://example.com</a></p>` + ); + }); + + it('does not autolink URLs starting with "www." when nested inside links', async () => { + const { code } = await renderMarkdown( + `See [www.example.com](https://www.example.com) or ` + + `<a test href="https://www.example.com">www.example.com</a>`, + {} + ); + + chai + .expect(code.replace(/\n/g, '')) + .to.equal( + `<p>See <a href="https://www.example.com">www.example.com</a> or ` + + `<a test href="https://www.example.com">www.example.com</a></p>` + ); + }); + + it('does not autolink URLs when nested several layers deep inside links', async () => { + const { code } = await renderMarkdown( + `<a href="https://www.example.com">**Visit _our www.example.com or ` + + `http://localhost pages_ for more!**</a>`, + {} + ); + + chai + .expect(code.replace(/\n/g, '')) + .to.equal( + `<a href="https://www.example.com"><strong>` + + `Visit <em>our www.example.com or http://localhost pages</em> for more!` + + `</strong></a>` + ); + }); +}); |