242 lines
5.6 KiB
Scheme
242 lines
5.6 KiB
Scheme
;; Copyright (C) 2016, 2017 Erik Edrosa <erik.edrosa@gmail.com>
|
|
;;
|
|
;; This file is part of guile-commonmark
|
|
;;
|
|
;; guile-commonmark is free software: you can redistribute it and/or
|
|
;; modify it under the terms of the GNU Lesser General Public License
|
|
;; as published by the Free Software Foundation, either version 3 of
|
|
;; the License, or (at your option) any later version.
|
|
;;
|
|
;; guile-commonmark is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU Lesser General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU Lesser General Public License
|
|
;; along with guile-commonmark. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
(use-modules (srfi srfi-64)
|
|
(srfi srfi-1)
|
|
(srfi srfi-26)
|
|
(ice-9 match)
|
|
(commonmark blocks)
|
|
(tests utils))
|
|
|
|
(test-begin "blocks fenced-code")
|
|
|
|
(block-expect "parse-blocks, fenced code simple"
|
|
"```
|
|
<
|
|
>
|
|
```"
|
|
('document _
|
|
('fenced-code _ "<\n >")))
|
|
|
|
(block-expect "parse-blocks, fenced code simple with tildes"
|
|
"~~~
|
|
<
|
|
>
|
|
~~~"
|
|
('document _
|
|
('fenced-code _ "<\n >")))
|
|
|
|
(block-expect "parse-blocks, fenced code must use the same character as the opening"
|
|
"```
|
|
aaa
|
|
~~~
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa\n~~~")))
|
|
|
|
|
|
(block-expect "parse-blocks, fenced code must use the same character as the opening"
|
|
"~~~
|
|
aaa
|
|
```
|
|
~~~"
|
|
('document _
|
|
('fenced-code _ "aaa\n```")))
|
|
|
|
(block-expect "parse-blocks, fenced code closing fence must be at least as long as
|
|
the opening fence"
|
|
"````
|
|
aaa
|
|
```
|
|
``````"
|
|
('document _
|
|
('fenced-code _ "aaa\n```")))
|
|
|
|
(block-expect "parse-blocks, fenced code closing fence must be at least as long as
|
|
the opening fence"
|
|
"~~~~
|
|
aaa
|
|
~~~
|
|
~~~~"
|
|
('document _
|
|
('fenced-code _ "aaa\n~~~")))
|
|
|
|
(block-expect "parse-blocks, fenced code unclosed code blocks are closed by the end of
|
|
the document"
|
|
"```"
|
|
('document _
|
|
('fenced-code _)))
|
|
|
|
(block-expect "parse-blocks fenced code unclosed code blocks are closed by the end of
|
|
the document"
|
|
"`````
|
|
|
|
```
|
|
aaa"
|
|
('document _
|
|
('fenced-code _ "\n```\naaa")))
|
|
|
|
(block-expect "parse-blocks, fenced code unclosed code blocks are closed by the end of
|
|
block quote"
|
|
"> ```
|
|
> aaa
|
|
|
|
bbb"
|
|
('document _
|
|
('paragraph _ ('text _ "bbb"))
|
|
('block-quote _
|
|
('fenced-code _ "aaa"))))
|
|
|
|
(block-expect "parse-blocks, fenced code can have all empty lines as its content"
|
|
"```
|
|
|
|
|
|
```"
|
|
('document _
|
|
('fenced-code _ "\n ")))
|
|
|
|
(block-expect "parse-blocks, fenced code can be empty"
|
|
"```
|
|
```"
|
|
('document _
|
|
('fenced-code _)))
|
|
|
|
(block-expect "parse-blocks, fenced code can be indented with equivalent opening
|
|
indentation removed"
|
|
" ```
|
|
aaa
|
|
aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa\naaa")))
|
|
|
|
(block-expect "parse-blocks, fenced code can be indented with equivalent opening
|
|
indentation removed"
|
|
" ```
|
|
aaa
|
|
aaa
|
|
aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa\naaa\naaa")))
|
|
|
|
(block-expect "parse-blocks, fenced code can be indented with equivalent opening
|
|
indentation removed"
|
|
" ```
|
|
aaa
|
|
aaa
|
|
aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa\n aaa\naaa")))
|
|
|
|
(block-expect "parse-blocks, fenced code four spaces indentation produces code-block"
|
|
" ```
|
|
aaa
|
|
```"
|
|
('document _
|
|
('code-block _ "```\naaa\n```")))
|
|
|
|
(block-expect "parse-blocks, fenced code closing fence may be indented by 0-3 spaces
|
|
and does not need to match opening fence indentation"
|
|
"```
|
|
aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa")))
|
|
|
|
(block-expect "parse-blocks, fenced code closing fence may be indented by 0-3 spaces
|
|
and does not need to match opening fence indentation"
|
|
" ```
|
|
aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa")))
|
|
|
|
(block-expect "parse-blocks, fenced code not a closing fence because it is indented 4 spaces"
|
|
"```
|
|
aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "aaa\n ```")))
|
|
|
|
(block-expect "parse-blocks, fenced code fences cannot contain internal spaces"
|
|
"``` ```
|
|
aaa"
|
|
('document _
|
|
('paragraph _ ('text _ "``` ```\naaa"))))
|
|
|
|
(block-expect "parse-blocks, fenced code fences cannot contain internal spaces"
|
|
"~~~~~~
|
|
aaa
|
|
~~~ ~~~"
|
|
('document _
|
|
('fenced-code _ "aaa\n~~~ ~~~")))
|
|
|
|
(block-expect "parse-blocks, fenced code can interrupt paragraphs, and can be followed
|
|
by paragraphs, without a blank line between"
|
|
"foo
|
|
```
|
|
bar
|
|
```
|
|
baz"
|
|
('document _
|
|
('paragraph _ ('text _ "baz"))
|
|
('fenced-code _ "bar")
|
|
('paragraph _ ('text _ "foo"))))
|
|
|
|
(block-expect "parse-blocks, fenced code, other blocks can occur before and after fenced code
|
|
blocks without a blank line"
|
|
"foo
|
|
---
|
|
~~~
|
|
bar
|
|
~~~
|
|
# baz"
|
|
('document _
|
|
('heading _ ('text _ "baz"))
|
|
('fenced-code _ "bar")
|
|
('heading _ ('text _ "foo"))))
|
|
|
|
(block-expect "parse-blocks, fenced code info string"
|
|
"```ruby
|
|
def foo(x)
|
|
return 3
|
|
end
|
|
```"
|
|
('document _
|
|
('fenced-code code-data "def foo(x)\n return 3\nend"))
|
|
(info-string code-data) "ruby")
|
|
|
|
(block-expect "parse-blocks, fenced code info strings backtick code blocks cannot
|
|
contain backticks"
|
|
"``` aa ```
|
|
foo"
|
|
('document _
|
|
('paragraph _ ('text _ "``` aa ```\nfoo"))))
|
|
|
|
(block-expect "parse-blocks, fenced code closing fences cannot have info strings"
|
|
"```
|
|
``` aaa
|
|
```"
|
|
('document _
|
|
('fenced-code _ "``` aaa")))
|
|
|
|
(test-end)
|
|
|
|
(exit (= (test-runner-fail-count (test-runner-current)) 0))
|