aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-01-26 21:28:41 -0500
committerGravatar Peter McGoron 2025-01-26 21:28:41 -0500
commite8a6901bbc35d622e47c4927cf80e1f7a70f3ee7 (patch)
tree53807268b4e57487870b42eca0ff02abc65cf047
parentremove unordered list containers (diff)
parsing tests
-rw-r--r--market/string.scm6
-rw-r--r--market/string.sld2
-rw-r--r--tests/run.scm143
3 files changed, 150 insertions, 1 deletions
diff --git a/market/string.scm b/market/string.scm
index 236ba8b..9d733ca 100644
--- a/market/string.scm
+++ b/market/string.scm
@@ -128,3 +128,9 @@
(define (line->xstring line)
(string->xstring (line->string line)))
+
+(define (xstring->generator xstr)
+ (make-rope-iterator (xstring-rope xstr)))
+
+(define (xstring->string xstr)
+ (rope->string (xstring-rope xstr)))
diff --git a/market/string.sld b/market/string.sld
index 73f231d..0895993 100644
--- a/market/string.sld
+++ b/market/string.sld
@@ -23,6 +23,6 @@
(export string->line empty-line
empty-line? line-ref line-next line->string line-prefix
line-member
- string->xstring
+ string->xstring xstring->generator xstring->string
xstring? xstring-append! line->xstring)
(include "string.scm")) \ No newline at end of file
diff --git a/tests/run.scm b/tests/run.scm
new file mode 100644
index 0000000..ef1c172
--- /dev/null
+++ b/tests/run.scm
@@ -0,0 +1,143 @@
+#| Copyright 2024 Peter McGoron
+ |
+ | Licensed under the Apache License, Version 2.0 (the "License");
+ |
+ | you may not use this file except in compliance with the License.
+ | You may obtain a copy of the License at
+ |
+ | http://www.apache.org/licenses/LICENSE-2.0
+ |
+ | Unless required by applicable law or agreed to in writing, software
+ | distributed under the License is distributed on an "AS IS" BASIS,
+ | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ | See the License for the specific language governing permissions and
+ | limitations under the License.
+ |#
+
+(load "../mcgoron/srfi/61.sld")
+(load "../market/string.sld")
+(load "../market/blocks.sld")
+(load "../market/default.sld")
+
+(import (prefix (only (mcgoron srfi 64) factory)
+ mcgoron-test-)
+ (srfi 64) (srfi 197) (srfi 117))
+(import (market default) (market string) (market blocks))
+
+(test-runner-factory mcgoron-test-factory)
+(test-runner-current (test-runner-create))
+
+(test-group "paragraphs"
+ (let ((str
+ (chain (parse->document "hello, world" #f)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (xstring->string _))))
+ (test-equal "single line" str "hello, world\n"))
+ (let ((str
+ (chain (parse->document "hello," #f)
+ (parse->document "world" _)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (xstring->string _))))
+ (test-equal "two lines" str "hello,\nworld\n"))
+ (test-group "two paragraphs"
+ (let ((children
+ (chain (parse->document "hello" #f)
+ (parse->document "" _)
+ (parse->document "world" _)
+ (node-children _)
+ (list-queue-list _))))
+ (test-equal "first paragraph"
+ (xstring->string (list-ref children 0))
+ "hello\n")
+ (test-equal "second paragraph"
+ (xstring->string (list-ref children 1))
+ "world\n"))))
+
+(test-group "block quotes"
+ (test-group "single line"
+ (let ((block (chain (parse->document "> hello, world" #f)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0))))
+ (test-assert "block-quote?" (block-quote? block))
+ (let ((str (chain (node-children block)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (xstring->string _))))
+ (test-equal "string" str "hello, world\n"))))
+ (let ((str (chain (parse->document "> hello," #f)
+ (parse->document "> world" _)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (xstring->string _))))
+ (test-equal "two lines" str "hello,\nworld\n"))
+ (test-group "multiple paragraphs"
+ (let ((lst (chain (parse->document "> hello" #f)
+ (parse->document "> " _)
+ (parse->document "> world" _)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (node-children _)
+ (list-queue-list _))))
+ (test-equal "first paragraph"
+ (xstring->string (list-ref lst 0))
+ "hello\n")
+ (test-equal "second paragraph"
+ (xstring->string (list-ref lst 1))
+ "world\n")))
+ (test-group "interrupted"
+ (let ((lst (chain (parse->document "> hello, world" #f)
+ (parse->document "outside of a block quote" _)
+ (node-children _)
+ (list-queue-list _))))
+ (test-assert "first is block quote"
+ (block-node? (list-ref lst 0)))
+ (let ((quote-paragraph (chain (list-ref lst 0)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (xstring->string _))))
+ (test-equal "block quote paragraph"
+ "hello, world\n"
+ quote-paragraph))
+ (test-assert "second is paragraph"
+ (xstring? (list-ref lst 1)))
+ (test-equal "second paragraph"
+ "outside of a block quote\n"
+ (xstring->string (list-ref lst 1)))))
+ (test-group "two nested with spaces"
+ (define block
+ (chain (parse->document "> > hello, world" #f)
+ (parse->document "> > continuing nested" _)
+ (parse->document "> outside of the block quote" _)
+ (node-children _)
+ (list-queue-list _)
+ (list-ref _ 0)))
+ (test-assert "first block quote"
+ (block-quote? block))
+ (test-equal "first block quote second paragraph"
+ "outside of the block quote\n"
+ (chain (node-children block)
+ (list-queue-list _)
+ (list-ref _ 1)
+ (xstring->string _)))
+ (set! block
+ (chain (node-children block)
+ (list-queue-list _)
+ (list-ref _ 0)))
+ (test-assert "second block quote" (block-quote? block))
+ (test-equal "second block quote paragraph"
+ "hello, world\ncontinuing nested\n"
+ (chain (node-children block)
+ (list-queue-list _)
+ (list-ref _ 0)
+ (xstring->string _)))))