emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/javaimp 8f97478e0f: Add tests for javaimp-parse-get-enc


From: Filipp Gunbin
Subject: [elpa] externals/javaimp 8f97478e0f: Add tests for javaimp-parse-get-enclosing-scope
Date: Tue, 3 May 2022 12:50:01 -0400 (EDT)

branch: externals/javaimp
commit 8f97478e0fa1e3009bf308bd7178e9635d2d3477
Author: Filipp Gunbin <fgunbin@fastmail.fm>
Commit: Filipp Gunbin <fgunbin@fastmail.fm>

    Add tests for javaimp-parse-get-enclosing-scope
---
 tests/parse.el | 104 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 83 insertions(+), 21 deletions(-)

diff --git a/tests/parse.el b/tests/parse.el
index f8d8706f5d..62f6abd180 100644
--- a/tests/parse.el
+++ b/tests/parse.el
@@ -175,36 +175,35 @@ throws E1 {"
 
 ;; Tests for parse api
 
-(defun javaimp-test-parse--check-defuns ()
+(defun javaimp-test-parse--get-all-scopes-defuns ()
   (let* ((scopes (javaimp-parse-get-all-scopes
                   nil nil
                   (lambda (s)
-                    (memq (javaimp-scope-type s) '(class interface enum 
method)))
+                    (memq (javaimp-scope-type s)
+                          '(class interface enum method)))
                   (lambda (s)
-                    (memq (javaimp-scope-type s) '(class interface enum 
method)))))
-         (actual (mapcar
-                  (lambda (s)
-                    (let (res)
-                      (while s
-                        (push (list (javaimp-scope-type s)
-                                    (javaimp-scope-name s))
-                              res)
-                        (setq s (javaimp-scope-parent s)))
-                      (nreverse res)))
-                  scopes))
+                    (memq (javaimp-scope-type s)
+                          '(class interface enum method)))))
+         (actual (mapcar #'javaimp-test-parse--simplify-scope scopes))
          (expected
           '(((class "Top"))
+
             ((class "CInner1") (class "Top"))
+
             ((method "foo()") (class "CInner1") (class "Top"))
+
             ((class "CInner1_CLocal1")
              (method "foo()") (class "CInner1") (class "Top"))
+
             ((method "foo()")
              (class "CInner1_CLocal1")
              (method "foo()") (class "CInner1") (class "Top"))
+
             ((class "CInner1_CLocal1_CLocal1")
              (method "foo()")
              (class "CInner1_CLocal1")
              (method "foo()") (class "CInner1") (class "Top"))
+
             ((method "foo()")
              (class "CInner1_CLocal1_CLocal1")
              (method "foo()")
@@ -213,6 +212,7 @@ throws E1 {"
 
             ((class "CInner1_CLocal2")
              (method "foo()") (class "CInner1") (class "Top"))
+
             ((method "foo()")
              (class "CInner1_CLocal2")
              (method "foo()") (class "CInner1") (class "Top"))
@@ -221,46 +221,64 @@ throws E1 {"
              (class "CInner1") (class "Top"))
 
             ((class "CInner1_CInner1") (class "CInner1") (class "Top"))
+
             ((method "foo()")
              (class "CInner1_CInner1") (class "CInner1") (class "Top"))
+
             ((method "bar()")
              (class "CInner1_CInner1") (class "CInner1") (class "Top"))
 
             ((interface "IInner1") (class "Top"))
+
             ((method "foo()") (interface "IInner1") (class "Top"))
+
             ((class "IInner1_CInner1") (interface "IInner1") (class "Top"))
+
             ((method "foo()")
              (class "IInner1_CInner1") (interface "IInner1") (class "Top"))
+
             ((method "defaultMethod(String)")
              (interface "IInner1") (class "Top"))
 
             ((interface "IInner1_IInner1") (interface "IInner1") (class "Top"))
+
             ((method "defaultMethod(String)")
              (interface "IInner1_IInner1") (interface "IInner1") (class "Top"))
 
             ((enum "EnumInner1") (class "Top"))
+
             ((method "EnumInner1()") (enum "EnumInner1") (class "Top"))
+
             ((method "foo()") (enum "EnumInner1") (class "Top"))
+
             ((enum "EnumInner1_EInner1") (enum "EnumInner1") (class "Top"))
 
             ((class "ColocatedTop"))
+
             ((method "foo()") (class "ColocatedTop"))
+
             ((method "bar(String,String)") (class "ColocatedTop")))))
     (should (= (length expected) (length actual)))
     (dotimes (i (length expected))
       (should (equal (nth i expected) (nth i actual))))
-    ;;
+    ;; selectively check positions
     (let ((data
-         `((,(nth 0 scopes) "Top" 26 36)
-           (,(nth 16 scopes) "foo()" 1798 1804)
-           (,(nth 23 scopes) "EnumInner1_EInner1" 2462 2486)
-           (,(nth 25 scopes) "foo()" 2554 2560))))
+           `((,(nth 0 scopes) "Top" 26 36)
+             (,(nth 16 scopes) "foo()" 1798 1804)
+             (,(nth 23 scopes) "EnumInner1_EInner1" 2462 2486)
+             (,(nth 25 scopes) "foo()" 2554 2560))))
       (dolist (elt data)
         (let ((scope (nth 0 elt)))
           (should (equal (nth 1 elt) (javaimp-scope-name scope)))
           (should (equal (nth 2 elt) (javaimp-scope-start scope)))
           (should (equal (nth 3 elt) (javaimp-scope-open-brace scope))))))))
 
+(defun javaimp-test-parse--simplify-scope (s)
+  (let (res)
+    (while s
+      (push (list (javaimp-scope-type s) (javaimp-scope-name s)) res)
+      (setq s (javaimp-scope-parent s)))
+    (nreverse res)))
 
 (ert-deftest javaimp-parse-get-package ()
   (with-temp-buffer
@@ -303,14 +321,58 @@ import static some_class.fun_2; // comment
     (should-not javaimp-parse--dirty-pos)
     ;;
     ;; parse full buffer
-    (javaimp-test-parse--check-defuns)
+    (javaimp-test-parse--get-all-scopes-defuns)
     (should javaimp-parse--dirty-pos)
     (should-not (marker-position javaimp-parse--dirty-pos))
     ;;
     ;; reparse half of the buffer
     (set-marker javaimp-parse--dirty-pos (/ (- (point-max) (point-min)) 2))
-    (javaimp-test-parse--check-defuns)
+    (javaimp-test-parse--get-all-scopes-defuns)
     (should-not (marker-position javaimp-parse--dirty-pos))
     ;;
     ;; don't reparse
-    (javaimp-test-parse--check-defuns)))
+    (javaimp-test-parse--get-all-scopes-defuns)))
+
+(ert-deftest javaimp-parse-get-enclosing-scope ()
+  (let ((testcases
+         '(;; bob
+           ((goto-char (point-min)))
+           ;; before first scope
+           ((re-search-forward "class Top\\>"))
+           ;; before first method
+           ((re-search-forward "class CInner1\\>")
+            (class "Top"))
+           ;; inside method
+           ((re-search-forward "class CInner1_CLocal2\\>")
+            (method "foo()") (class "CInner1") (class "Top"))
+           ;; between methods
+           ((re-search-forward "class CInner1_CInner1\\>")
+            (class "CInner1") (class "Top"))
+           ;; after last method
+           ((progn
+              (re-search-forward "class ColocatedTop\\>")
+              (search-backward "}"))
+            (class "Top"))
+           ;; between top-level scopes
+           ((re-search-forward "class ColocatedTop\\>"))
+           ;; after last scope
+           ((progn
+              (goto-char (point-max))
+              (search-backward "}")
+              (forward-char)))
+           ;; eob
+           ((goto-char (point-max))))))
+    (dolist (testcase testcases)
+      (with-temp-buffer
+        (insert-file-contents (ert-resource-file "test1.java"))
+        (eval (car testcase))           ;move
+        (should
+         (equal (cdr testcase)
+                (javaimp-test-parse--simplify-scope
+                 (javaimp-parse-get-enclosing-scope
+                  (lambda (s)
+                    (memq (javaimp-scope-type s)
+                          '(class interface enum method)))
+                  (lambda (s)
+                    (memq (javaimp-scope-type s)
+                          '(class interface enum method)))))))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]