From b7f0fc19adfb17dbd9505df5b37b572b69104318 Mon Sep 17 00:00:00 2001 From: PEZ <> Date: Thu, 7 Nov 2024 15:12:12 +0100 Subject: [PATCH] WIP: Bring back workspace activation --- .clj-kondo/config.edn | 2 +- .../.joyride/scripts/workspace_activate.cljs | 28 +++++++++++++++++++ e2e-test-ws/.joyride/src/a_test.cljs | 6 ++++ .../.joyride/src/{test_runner => e2e}/db.cljs | 2 +- .../src/{test_runner => e2e}/macros.cljs | 2 +- .../runner.cljs => e2e/test_runner.cljs} | 27 +++++++++++------- .../.joyride/src/test_runner/config.cljs | 4 --- .../.joyride/src/tests/foo/bar/b_test.cljs | 6 ---- .../tests/{a_test.cljs => smoke_test.cljs} | 12 ++++---- .../src/tests/ws_ready/example_test.cljs | 10 +++++++ e2e-test-ws/runTests.js | 2 +- 11 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 e2e-test-ws/.joyride/scripts/workspace_activate.cljs create mode 100644 e2e-test-ws/.joyride/src/a_test.cljs rename e2e-test-ws/.joyride/src/{test_runner => e2e}/db.cljs (88%) rename e2e-test-ws/.joyride/src/{test_runner => e2e}/macros.cljs (95%) rename e2e-test-ws/.joyride/src/{test_runner/runner.cljs => e2e/test_runner.cljs} (80%) delete mode 100644 e2e-test-ws/.joyride/src/test_runner/config.cljs delete mode 100644 e2e-test-ws/.joyride/src/tests/foo/bar/b_test.cljs rename e2e-test-ws/.joyride/src/tests/{a_test.cljs => smoke_test.cljs} (57%) create mode 100644 e2e-test-ws/.joyride/src/tests/ws_ready/example_test.cljs diff --git a/.clj-kondo/config.edn b/.clj-kondo/config.edn index 4508f4c..bc7fb75 100644 --- a/.clj-kondo/config.edn +++ b/.clj-kondo/config.edn @@ -1 +1 @@ -{:lint-as {test-runner.macros/deftest-async clojure.test/deftest}} +{:lint-as {e2e.macros/deftest-async clojure.test/deftest}} diff --git a/e2e-test-ws/.joyride/scripts/workspace_activate.cljs b/e2e-test-ws/.joyride/scripts/workspace_activate.cljs new file mode 100644 index 0000000..4d1a3e7 --- /dev/null +++ b/e2e-test-ws/.joyride/scripts/workspace_activate.cljs @@ -0,0 +1,28 @@ +(ns workspace-activate + (:require [e2e.db :as db] + ["vscode" :as vscode])) + +(println "e2e-test-ws workspace activating...") + +;; If there is anything you want to happen in the workspace before +;; the tests run, you can set things up here + +#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]} +(def ws-root (first vscode/workspace.workspaceFolders)) + +(def question 42) + +;; See e2e-test-ws/.joyride/src/tests/ws_ready/example_test.cljs +;; for how we test that the workspace has been properly prepared + +;; The test runner will be waiting for this to appear in the state +;; before it starts running tests +(swap! db/!state assoc :ws-activated? true) + +(println "e2e-test-ws workspace activated.") + +;; E.g. when running the tests locally, you may have created files +;; that you don't want to litter the git repo with. +(defn clean-up! [] + (println "Cleaning up e2e-tests workspace") + :nothing-to-clean-up) \ No newline at end of file diff --git a/e2e-test-ws/.joyride/src/a_test.cljs b/e2e-test-ws/.joyride/src/a_test.cljs new file mode 100644 index 0000000..4f452ba --- /dev/null +++ b/e2e-test-ws/.joyride/src/a_test.cljs @@ -0,0 +1,6 @@ +(ns a-test + (:require [cljs.test :refer [deftest testing is]])) + +(deftest hello + (testing "Test files can be put anywhere in the `src` directory. They just need to end in `_test.cljs`." + (is (= :foo :foo)))) \ No newline at end of file diff --git a/e2e-test-ws/.joyride/src/test_runner/db.cljs b/e2e-test-ws/.joyride/src/e2e/db.cljs similarity index 88% rename from e2e-test-ws/.joyride/src/test_runner/db.cljs rename to e2e-test-ws/.joyride/src/e2e/db.cljs index 4118b54..814e34a 100644 --- a/e2e-test-ws/.joyride/src/test_runner/db.cljs +++ b/e2e-test-ws/.joyride/src/e2e/db.cljs @@ -1,4 +1,4 @@ -(ns test-runner.db +(ns e2e.db (:require [cljs.test])) (def !state (atom {:running nil diff --git a/e2e-test-ws/.joyride/src/test_runner/macros.cljs b/e2e-test-ws/.joyride/src/e2e/macros.cljs similarity index 95% rename from e2e-test-ws/.joyride/src/test_runner/macros.cljs rename to e2e-test-ws/.joyride/src/e2e/macros.cljs index bae6430..db73d09 100644 --- a/e2e-test-ws/.joyride/src/test_runner/macros.cljs +++ b/e2e-test-ws/.joyride/src/e2e/macros.cljs @@ -1,4 +1,4 @@ -(ns test-runner.macros) +(ns e2e.macros) (defmacro deftest-async [name opts & body] (let [[opts body] diff --git a/e2e-test-ws/.joyride/src/test_runner/runner.cljs b/e2e-test-ws/.joyride/src/e2e/test_runner.cljs similarity index 80% rename from e2e-test-ws/.joyride/src/test_runner/runner.cljs rename to e2e-test-ws/.joyride/src/e2e/test_runner.cljs index 16b106a..9c5f819 100644 --- a/e2e-test-ws/.joyride/src/test_runner/runner.cljs +++ b/e2e-test-ws/.joyride/src/e2e/test_runner.cljs @@ -1,9 +1,8 @@ -(ns test-runner.runner +(ns e2e.test-runner (:require [clojure.string :as string] [cljs.test] [promesa.core :as p] - [test-runner.config :as config] - [test-runner.db :as db] + [e2e.db :as db] ["vscode" :as vscode])) (defn- write [& xs] @@ -67,15 +66,23 @@ (.map (partial file->ns src-path)))] (mapv symbol nss-strings))) +(defn- run-when-ws-activated [nss-syms running tries] + (if (:ws-activated? @db/!state) + (-> (p/do + (println "Running tests in" nss-syms) + (apply require nss-syms) + (apply cljs.test/run-tests nss-syms) + running) + (p/catch (fn [e] + (p/reject! (:running @db/!state) e)))) + (do + (println "Runner: Workspace not activated yet, tries: " tries "- trying again in a jiffy") + (js/setTimeout #(run-when-ws-activated nss-syms running (inc tries)) 10) + running))) + (defn run-all-tests [src-path] (let [running (p/deferred)] (swap! db/!state assoc :running running) (p/let [nss-syms (find-test-nss+ src-path)] - (println "Running tests in" nss-syms) - (-> (p/do - (apply require nss-syms) - (apply cljs.test/run-tests nss-syms) - running) - (p/catch (fn [e] - (p/reject! (:running @db/!state) e))))))) + (run-when-ws-activated nss-syms running 1)))) diff --git a/e2e-test-ws/.joyride/src/test_runner/config.cljs b/e2e-test-ws/.joyride/src/test_runner/config.cljs deleted file mode 100644 index b860e2b..0000000 --- a/e2e-test-ws/.joyride/src/test_runner/config.cljs +++ /dev/null @@ -1,4 +0,0 @@ -(ns test-runner.config) - -(defn ns-symbols [] - ['tests.a-test]) \ No newline at end of file diff --git a/e2e-test-ws/.joyride/src/tests/foo/bar/b_test.cljs b/e2e-test-ws/.joyride/src/tests/foo/bar/b_test.cljs deleted file mode 100644 index 6024c76..0000000 --- a/e2e-test-ws/.joyride/src/tests/foo/bar/b_test.cljs +++ /dev/null @@ -1,6 +0,0 @@ -(ns tests.foo.bar.b-test - (:require [cljs.test :refer [deftest testing is]])) - -(deftest hello - (testing "We can test things" - (is (= :foo :foo)))) \ No newline at end of file diff --git a/e2e-test-ws/.joyride/src/tests/a_test.cljs b/e2e-test-ws/.joyride/src/tests/smoke_test.cljs similarity index 57% rename from e2e-test-ws/.joyride/src/tests/a_test.cljs rename to e2e-test-ws/.joyride/src/tests/smoke_test.cljs index 3cc2a6e..a129703 100644 --- a/e2e-test-ws/.joyride/src/tests/a_test.cljs +++ b/e2e-test-ws/.joyride/src/tests/smoke_test.cljs @@ -1,16 +1,16 @@ -(ns tests.a-test +(ns tests.smoke-test (:require ["vscode" :as vscode] [cljs.test :refer [deftest testing is]] [promesa.core :as p] - [test-runner.macros :refer [deftest-async]])) + [e2e.macros :refer [deftest-async]])) (deftest hello - (testing "We can test things" - (is (= :foo :foo)))) + (testing "We can test things sync things" + (is (= :foo :foo)) + (is (= 1 (count vscode/workspace.workspaceFolders))))) (deftest-async extension-activation - (testing "The extension activates" + (testing "The extension activates (which is an async operation)" (p/let [extension (vscode/extensions.getExtension "betterthantomorrow.paste-replaced") api (.activate extension)] (is (not= nil? (.getContextValue api)))))) - diff --git a/e2e-test-ws/.joyride/src/tests/ws_ready/example_test.cljs b/e2e-test-ws/.joyride/src/tests/ws_ready/example_test.cljs new file mode 100644 index 0000000..924126a --- /dev/null +++ b/e2e-test-ws/.joyride/src/tests/ws_ready/example_test.cljs @@ -0,0 +1,10 @@ +(ns tests.ws-ready.example-test + (:require [cljs.test :refer [deftest testing is]] + ["vscode" :as vscode] + workspace-activate)) + +; No tests starts before the workspace is activated +(deftest ws-activated + (testing "The workspace is indeed activated" + (is (= 42 workspace-activate/question)) + (is (= (first vscode/workspace.workspaceFolders) workspace-activate/ws-root)))) \ No newline at end of file diff --git a/e2e-test-ws/runTests.js b/e2e-test-ws/runTests.js index c44dbb7..e8bfeae 100644 --- a/e2e-test-ws/runTests.js +++ b/e2e-test-ws/runTests.js @@ -3,6 +3,6 @@ const vscode = require('vscode'); exports.run = async () => { return vscode.commands.executeCommand( 'joyride.runCode', - "(require '[test-runner.runner :as runner]) (runner/run-all-tests \".joyride/src\")" + "(require '[e2e.test-runner :as runner]) (runner/run-all-tests \".joyride/src\")" ); };