undercover-el / undercover.el

A test coverage library for Emacs
MIT License
86 stars 14 forks source link

undercover-file-handler never called #26

Closed DamienCassou closed 7 years ago

DamienCassou commented 7 years ago

Hi,

I'm setting up undercover in https://github.com/DamienCassou/hierarchy/pull/9. As you can see in the log, undercover can't find any coverage info:

UNDERCOVER: No coverage information. Make sure that your files are not compiled?

What am I doing wrong please?

DamienCassou commented 7 years ago

I don't have anything compiled file (*.elc).

I reproduced the problem locally by:

  1. deleting undercover.elc
  2. adding message everywhere in its source code (poor-man debugger)
  3. forcing the coverage with (setq undercover-force-coverage t)

What I see is that at the end of undercover--edebug-files, the file-name-handler-alist variable value is:

((/\(?:hierarchy\.el\)$ . undercover-file-handler) (\.gpg\(~\|\.~[0-9]+~\)?\' . epa-file-handler) (\(?:\.dz\|\.txz\|\.xz\|\.lzma\|\.lz\|\.g?z\|\.\(?:tgz\|svgz\|sifz\)\|\.tbz2?\|\.bz2\|\.Z\)\(?:~\|\.~[-[:alnum:]:#@^._]+\(?:~[[:digit:]]+\)?~\)?\' . jka-compr-handler) (\`/[^/]*\' . tramp-completion-file-name-handler) (\`/[^/|:][^/|]*: . tramp-autoload-file-name-handler) (\`/: . file-name-non-special))

but, undercover-file-handler never prints the message I put there.

DamienCassou commented 7 years ago

Here are the changes I applied to undercover.el.

--- .cask/25.2/elpa/undercover-20161114.819/undercover.el   2017-03-23 10:13:50.820551685 +0100
+++ .cask.bak/25.2/elpa/undercover-20161114.819.bak/undercover.messages.el  2017-03-23 10:09:42.207369720 +0100
@@ -89,6 +89,7 @@

 (defun undercover--load-file-handler (file)
   "Handle `load' FILE operation."
+  (message "Loading file: %s" file)
   (let ((edebug-all-defs (undercover--coverage-enabled-p))
         (load-file-name (file-truename file))
         (load-in-progress t))
@@ -104,6 +105,7 @@

 (defun undercover-file-handler (operation &rest args)
   "Handle `load' OPERATION.  Ignore all ARGS except first."
+  (message "undercover-file-handler %s %s" operation args)
   (if (eq 'load operation)
       (condition-case nil
           (undercover--load-file-handler (car args))
@@ -114,9 +116,11 @@

 (defun undercover--edebug-files (files)
   "Use `edebug' package to instrument all macros and functions in FILES."
+  (message "undercover--edebug-files: %s" files)
   (when files
     (let ((regexp (->> files (regexp-opt) (format "/%s$"))))
-      (add-to-list 'file-name-handler-alist (cons regexp 'undercover-file-handler)))))
+      (add-to-list 'file-name-handler-alist (cons regexp 'undercover-file-handler))
+      (message "undercover--edebug-files: %s" file-name-handler-alist))))

 (setf (symbol-function 'undercover--stop-point-before)
       (lambda (before-index)
@@ -400,10 +404,12 @@
 (defun undercover-safe-report ()
   "Version of `undercover-report' that ignore errors."
   (ignore-errors
+    (message "Reporting...")
     (undercover-report)))

 (defun undercover-report-on-kill ()
   "Add `undercover-safe-report' to `kill-emacs-hook'."
+  (message "Adding kill hook")
   (add-hook 'kill-emacs-hook 'undercover-safe-report))

 ;;; Main functions:
@@ -462,10 +469,12 @@

 If running under Travic CI automatically generate report
 on `kill-emacs' and send it to coveralls.io."
-  `(undercover--setup
-    (list
-     ,@(--map (if (atom it) it `(list ,@it))
-              configuration))))
+  `(progn
+     (message "Measuring coverage...")
+     (undercover--setup
+      (list
+       ,@(--map (if (atom it) it `(list ,@it))
+                configuration)))))

 (provide 'undercover)
 ;;; undercover.el ends here
DamienCassou commented 7 years ago

The output is:

$ cask exec ert-runner
Measuring coverage...
Adding kill hook
undercover--edebug-files: (hierarchy.el)
undercover--edebug-files: ((/\(?:hierarchy\.el\)$ . undercover-file-handler) (\.gpg\(~\|\.~[0-9]+~\)?\' . epa-file-handler) (\(?:\.dz\|\.txz\|\.xz\|\.lzma\|\.lz\|\.g?z\|\.\(?:tgz\|svgz\|sifz\)\|\.tbz2?\|\.bz2\|\.Z\)\(?:~\|\.~[-[:alnum:]:#@^._]+\(?:~[[:digit:]]+\)?~\)?\' . jka-compr-handler) (\`/[^/]*\' . tramp-completion-file-name-handler) (\`/[^/|:][^/|]*: . tramp-autoload-file-name-handler) (\`/: . file-name-non-special))
............................

Ran 28 tests in 0.015 seconds

Reporting...
Report files: nil
UNDERCOVER: No coverage information. Make sure that your files are not compiled?
sviridov commented 7 years ago

Hi @DamienCassou, this bug happens because of your .ert-runner config. You load hierarchy.el in it. So when you run undercover this file is already loaded and (require 'hierarchy) does nothing.

Replace .ert-runner content with -L . and everything will work.

sviridov commented 7 years ago

Btw, you can test undercover locally by using TRAVIS=true in your terminal

DamienCassou commented 7 years ago

it works perfectly fine now, thank you very much. Do you want a PR adding this both info (.ert-runner and TRAVIS=true) to the README?

sviridov commented 7 years ago

Sure, feel free to do it! :)

DamienCassou commented 7 years ago

done