Files
logseq/deps/graph-parser/test/logseq/graph_parser/text_test.cljs
Gabriel Horner 78506f22d0 Fix deftests that have confusing args that only apply to defn
Follow up to #8412 where we're accidentally copying
invalid forms from other tests
2023-01-30 10:56:06 -05:00

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)