]> code.delx.au - gnu-emacs-elpa/blobdiff - packages/company/company-tests.el
Merge branch 'master' of git+ssh://git.sv.gnu.org/srv/git/emacs/elpa
[gnu-emacs-elpa] / packages / company / company-tests.el
index 005bf3a544224e7fca03ef6c17de65c15e14545d..0663c71f9fef75159454d951d1565ae1cda9e5cc 100644 (file)
@@ -30,6 +30,9 @@
 (require 'company-keywords)
 (require 'company-clang)
 
+(defun company--column (&optional pos)
+  (car (company--col-row pos)))
+
 ;;; Core
 
 (ert-deftest company-sorted-keywords ()
         (let (this-command)
           (company-call 'complete))
         (company-call 'open-line 1)
-        (should (eq 2 (overlay-start company-pseudo-tooltip-overlay)))))))
+        (should (eq 1 (overlay-start company-pseudo-tooltip-overlay)))))))
 
 (ert-deftest company-pseudo-tooltip-show ()
   :tags '(interactive)
         ;; FIXME: Make it 2?
         (should (eq (overlay-get ov 'company-height) company-tooltip-limit))
         (should (eq (overlay-get ov 'company-column) col))
-        (should (string= (overlay-get ov 'company-after)
-                         "  123 \nc 45  c\nddd\n")))))))
+        (should (string= (overlay-get ov 'company-display)
+                         "\n  123 \nc 45  c\nddd\n")))))))
 
 (ert-deftest company-pseudo-tooltip-edit-updates-width ()
   :tags '(interactive)
       (let ((company-candidates-length 1)
             (company-candidates '("123")))
         (company-preview-show-at-point (point))
-        (let ((ov company-preview-overlay))
-          (should (string= (overlay-get ov 'display) "123\n")))))))
+        (let* ((ov company-preview-overlay)
+               (str (overlay-get ov 'after-string)))
+          (should (string= str "123"))
+          (should (eq (get-text-property 0 'cursor str) t)))))))
 
 (ert-deftest company-pseudo-tooltip-show-with-annotations ()
   :tags '(interactive)
         (let ((ov company-pseudo-tooltip-overlay))
           ;; With margins.
           (should (eq (overlay-get ov 'company-width) 8))
-          (should (string= (overlay-get ov 'company-after)
-                           " 123(4) \n 45     \n")))))))
+          (should (string= (overlay-get ov 'company-display)
+                           "\n 123(4) \n 45     \n")))))))
 
 (ert-deftest company-pseudo-tooltip-show-with-annotations-right-aligned ()
   :tags '(interactive)
         (let ((ov company-pseudo-tooltip-overlay))
           ;; With margins.
           (should (eq (overlay-get ov 'company-width) 13))
-          (should (string= (overlay-get ov 'company-after)
-                           " 123     (4) \n 45          \n 67 (891011) \n")))))))
+          (should (string= (overlay-get ov 'company-display)
+                           "\n 123     (4) \n 45          \n 67 (891011) \n")))))))
 
 (ert-deftest company-create-lines-shows-numbers ()
   (let ((company-show-numbers t)
                            (format " %s " (make-string (- ww 2) ?4)))
                      (company--create-lines 0 999))))))
 
+(ert-deftest company-create-lines-truncates-common-part ()
+  (let* ((ww (company--window-width))
+         (company-candidates-length 2)
+         (company-tooltip-margin 1)
+         (company-backend #'ignore))
+    (let* ((company-common (make-string (- ww 3) ?1))
+           (company-candidates `(,(concat company-common "2")
+                                 ,(concat company-common "3"))))
+      (should (equal (list (format " %s2 " (make-string (- ww 3) ?1))
+                           (format " %s3 " (make-string (- ww 3) ?1)))
+                     (company--create-lines 0 999))))
+    (let* ((company-common (make-string (- ww 2) ?1))
+           (company-candidates `(,(concat company-common "2")
+                                 ,(concat company-common "3"))))
+      (should (equal (list (format " %s " company-common)
+                           (format " %s " company-common))
+                     (company--create-lines 0 999))))
+    (let* ((company-common (make-string ww ?1))
+           (company-candidates `(,(concat company-common "2")
+                                 ,(concat company-common "3")))
+           (res (company--create-lines 0 999)))
+      (should (equal (list (format " %s " (make-string (- ww 2) ?1))
+                           (format " %s " (make-string (- ww 2) ?1)))
+                     res))
+      (should (eq 'company-tooltip-common-selection
+                    (get-text-property (- ww 2) 'face
+                                       (car res))))
+      (should (eq 'company-tooltip-selection
+                  (get-text-property (1- ww) 'face
+                                     (car res))))
+      )))
+
+(ert-deftest company-create-lines-clears-out-non-printables ()
+  :tags '(interactive)
+  (let (company-show-numbers
+        (company-candidates (list
+                             (decode-coding-string "avalis\351e" 'utf-8)
+                             "avatar"))
+        (company-candidates-length 2)
+        (company-backend 'ignore))
+    (should (equal '(" avalis‗e    "
+                     " avatar      ")
+                   (company--create-lines 0 999)))))
+
+(ert-deftest company-create-lines-handles-multiple-width ()
+  :tags '(interactive)
+  (let (company-show-numbers
+        (company-candidates '("蛙蛙蛙蛙" "蛙abc"))
+        (company-candidates-length 2)
+        (company-backend 'ignore))
+    (should (equal '(" 蛙蛙蛙蛙 "
+                     " 蛙abc    ")
+                   (company--create-lines 0 999)))))
+
 (ert-deftest company-column-with-composition ()
+  :tags '(interactive)
   (with-temp-buffer
-    (insert "lambda ()")
-    (compose-region 1 (1+ (length "lambda")) "\\")
-    (should (= (company--column) 4))))
+    (save-window-excursion
+      (set-window-buffer nil (current-buffer))
+      (insert "lambda ()")
+      (compose-region 1 (1+ (length "lambda")) "\\")
+      (should (= (company--column) 4)))))
 
 (ert-deftest company-column-with-line-prefix ()
+  :tags '(interactive)
+  (with-temp-buffer
+    (save-window-excursion
+      (set-window-buffer nil (current-buffer))
+      (insert "foo")
+      (put-text-property (point-min) (point) 'line-prefix "  ")
+      (should (= (company--column) 5)))))
+
+(ert-deftest company-column-with-line-prefix-on-empty-line ()
+  :tags '(interactive)
+  (with-temp-buffer
+    (save-window-excursion
+      (set-window-buffer nil (current-buffer))
+      (insert "\n")
+      (forward-char -1)
+      (put-text-property (point-min) (point-max) 'line-prefix "  ")
+      (should (= (company--column) 2)))))
+
+(ert-deftest company-column-with-tabs ()
+  :tags '(interactive)
   (with-temp-buffer
-    (insert "foo")
-    (put-text-property (point-min) (point) 'line-prefix "  ")
-    (should (= (company--column) 5))))
+    (save-window-excursion
+      (set-window-buffer nil (current-buffer))
+      (insert "|\t|\t|\t(")
+      (let ((tab-width 8))
+        (should (= (company--column) 25))))))
 
-(ert-deftest company-column-wth-line-prefix-on-empty-line ()
+(ert-deftest company-row-with-header-line-format ()
+  :tags '(interactive)
   (with-temp-buffer
-    (insert "\n")
-    (forward-char -1)
-    (put-text-property (point-min) (point-max) 'line-prefix "  ")
-    (should (= (company--column) 2))))
+    (save-window-excursion
+      (set-window-buffer nil (current-buffer))
+      (should (= (company--row) 0))
+      (setq header-line-format "aaaaaaa")
+      (should (= (company--row) 0)))))
 
 (ert-deftest company-plainify ()
   (let ((tab-width 8))
            (company-plainify (propertize "foobar" 'line-prefix "-*-"))
            "-*-foobar")))
 
+(ert-deftest company-buffer-lines-with-lines-folded ()
+  :tags '(interactive)
+  (with-temp-buffer
+    (insert (propertize "aaa\nbbb\nccc\nddd\n" 'display "aaa+\n"))
+    (insert "eee\nfff\nggg")
+    (should (equal (company-buffer-lines (point-min) (point-max))
+                   '("aaa" "eee" "fff" "ggg")))))
+
+(ert-deftest company-buffer-lines-with-multiline-display ()
+  :tags '(interactive)
+  (with-temp-buffer
+    (insert (propertize "a" 'display "bbb\nccc\ndddd\n"))
+    (insert "eee\nfff\nggg")
+    (should (equal (company-buffer-lines (point-min) (point-max))
+                   '("" "" "" "eee" "fff" "ggg")))))
+
 (ert-deftest company-modify-line ()
   (let ((str "-*-foobar"))
     (should (equal-including-properties
@@ -818,6 +920,19 @@ foo2"))
       (should (equal "foo(arg0, arg1)" (buffer-string)))
       (should (looking-at "arg0")))))
 
+(ert-deftest company-template-c-like-templatify-generics ()
+  (with-temp-buffer
+    (let ((text "foo<TKey, TValue>(int i, Dict<TKey, TValue>, long l)"))
+      (insert text)
+      (company-template-c-like-templatify text)
+      (should (equal "foo<arg0, arg1>(arg2, arg3, arg4)" (buffer-string)))
+      (should (looking-at "arg0"))
+      (should (equal "TKey" (overlay-get (company-template-field-at) 'display)))
+      (search-forward "arg3")
+      (forward-char -1)
+      (should (equal "Dict<TKey, TValue>"
+                     (overlay-get (company-template-field-at) 'display))))))
+
 ;;; Clang
 
 (ert-deftest company-clang-objc-templatify ()