summaryrefslogtreecommitdiff
path: root/packages/markdown/remark/test/autolinking.test.js
diff options
context:
space:
mode:
authorGravatar hippotastic <6137925+hippotastic@users.noreply.github.com> 2022-06-10 05:31:36 +0200
committerGravatar GitHub <noreply@github.com> 2022-06-09 22:31:36 -0500
commit76fb01cff1002f2a37e93869378802156c4eca7c (patch)
treec20534f1f3ca5ecdc8d38ed3c4bda96710a3338a /packages/markdown/remark/test/autolinking.test.js
parent0e5bb2949be4479b36cad66b8d4dd471aef595e5 (diff)
downloadastro-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.js96
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>`
+ );
+ });
+});