Add tests to confirm property completion fix

Move current-line to specific clause for performance as fn is run on every keystroke
pull/6193/head
Gabriel Horner 2022-08-03 14:49:37 -04:00 committed by Tienson Qin
parent d12437722d
commit b66ec9cd9f
2 changed files with 36 additions and 4 deletions

View File

@ -1827,8 +1827,7 @@
pos (cursor/pos input)
last-input-char (util/nth-safe (.-value input) (dec pos))
last-prev-input-char (util/nth-safe (.-value input) (dec (dec pos)))
prev-prev-input-char (util/nth-safe (.-value input) (- pos 3))
current-line (text-util/get-current-line-by-pos (.-value input) (dec pos))]
prev-prev-input-char (util/nth-safe (.-value input) (- pos 3))]
;; TODO: is it cross-browser compatible?
;; (not= (gobj/get native-e "inputType") "insertFromPaste")
@ -1855,8 +1854,9 @@
(and
(not= :property-search (state/get-editor-action))
(or (text-util/wrapped-by? current-line (dec pos) "" "::")
(text-util/wrapped-by? current-line (dec pos) "\n" "::")))
(let [current-line (text-util/get-current-line-by-pos (.-value input) (dec pos))]
(or (text-util/wrapped-by? current-line (dec pos) "" "::")
(text-util/wrapped-by? current-line (dec pos) "\n" "::"))))
(do
(state/set-editor-action-data! {:pos (cursor/get-caret-pos input)})
(state/set-editor-action! :property-search))

View File

@ -116,3 +116,35 @@
"TODO" "TODO content" "DOING content"
"TODO" "## TODO content" "## DOING content"
"DONE" "DONE content" "content"))
(defn- handle-last-input-handler
"Spied version of editor/keydown-not-matched-handler"
[{:keys [value cursor-pos]}]
;; Reset editor action in order to test result
(state/set-editor-action! nil)
;; Default cursor pos to end of line
(let [pos (or cursor-pos (count value))]
(with-redefs [state/get-input (constantly #js {:value value})
cursor/pos (constantly pos)
cursor/move-cursor-backward (constantly nil) ;; ignore if called
cursor/get-caret-pos (constantly {})]
(editor/handle-last-input))))
(deftest handle-last-input-handler-test
(testing "Property autocompletion"
(handle-last-input-handler {:value "::"})
(is (= :property-search (state/get-editor-action))
"Autocomplete properties if only colons have been typed")
(handle-last-input-handler {:value "foo::bar\n::"})
(is (= :property-search (state/get-editor-action))
"Autocomplete properties if typing colons on a second line")
(handle-last-input-handler {:value "middle of line::"})
(is (= nil (state/get-editor-action))
"Don't autocomplete properties if typing colons in the middle of a line")
(handle-last-input-handler {:value "first \nfoo::bar"
:cursor-pos (dec (count "first "))})
(is (= nil (state/get-editor-action))
"Don't autocomplete properties if typing in a block where properties already exist")))