mirror of
https://github.com/logseq/logseq.git
synced 2026-05-29 15:09:41 +00:00
118 lines
4.7 KiB
Clojure
118 lines
4.7 KiB
Clojure
(ns logseq.graph-parser.text-test
|
|
(:require [cljs.test :refer [are deftest testing]]
|
|
[logseq.graph-parser.text :as text]
|
|
[logseq.graph-parser.mldoc :as gp-mldoc]))
|
|
|
|
(deftest test-get-page-name
|
|
(are [x y] (= (text/get-page-name x) y)
|
|
"[[page]]" "page"
|
|
"[[another page]]" "another page"
|
|
"[single bracket]" nil
|
|
"no brackets" nil
|
|
|
|
"[[another page]]" "another page"
|
|
"[[nested [[page]]]]" "nested [[page]]"
|
|
|
|
"[[file:./page.org][page]]" "page"
|
|
"[[file:./pages/page.org][page]]" "page"
|
|
|
|
"[[file:./namespace.page.org][namespace/page]]" "namespace/page"
|
|
"[[file:./pages/namespace.page.org][namespace/page]]" "namespace/page"
|
|
"[[file:./pages/namespace.page.org][please don't change me]]" "namespace/page"
|
|
|
|
"[page](file:./page.md)" "page"
|
|
"[page](file:.pages/page.md)" "page"
|
|
|
|
"[logseq/page](file:./logseq.page.md)" "logseq/page"
|
|
"[logseq/page](file:./pages/logseq.page.md)" "logseq/page"))
|
|
|
|
(deftest page-ref-un-brackets!
|
|
(are [x y] (= (text/page-ref-un-brackets! x) y)
|
|
"[[page]]" "page"
|
|
"[[another page]]" "another page"
|
|
"[[nested [[page]]]]" "nested [[page]]"
|
|
"[single bracket]" "[single bracket]"
|
|
"no brackets" "no brackets"))
|
|
|
|
(def block-patterns
|
|
{:markdown "-"
|
|
:org "*"})
|
|
|
|
(deftest remove-level-spaces
|
|
(testing "markdown"
|
|
(are [x y] (= (text/remove-level-spaces x :markdown (block-patterns :markdown) true) y)
|
|
"- foobar" "foobar"
|
|
" - foobar" "foobar"))
|
|
(testing "markdown without spaces between the `#` and title"
|
|
(are [x y] (= (text/remove-level-spaces x :markdown (block-patterns :markdown)) y)
|
|
"-foobar" "foobar"))
|
|
(testing "org"
|
|
(are [x y] (= (text/remove-level-spaces x :org (block-patterns :org) true) y)
|
|
"* foobar" "foobar"
|
|
"** foobar" "foobar"
|
|
"********************* foobar" "foobar"))
|
|
(testing "org without spaces between the `#` and title"
|
|
(are [x y] (= (text/remove-level-spaces x :org (block-patterns :org)) y)
|
|
"*foobar" "foobar"
|
|
"**foobar" "foobar"
|
|
"*********************foobar" "foobar")))
|
|
|
|
(defn- parse-property
|
|
[k v user-config]
|
|
(let [references (gp-mldoc/get-references v (gp-mldoc/default-config :markdown))]
|
|
(text/parse-property k v references user-config)))
|
|
|
|
(deftest test-parse-property
|
|
(testing "for default comma separated properties"
|
|
(are [k v y] (= (parse-property k v {}) y)
|
|
:tags "foo" #{"foo"}
|
|
:tags "comma, separated" #{"comma" "separated"}
|
|
:alias "one, two, one" #{"one" "two"}))
|
|
|
|
(testing "for user comma separated properties"
|
|
(are [k v y] (= (parse-property k v {:property/separated-by-commas #{:comma-prop}}) y)
|
|
:comma-prop "foo" #{"foo"}
|
|
:comma-prop "comma, separated" #{"comma" "separated"}
|
|
:comma-prop "one, two, one" #{"one" "two"}))
|
|
|
|
(testing "for user comma separated properties with mixed values"
|
|
(are [k v y] (= (parse-property k v {:property/separated-by-commas #{:comma-prop}}) y)
|
|
:comma-prop "foo, #bar" #{"foo", "bar"}
|
|
:comma-prop "comma, separated, [[page ref]], [[nested [[page]]]], #[[nested [[tag]]]], end" #{"page ref" "nested [[page]]" "nested [[tag]]" "comma" "separated" "end"}))
|
|
|
|
(testing "for normal properties"
|
|
(are [k v y] (= (parse-property k v {}) y)
|
|
:normal "[[foo]] [[bar]]" #{"foo" "bar"}
|
|
:normal "[[foo]], [[bar]]" #{"foo" "bar"}
|
|
:normal "[[foo]]" #{"foo"}
|
|
:normal "[[foo]], [[bar]], #baz" #{"foo" "bar" "baz"}
|
|
:normal "[[foo [[bar]]]]" #{"foo [[bar]]"}
|
|
:normal "[[foo [[bar]]]], [[baz]]" #{"baz" "foo [[bar]]"}
|
|
:title "comma, is ok" "comma, is ok"))
|
|
|
|
(testing "for tags in properties with punctuation"
|
|
(are [k v y] (= (parse-property k v {}) y)
|
|
:prop "#foo, #bar. #baz!" #{"foo" "bar" "baz"}
|
|
:prop "#foo: '#bar'" #{"foo" "bar"}))
|
|
|
|
(testing "parse-property with quoted strings"
|
|
(are [k v y] (= (parse-property k v {}) y)
|
|
:tags "\"foo, bar\"" "\"foo, bar\""
|
|
:tags "\"[[foo]], [[bar]]\"" "\"[[foo]], [[bar]]\""))
|
|
|
|
(testing "parse title property with square bracket"
|
|
(are [k v y] (= (parse-property k v {}) y)
|
|
:title "[[Jan 11th, 2022]] 21:26" "[[Jan 11th, 2022]] 21:26"
|
|
:title "[[[[aldsfkd]] a.b/c.d]]" "[[[[aldsfkd]] a.b/c.d]]"))
|
|
|
|
(testing "built-in properties parse as expected"
|
|
(are [k v y] (= (parse-property k v {}) y)
|
|
:id "62e98716-9c0b-4253-83e7-7f8e8a23fe19" "62e98716-9c0b-4253-83e7-7f8e8a23fe19"
|
|
:filters "{\"product process\" true}" "{\"product process\" true}"
|
|
:collapsed "false" false
|
|
:created-at "1609233702047" 1609233702047
|
|
:background-color "#533e7d" "#533e7d")))
|
|
|
|
|
|
#_(cljs.test/test-ns 'logseq.graph-parser.text-test)
|