commit 59afda34b00eacbf95c08d8156e59c2685c489b9
parent f34b590cea287b43b47f3337390082c30bfee23d
Author: Iqbal Ansari <iqbalansari02@yahoo.com>
Date: Sun, 1 Nov 2015 15:07:38 +0530
Initial set of tests
Diffstat:
A | emojify-tests.el | | | 164 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 164 insertions(+), 0 deletions(-)
diff --git a/emojify-tests.el b/emojify-tests.el
@@ -0,0 +1,164 @@
+;;; Code:
+
+(unless noninteractive
+ (let ((default-directory (expand-file-name ".cask/")))
+ (normal-top-level-add-subdirs-to-load-path)))
+
+(add-to-list 'load-path default-directory)
+
+(require 'emojify)
+(require 'ert)
+(require 'el-mock)
+(require 'cl)
+
+(defmacro emojify-tests-with-saved-custumizations (&rest forms)
+ "Run forms saving current customizations and restoring them on completion.
+
+Helps isolate tests from each other's customizations."
+ (declare (indent 0))
+ `(let ((emojify-saved-emoji-json emojify-emoji-json)
+ (emojify-saved-image-dir emojify-image-dir)
+ (emojify-saved-substitution-style emojify-substitution-style)
+ (emojify-saved-inhibit-major-modes emojify-inhibit-major-modes)
+ (emojify-saved-inhibit-in-buffer-functions emojify-inhibit-in-buffer-functions)
+ (emojify-saved-preferred-style emojify-preferred-style)
+ (emojify-saved-prog-contexts emojify-prog-contexts)
+ (emojify-saved-inhibit-functions emojify-inhibit-functions)
+ (emojify-saved-point-entered-behaviour emojify-point-entered-behaviour)
+ (emojify-saved-show-help emojify-show-help))
+ (unwind-protect
+ (progn
+ ,@forms)
+ (setq emojify-emoji-json emojify-saved-emoji-json
+ emojify-image-dir emojify-saved-image-dir
+ emojify-substitution-style emojify-saved-substitution-style
+ emojify-inhibit-major-modes emojify-saved-inhibit-major-modes
+ emojify-inhibit-in-buffer-functions emojify-saved-inhibit-in-buffer-functions
+ emojify-prog-contexts emojify-saved-prog-contexts
+ emojify-inhibit-functions emojify-saved-inhibit-functions
+ emojify-point-entered-behaviour emojify-saved-point-entered-behaviour
+ emojify-show-help emojify-saved-show-help)
+ ;; This as a side-effect also re-reads JSON data so no need to
+ ;; re-adjust changes to emojify-emoji-json
+ (emojify-set-preferred-style emojify-saved-preferred-style))))
+
+(defmacro emojify-tests-with-emojified-buffer (str &rest forms)
+ (declare (indent 1))
+ ;; Run tests in a new buffer
+ `(let ((test-buffer (get-buffer-create " *emojify-test-buffer*")))
+ (with-current-buffer test-buffer
+ ;; Rename it uniquely so that subsequent buffers do not conflict with it
+ (rename-uniquely)
+ ;; Save all possible customizations
+ (emojify-tests-with-saved-custumizations
+ (setq emojify-point-entered-behaviour nil)
+ (insert ,str)
+ (emojify-mode +1)
+ ;; Force refontification since JIT does it lazily
+ (emojify-display-emojis-in-region (point-min) (point-max))
+ (goto-char (point-min))
+ ,@forms))
+ ;; Keep the buffer around for interactive tests, helps debugging failing
+ ;; tests
+ (when noninteractive
+ (kill-buffer test-buffer))))
+
+(defmacro emojify-tests-with-emojified-static-buffer (str &rest forms)
+ (declare (indent 1))
+ `(emojify-tests-with-emojified-buffer ,str
+ (emojify-with-saved-buffer-state
+ ,@forms)))
+
+(defmacro emojify-tests-should-be-emojified (point)
+ `(progn
+ (should-not (get-text-property ,point 'point-left))
+ (should (get-text-property ,point 'emojified))
+ (should (get-text-property ,point 'emojify-buffer))
+ (should (get-text-property ,point 'emojify-start))
+ (should (get-text-property ,point 'emojify-end))
+ (should (get-text-property ,point 'emojify-text))
+ (should (get-text-property ,point 'display))
+ (should (get-text-property ,point 'point-entered))))
+
+(defmacro emojify-tests-should-not-be-emojified (point)
+ `(progn
+ (should-not (get-text-property ,point 'point-left))
+ (should-not (get-text-property ,point 'emojified))
+ (should-not (get-text-property ,point 'emojify-buffer))
+ (should-not (get-text-property ,point 'emojify-start))
+ (should-not (get-text-property ,point 'emojify-end))
+ (should-not (get-text-property ,point 'emojify-text))
+ (should-not (get-text-property ,point 'display))
+ (should-not (get-text-property ,point 'point-entered))))
+
+(defmacro emojify-tests-should-be-uncovered (point)
+ `(progn
+ (should (get-text-property ,point 'point-left))
+ (should (get-text-property ,point 'emojified))
+ (should-not (get-text-property ,point 'emojify-buffer))
+ (should-not (get-text-property ,point 'emojify-start))
+ (should-not (get-text-property ,point 'emojify-end))
+ (should-not (get-text-property ,point 'emojify-text))
+ (should-not (get-text-property ,point 'display))
+ (should-not (get-text-property ,point 'point-entered))))
+
+(ert-deftest emojify-tests-simple-ascii-emoji-test ()
+ (emojify-tests-with-emojified-static-buffer ":)"
+ (emojify-tests-should-be-emojified (point-min))
+ (should (equal (get-text-property (point-min) 'emojify-buffer) (current-buffer)))
+ (should (equal (get-text-property (point-min) 'emojify-start) (point-min)))
+ (should (equal (get-text-property (point-min) 'emojify-end) (1+ (length ":)"))))
+ (should (equal (get-text-property (point-min) 'emojify-text) ":)"))))
+
+(ert-deftest emojify-tests-simple-github-emoji-test ()
+ (emojify-tests-with-emojified-static-buffer ":smile:"
+ (emojify-tests-should-be-emojified (point-min))
+ (should (equal (get-text-property (point) 'emojify-buffer) (current-buffer)))
+ (should (equal (get-text-property (point-min) 'emojify-start) (point-min)))
+ (should (equal (get-text-property (point) 'emojify-end) (1+ (length ":smile:"))))
+ (should (equal (get-text-property (point) 'emojify-text) ":smile:"))))
+
+(ert-deftest emojify-tests-uncovering ()
+ (emojify-tests-with-emojified-buffer " :)"
+ (setq emojify-point-entered-behaviour 'uncover)
+ (goto-char (1+ (point-min)))
+ (emojify-tests-should-be-uncovered (point))))
+
+(ert-deftest emojify-tests-echoing ()
+ (emojify-tests-with-emojified-buffer " :)"
+ (with-mock
+ (mock (message ":)"))
+ (setq emojify-point-entered-behaviour 'echo)
+ (goto-char (1+ (point-min)))
+ (emojify-tests-should-be-emojified (point)))))
+
+(ert-deftest emojify-tests-emojify-setting-styles ()
+ (emojify-tests-with-emojified-static-buffer ":) :smile:"
+ (let ((ascii-emoji-pos (point-min))
+ (github-emoji-pos (+ (point-min) (length ":) "))))
+ (emojify-set-preferred-style 'github)
+
+ ;; Ascii emoji should not be displayed
+ (emojify-tests-should-not-be-emojified ascii-emoji-pos)
+
+ ;; Github emojis should be displayed
+ (emojify-tests-should-be-emojified github-emoji-pos)
+
+ (emojify-set-preferred-style 'ascii)
+
+ ;; Ascii emoji should be displayed
+ (emojify-tests-should-be-emojified ascii-emoji-pos)
+
+ ;; Github emojis should not be displayed
+ (emojify-tests-should-not-be-emojified github-emoji-pos)
+
+ (emojify-set-preferred-style 'all)
+
+ ;; Ascii emoji should not be displayed
+ (emojify-tests-should-be-emojified ascii-emoji-pos)
+
+ ;; Github emojis should be displayed
+ (emojify-tests-should-be-emojified github-emoji-pos))))
+
+(provide 'emojify-tests)
+;;; emojify-tests.el ends here