Fork me on GitHub
#clojure-norway
<
2024-05-20
>
teodorlu09:05:55

Fra Emacs, er det noen som vet hvorfor (cider-test-run-project-tests nil) tar nesten et sekund, mens (kaocha-runner-run-all-tests) er nesten umiddelbar? Gjør ikke disse to samme ting? (kaocha-runner er https://github.com/magnars/kaocha-runner.el)

cjohansen09:05:25

kaocha-runner evaluerer testene i REPL-et ditt. Gjør den andre det? Eller sheller den ut/kjører en ny prosess på noe vis?

teodorlu09:05:26

den kjører fra inni REPL --- det var derfor jeg tenkte at den burde være raskere enn den er.

teodorlu09:05:59

cider-test-execute er et lite beist av en funksjon:

(defun cider-test-execute (ns &optional tests silent prompt-for-filters)
  "Run tests for NS, which may be a keyword, optionally specifying TESTS.
This tests a single NS, or multiple namespaces when using keywords `:project',
`:loaded' or `:non-passing'.  Optional TESTS are only honored when a single
namespace is specified.  Upon test completion, results are echoed and a test
report is optionally displayed.  When test failures/errors occur, their sources
are highlighted.
If SILENT is non-nil, suppress all messages other then test results.
If PROMPT-FOR-FILTERS is non-nil, prompt the user for a test selector filters.
The include/exclude selectors will be used to filter the tests before
running them."
  (cider-test-clear-highlights)
  (let ((include-selectors
         (if prompt-for-filters
             (cider-test--prompt-for-selectors
              "Test selectors to include (space separated): ")
           cider-test-default-include-selectors))
        (exclude-selectors
         (if prompt-for-filters
             (cider-test--prompt-for-selectors
              "Test selectors to exclude (space separated): ")
           cider-test-default-exclude-selectors)))
    (cider-map-repls :clj-strict
      (lambda (conn)
        (unless silent
          (if (and tests (= (length tests) 1))
              ;; we generate a different message when running individual tests
              (cider-test-echo-running ns (car tests))
            (cider-test-echo-running ns)))
        (setq cider-test--current-repl conn)
        (let* ((retest? (eq :non-passing ns))
               (request `("op" ,(cond ((stringp ns)         "test")
                                      ((eq :project ns)     "test-all")
                                      ((eq :loaded ns)      "test-all")
                                      (retest?              "retest")))))
          ;; we add optional parts of the request only when relevant
          (when (and (listp include-selectors) include-selectors)
            (setq request (append request `("include" ,include-selectors))))
          (when (and (listp exclude-selectors) exclude-selectors)
            (setq request (append request `("exclude" ,exclude-selectors))))
          (when (stringp ns)
            (setq request (append request `("ns" ,ns))))
          (when (stringp ns)
            (setq request (append request `("tests" ,tests))))
          (when (or (stringp ns) (eq :project ns))
            (setq request (append request `("load?" ,"true"))))
          (when (and cider-test-fail-fast
                     (not retest?))
            (setq request (append request `("fail-fast" ,"true"))))
          (cider-nrepl-send-request
           request
           (lambda (response)
             (nrepl-dbind-response response (summary results status out err elapsed-time ns-elapsed-time var-elapsed-time)
               (cond ((member "namespace-not-found" status)
                      (unless silent
                        (message "No test namespace: %s" (cider-propertize ns 'ns))))
                     (out (cider-emit-interactive-eval-output out))
                     (err (cider-emit-interactive-eval-err-output err))
                     (results
                      (nrepl-dbind-response summary (error fail)
                        (setq cider-test-last-summary summary)
                        (setq cider-test-last-results results)
                        (cider-test-highlight-problems results)
                        (cider-test-echo-summary summary results elapsed-time)
                        (if (or (not (zerop (+ error fail)))
                                cider-test-show-report-on-success)
                            (let ((b (cider-popup-buffer
                                      cider-test-report-buffer
                                      cider-auto-select-test-report-buffer)))
                              (with-current-buffer b
                                ;; Change the default-directory so that it doesn't affect `sesman--linked-sessions` logic:
                                (setq-local default-directory
                                            (with-current-buffer "*Messages*" default-directory)))
                              (cider-test-render-report
                               b
                               summary
                               results
                               elapsed-time
                               ns-elapsed-time
                               var-elapsed-time))
                          (when (get-buffer cider-test-report-buffer)
                            (with-current-buffer cider-test-report-buffer
                              (let ((inhibit-read-only t))
                                (erase-buffer)))
                            (cider-test-render-report
                             cider-test-report-buffer
                             summary
                             results
                             elapsed-time
                             ns-elapsed-time))))))))
           conn))))))

teodorlu10:05:04

Oi, M-x cider-test-run-project-tests på min PC ser ut til å kjøre tester via kaocha-runner også. (se etter lysegrønn tekst først, den ser ut som kaocha-runner output, deretter kommer mørkegrønn fra cider). Snodig.

magnars11:05:44

Da er det noe du har satt opp. kaocha-runner i seg selv er bare en samling funksjoner du kaller ved behov og ønske.

👍 1
teodorlu12:05:08

For å være tydelig: jeg som bruker synes at dette er rar oppførsel fra CIDER, og forventet oppførsel fra kaocha-test-runner. Når jeg kjører testene med kaocha-runner-run-all-tests, skjer jo det jeg forventer. Med CIDER får jeg ikke det jeg hadde trodd. Fra kilden til kaocha-runner-run-all-tests ser det jo ikke ut som det skjer noe rart.

magnars19:05:42

Ja, ser ut som at maskineriet til cider-nrepl-request ikke fungerer helt som jeg forventet, men at forskjellige requests faktisk blør over i hverandre. Lurer på om det kan forklare andre rariteter jeg har opplevd. Usikker på hvordan jeg skal kunne fikse det fra "user space", da. :thinking_face:

👍 1
Ivar Refsdal16:05:58

Eg har skrive ein artikkel om korleis Datomic handterar nettverksfeil: https://ivarref.github.io/posts/network-failures/

glitch_crab 3
💯 2
teodorlu17:05:40

Spennende lesing! Og grattis med ny nettside, hvis jeg gjetter rett i at den er ny!

🧡 2
✔️ 1
Ivar Refsdal10:05:55

Takk for det @U3X7174KS! Ja, det er ei ny side ja 🙂