From 82e07fc046cff2151f9d18a003c6331202d58c8b Mon Sep 17 00:00:00 2001 From: sterni Date: Thu, 14 Jan 2021 02:07:55 +0100 Subject: feat(panettone): render a subset of markdown in issue subjects This is achieved by implementing a simple markdown renderer in CL which has the following limitations: * Only supports inline `code`, *emphasize 1*, _emphasize 2_ and ~~strikethrough~~. * Does not support nested markup. This allows for a relatively simple renderer which doesn't need to parse markdown into a in-memory data structure first. The rendered result is directly written to a stream to integrate well with cl-who which is also reused for rendering tags and xml-escaping strings. Fixes #90. Change-Id: Ice88ed770b1fab6365f3b93e8663e25077befa0b Reviewed-on: https://cl.tvl.fyi/c/depot/+/2389 Tested-by: BuildkiteCI Reviewed-by: glittershark Reviewed-by: tazjin --- web/panettone/test/inline-markdown_test.lisp | 54 ++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 web/panettone/test/inline-markdown_test.lisp (limited to 'web/panettone/test/inline-markdown_test.lisp') diff --git a/web/panettone/test/inline-markdown_test.lisp b/web/panettone/test/inline-markdown_test.lisp new file mode 100644 index 000000000000..2b6c3b89002c --- /dev/null +++ b/web/panettone/test/inline-markdown_test.lisp @@ -0,0 +1,54 @@ +(in-package :panettone.tests) +(declaim (optimize (safety 3))) + +(defmacro inline-markdown-unit-test (name input expected) + `(test ,name + (is (equal + ,expected + (with-output-to-string (*standard-output*) + (render-inline-markdown ,input)))))) + +(inline-markdown-unit-test + inline-markdown-typical-test + "hello _world_, here is ~~no~~ `code`!" + "hello world, here is no code!") + +(inline-markdown-unit-test + inline-markdown-two-emphasize-types-test + "_stress_ *this*" + "stress this") + +(inline-markdown-unit-test + inline-markdown-html-escaping-test + "âÀü" + "<tag>öäü") + +(inline-markdown-unit-test + inline-markdown-nesting-test + "`inside code *anything* goes`, but also ~~*here*~~" + "inside code *anything* goes, but also *here*") + +(inline-markdown-unit-test + inline-markdown-escaping-test + "A backslash \\\\ shows: \\*, \\_, \\` and \\~~" + "A backslash \\ shows: *, _, ` and ~~") + +(inline-markdown-unit-test + inline-markdown-nested-escaping-test + "`prevent \\`code\\` from ending, but never stand alone \\\\`" + "prevent `code` from ending, but never stand alone \\") + +(inline-markdown-unit-test + inline-markdown-escape-normal-tokens-test + "\\Normal tokens \\escaped?" + "\\Normal tokens \\escaped?") + +(inline-markdown-unit-test + inline-markdown-no-unclosed-tags-test + "A tag, once opened, _must be closed" + "A tag, once opened, must be closed") + +(inline-markdown-unit-test + inline-markdown-unicode-safe + "Does Unicode πŸ‘¨β€πŸ‘¨β€πŸ‘§β€πŸ‘¦ break \\πŸ‘©πŸΎβ€πŸ¦° tokenization?" + "Does Unicode 👨‍👨‍👧‍👦 break \\👩🏾‍🦰 tokenization?") -- cgit 1.4.1