Skip to content
Prev Previous commit
Next Next commit
Refactor clj-parse-test.
All tests are separated now.
  • Loading branch information
volrath committed Jul 5, 2017
commit a83816010e628d805c4c25d7a2a2c7a6d394394c
253 changes: 178 additions & 75 deletions clj-parse-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -25,81 +25,184 @@
(require 'clj-parse)
(require 'ert)

(ert-deftest clj-parse-test ()
(with-temp-buffer
(insert "(1 2 3)")
(goto-char 1)
(should (equal (clj-parse) '((1 2 3)))))

(with-temp-buffer
(insert "()")
(goto-char 1)
(should (equal (clj-parse) '(()))))

(with-temp-buffer
(insert "(1)")
(goto-char 1)
(should (equal (clj-parse) '((1)))))

(with-temp-buffer
(insert "(nil true false hello-world)")
(goto-char 1)
(should (equal (clj-parse) '((nil t nil hello-world)))))

(with-temp-buffer
(insert "clojure.string/join")
(goto-char 1)
(should (equal (clj-parse) '(clojure.string/join))))

(with-temp-buffer
(insert "((.9 abc (true) (hello)))")
(goto-char 1)
(should (equal (clj-parse) '(((0.9 abc (t) (hello)))))))

(with-temp-buffer
(insert "\"abc hello \\t\\\"x\"")
(goto-char 1)
(should (equal (clj-parse) '("abc hello \t\"x"))))

(with-temp-buffer
(insert "(\"---\\f---\\\"-'\\'-\\\\-\\r\\n\")")
(goto-char 1)
(should (equal (clj-parse) '(("---\f---\"-''-\\-\r\n")))))

(with-temp-buffer
(insert "(\\newline \\return \\space \\tab \\a \\b \\c \\u0078 \\o171)")
(goto-char 1)
(should (equal (clj-parse) '((?\n ?\r ?\ ?\t ?a ?b ?c ?x ?y)))))

(with-temp-buffer
(insert "\"\\u0078 \\o171\"")
(goto-char 1)
(should (equal (clj-parse) '("x y"))))

(with-temp-buffer
(insert ":foo-bar")
(goto-char 1)
(should (equal (clj-parse) '(:foo-bar))))

(with-temp-buffer
(insert "[123]")
(goto-char 1)
(should (equal (clj-parse) '([123]))))

(with-temp-buffer
(insert "{:count 123}")
(goto-char 1)
(should (equal (clj-parse) '(((:count . 123))))))

(with-temp-buffer
(insert "#{:x}")
(goto-char 1)
(should (equal (clj-parse) '((:x)))))

(with-temp-buffer
(insert "(10 #_11 12 #_#_ 13 14)")
(goto-char 1)
(should (equal (clj-parse) '((10 12))))))
(defmacro clj-parse-deftest (name parse-to-fn test-string expected)
(declare (indent defun))
`(ert-deftest ,name ()
(with-temp-buffer
(insert ,test-string)
(goto-char 1)
(should (equal (,parse-to-fn) ,expected)))))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of wrapping the whole ert-deftest in a macro I'm thinking it might be better to only have a macro for the inner part, and still use regular ert-deftest. I'm thinking of using the same approach for the integration tests in unrepl.el.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean the unrepl-deftest macro? It does include ert-deftest in it, I was actually copying it when I did this macro 😅, although I agree it's better if we just do the internal part. I'll fix it.



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; To Elisp code, ala edn.el

(clj-parse-deftest clj-parse-to-elisp-simple-list
clj-parse-to-elisp
"(1 2 3)"
'((1 2 3)))

(clj-parse-deftest clj-parse-to-elisp-empty-list
clj-parse-to-elisp
"()"
'(()))

(clj-parse-deftest clj-parse-to-elisp-list-size-1
clj-parse-to-elisp
"(1)"
'((1)))

(clj-parse-deftest clj-parse-to-elisp-leafs
clj-parse-to-elisp
"(nil true false hello-world)"
'((nil t nil hello-world)))

(clj-parse-deftest clj-parse-to-elisp-qualified-symbol
clj-parse-to-elisp
"clojure.string/join"
'(clojure.string/join))

(clj-parse-deftest clj-parse-to-elisp-nested-lists
clj-parse-to-elisp
"((.9 abc (true) (hello)))"
'(((0.9 abc (t) (hello)))))

(clj-parse-deftest clj-parse-to-elisp-strings-1
clj-parse-to-elisp
"\"abc hello \\t\\\"x\""
'("abc hello \t\"x"))

(clj-parse-deftest clj-parse-to-elisp-strings-2
clj-parse-to-elisp
"(\"---\\f---\\\"-'\\'-\\\\-\\r\\n\")"
'(("---\f---\"-''-\\-\r\n")))

(clj-parse-deftest clj-parse-to-elisp-chars-1
clj-parse-to-elisp
"(\\newline \\return \\space \\tab \\a \\b \\c \\u0078 \\o171)"
'((?\n ?\r ?\ ?\t ?a ?b ?c ?x ?y)))

(clj-parse-deftest clj-parse-to-elisp-chars-2
clj-parse-to-elisp
"\"\\u0078 \\o171\""
'("x y"))

(clj-parse-deftest clj-parse-to-elisp-keywords
clj-parse-to-elisp
":foo-bar"
'(:foo-bar))

(clj-parse-deftest clj-parse-to-elisp-vector
clj-parse-to-elisp
"[123]"
'([123]))

(clj-parse-deftest clj-parse-to-elisp-map
clj-parse-to-elisp
"{:count 123}"
'(((:count . 123))))

(clj-parse-deftest clj-parse-to-elisp-set
clj-parse-to-elisp
"#{:x}"
'((:x)))

(clj-parse-deftest clj-parse-to-elisp-discarded
clj-parse-to-elisp
"(10 #_11 12 #_#_ 13 14)"
'((10 12 14)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; To Clojure/EDN string

(clj-parse-deftest clj-parse-to-string-simple-list
clj-parse-to-string
"( 1 2 3)"
"(1 2 3)")

(clj-parse-deftest clj-parse-to-string-empty-list
clj-parse-to-string
"()"
"()")

(clj-parse-deftest clj-parse-to-string-list-size-1
clj-parse-to-string
"(1)"
"(1)")

(clj-parse-deftest clj-parse-to-string-leafs
clj-parse-to-string
"(nil true false hello-world)"
"(nil true false hello-world)")

(clj-parse-deftest clj-parse-to-string-qualified-symbol
clj-parse-to-string
"clojure.string/join"
"clojure.string/join")

(clj-parse-deftest clj-parse-to-string-nested-lists
clj-parse-to-string
"((.9 abc (true) (hello)))"
"((.9 abc (true) (hello)))")

(clj-parse-deftest clj-parse-to-string-strings-1
clj-parse-to-string
"\"abc hello \\t\\\"x\""
"\"abc hello \\t\\\"x\"")

(clj-parse-deftest clj-parse-to-string-strings-2
clj-parse-to-string
"(\"---\\f---\\\"-'\\'-\\\\-\\r\\n\")"
"(\"---\\f---\\\"-'\\'-\\\\-\\r\\n\")")

(clj-parse-deftest clj-parse-to-string-chars-1
clj-parse-to-string
"(\\newline \\return \\space \\tab \\a \\b \\c \\u0078 \\o171)"
"(\\newline \\return \\space \\tab \\a \\b \\c \\u0078 \\o171)")

(clj-parse-deftest clj-parse-to-string-chars-2
clj-parse-to-string
"\"\\u0078 \\o171\""
"\"\\u0078 \\o171\"")

(clj-parse-deftest clj-parse-to-string-keywords
clj-parse-to-string
":foo-bar"
":foo-bar")

(clj-parse-deftest clj-parse-to-string-vector
clj-parse-to-string
"[123]"
"[123]")

(clj-parse-deftest clj-parse-to-string-map
clj-parse-to-string
"{:count 123}"
"{:count 123}")

(clj-parse-deftest clj-parse-to-string-set
clj-parse-to-string
"#{:x}"
"#{:x}")

(clj-parse-deftest clj-parse-to-string-discarded
clj-parse-to-string
"(10 #_11 12 #_#_ 13 14)"
"(10 12 14)")


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AST

(clj-parse-deftest clj-parse-ast-simple-list
clj-parse
"(1 2 3)"
'((type . :root)
(subnodes . (((type . :list)
(subnodes . (((type . :number) (form . "1") (pos . 2))
((type . :number) (form . "2") (pos . 4))
((type . :number) (form . "3") (pos . 6)))))))))

(provide 'clj-parse-test)

Expand Down