diff options
author | sterni <sternenseemann@systemli.org> | 2021-01-14T01·07+0100 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2021-01-25T21·02+0000 |
commit | 82e07fc046cff2151f9d18a003c6331202d58c8b (patch) | |
tree | c528dde5bed5899aa53fbc7bba761bf8abb23969 /web/panettone/test | |
parent | 7e408c874ac9b84f62bd48a3a6f2b57bae866d29 (diff) |
feat(panettone): render a subset of markdown in issue subjects r/2144
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 <grfn@gws.fyi> Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'web/panettone/test')
-rw-r--r-- | web/panettone/test/inline-markdown_test.lisp | 54 | ||||
-rw-r--r-- | web/panettone/test/package.lisp | 3 |
2 files changed, 56 insertions, 1 deletions
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 <em>world</em>, here is <del>no</del> <code>code</code>!") + +(inline-markdown-unit-test + inline-markdown-two-emphasize-types-test + "_stress_ *this*" + "<em>stress</em> <em>this</em>") + +(inline-markdown-unit-test + inline-markdown-html-escaping-test + "<tag>öäü" + "<tag>öäü") + +(inline-markdown-unit-test + inline-markdown-nesting-test + "`inside code *anything* goes`, but also ~~*here*~~" + "<code>inside code *anything* goes</code>, but also <del>*here*</del>") + +(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 \\\\`" + "<code>prevent `code` from ending, but never stand alone \\</code>") + +(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, <em>must be closed</em>") + +(inline-markdown-unit-test + inline-markdown-unicode-safe + "Does Unicode 👨👨👧👦 break \\👩🏾🦰 tokenization?" + "Does Unicode 👨‍👨‍👧‍👦 break \\👩🏾‍🦰 tokenization?") diff --git a/web/panettone/test/package.lisp b/web/panettone/test/package.lisp index 77ba1b00bb78..d2a2f974208e 100644 --- a/web/panettone/test/package.lisp +++ b/web/panettone/test/package.lisp @@ -1,2 +1,3 @@ (defpackage :panettone.tests - (:use :cl :klatre :fiveam)) + (:use :cl :klatre :fiveam + :panettone.inline-markdown)) |