From 3370d7a0636be2d1589f6f56338fcc3c53bcd50c Mon Sep 17 00:00:00 2001 From: Chuck Cassel Date: Tue, 8 Aug 2023 04:49:07 -0400 Subject: [PATCH] Fix #1596: Escape URLs for clojure.java.browse/browse-url on Windows (#1597) --- CHANGELOG.md | 1 + src/babashka/impl/clojure/java/browse.clj | 2 +- .../impl/clojure/java/browse_test.clj | 25 +++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 test/babashka/impl/clojure/java/browse_test.clj diff --git a/CHANGELOG.md b/CHANGELOG.md index e396a7ab..924f33ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ A preview of the next release can be installed from ## Unreleased - [#1592](https://github.com/babashka/babashka/issues/1592): expose `sci.core` in babashka +- [#1596](https://github.com/babashka/babashka/issues/1596): Fix `clojure.java.browse/browse-url` truncates URLs with multiple query parameters on Windows ## 1.3.182 (2023-07-20) diff --git a/src/babashka/impl/clojure/java/browse.clj b/src/babashka/impl/clojure/java/browse.clj index 37db104b..25718853 100644 --- a/src/babashka/impl/clojure/java/browse.clj +++ b/src/babashka/impl/clojure/java/browse.clj @@ -25,7 +25,7 @@ (case os :mac (sh "open" url) :linux (sh "xdg-open" url) - :windows (sh "cmd" "/C" "start" url))))) + :windows (sh "cmd" "/C" "start" (.replace url "&" "^&")))))) (def browse-namespace {'*open-url-script* open-url-script diff --git a/test/babashka/impl/clojure/java/browse_test.clj b/test/babashka/impl/clojure/java/browse_test.clj new file mode 100644 index 00000000..95d6a2a1 --- /dev/null +++ b/test/babashka/impl/clojure/java/browse_test.clj @@ -0,0 +1,25 @@ +(ns babashka.impl.clojure.java.browse-test + (:require + [babashka.test-utils :refer [bb]] + [cheshire.core :as json] + [clojure.test :refer [deftest is]] + [org.httpkit.server :as http])) + +(def ^:dynamic *http-port* 1234) + +(deftest browse-url-test + (let [p (promise) + stop-server (http/run-server (fn [{:keys [query-string]}] + (let [params (apply hash-map (mapcat #(.split % "=") (.split query-string "&")))] + (deliver p params) + {:status 200 + :content-type "application/json" + :body (json/encode params)})) + {:port *http-port*})] + (try + (bb nil + (str "(clojure.java.browse/browse-url \"http://localhost:" *http-port* "?arg1=v1&arg2=v2\")")) + (is (= {"arg1" "v1" + "arg2" "v2"} + (deref p 5000 ::timeout))) + (finally (stop-server :timeout 1000))))) \ No newline at end of file