Fix ordering of vars. Fix #10.

This commit is contained in:
Michiel Borkent 2020-05-21 12:28:14 -03:00
parent 9c331ec86d
commit 8a420bdf84
6 changed files with 49 additions and 28 deletions

View file

@ -1,5 +1,6 @@
{:deps {nrepl/bencode {:mvn/version "1.1.0"} {:deps {nrepl/bencode {:mvn/version "1.1.0"}
cheshire {:mvn/version "5.10.0"}} cheshire {:mvn/version "5.10.0"}
org.flatland/ordered {:mvn/version "1.5.9"}}
:aliases :aliases
{:sci {:sci
{:extra-deps {:extra-deps

View file

@ -7,7 +7,8 @@
:url "https://www.eclipse.org/legal/epl-1.0/"} :url "https://www.eclipse.org/legal/epl-1.0/"}
:dependencies [[org.clojure/clojure "1.10.2-alpha1"] :dependencies [[org.clojure/clojure "1.10.2-alpha1"]
[nrepl/bencode "1.1.0"] [nrepl/bencode "1.1.0"]
[cheshire "5.10.0"]] [cheshire "5.10.0"]
[org.flatland/ordered "1.5.9"]]
:deploy-repositories [["clojars" {:url "https://clojars.org/repo" :deploy-repositories [["clojars" {:url "https://clojars.org/repo"
:username :env/babashka_nrepl_clojars_user :username :env/babashka_nrepl_clojars_user
:password :env/babashka_nrepl_clojars_pass :password :env/babashka_nrepl_clojars_pass

View file

@ -3,7 +3,8 @@
(:refer-clojure :exclude [read]) (:refer-clojure :exclude [read])
(:require [bencode.core :as bencode] (:require [bencode.core :as bencode]
[cheshire.core :as cheshire] [cheshire.core :as cheshire]
[clojure.edn :as edn])) [clojure.edn :as edn]
[flatland.ordered.map :refer [ordered-map]]))
(set! *warn-on-reflection* true) (set! *warn-on-reflection* true)
@ -200,7 +201,7 @@
(fn [& args] (fn [& args]
(let [res (invoke pod sym args {:async async?})] (let [res (invoke pod sym args {:async async?})]
res)))))) res))))))
{} (ordered-map)
vars)) vars))
pod-namespaces (reduce (fn [namespaces namespace] pod-namespaces (reduce (fn [namespaces namespace]
(let [name-str (-> namespace (get "name") bytes->string) (let [name-str (-> namespace (get "name") bytes->string)

View file

@ -26,6 +26,14 @@
(defn read [] (defn read []
(bencode/read-bencode stdin)) (bencode/read-bencode stdin))
(def dependents
(for [i (range 10)]
{"name" (str "x" i)
"code"
(if-not (zero? i)
(format "(def x%s (inc x%s))" i (dec i))
"(def x0 0)")}))
(defn run-pod [cli-args] (defn run-pod [cli-args]
(let [format (if (contains? cli-args "--json") (let [format (if (contains? cli-args "--json")
:json :json
@ -52,16 +60,17 @@
"edn") "edn")
"namespaces" "namespaces"
[{"name" "pod.test-pod" [{"name" "pod.test-pod"
"vars" [{"name" "add-sync"} "vars" (into [{"name" "add-sync"}
{"name" "range-stream" {"name" "range-stream"
"async" "true"} "async" "true"}
{"name" "assoc"} {"name" "assoc"}
{"name" "error"} {"name" "error"}
{"name" "print"} {"name" "print"}
{"name" "print-err"} {"name" "print-err"}
{"name" "return-nil"} {"name" "return-nil"}
{"name" "do-twice" {"name" "do-twice"
"code" "(defmacro do-twice [x] `(do ~x ~x))"}]}] "code" "(defmacro do-twice [x] `(do ~x ~x))"}]
dependents)}]
"ops" {"shutdown" {}}}) "ops" {"shutdown" {}}})
(recur)) (recur))
:invoke (let [var (-> (get message "var") :invoke (let [var (-> (get message "var")

View file

@ -41,6 +41,8 @@
(def add-result (pod.test-pod/add-sync 1 2 3)) (def add-result (pod.test-pod/add-sync 1 2 3))
(def nil-result (pod.test-pod/return-nil)) (def nil-result (pod.test-pod/return-nil))
(def x9 pod.test-pod/x9)
(pods/unload-pod pod-id) (pods/unload-pod pod-id)
(def successfully-removed (nil? (find-ns 'pod.test-pod))) (def successfully-removed (nil? (find-ns 'pod.test-pod)))
@ -55,4 +57,5 @@
@callback-result @callback-result
(:ex-message @error-result) (:ex-message @error-result)
(:ex-data @error-result) (:ex-data @error-result)
successfully-removed] successfully-removed
x9]

View file

@ -1,21 +1,27 @@
(ns babashka.pods.test-common (ns babashka.pods.test-common
(:require [clojure.java.io :as io] (:require [clojure.java.io :as io]
[clojure.test :refer [is]])) [clojure.test :refer [is]]
[clojure.string :as str]))
(def test-program (slurp (io/file "test-resources" "test_program.clj"))) (def test-program (slurp (io/file "test-resources" "test_program.clj")))
(defn assertions [out err ret] (defn assertions [out err ret]
(is (= '["pod.test-pod" (doseq [[expected actual]
pod.test-pod (map vector '["pod.test-pod"
{:a 1, :b 2} pod.test-pod
6 {:a 1, :b 2}
3 6
[1 2 3 4 5 6 7 8 9] 3
"Illegal arguments / {:args (1 2 3)}" [1 2 3 4 5 6 7 8 9]
nil "Illegal arguments / {:args (1 2 3)}"
3 nil
"java.lang.String cannot be cast to java.lang.Number" 3
{:args ["1" 2]} "java.lang.String cannot be cast to java.lang.Number"
true] ret)) {:args ["1" 2]}
true
9] ret)]
(if (string? expected)
(str/includes? actual expected)
(= expected actual)))
(is (= "(\"hello\" \"print\" \"this\" \"debugging\" \"message\")\n:foo\n:foo\n" (str out))) (is (= "(\"hello\" \"print\" \"this\" \"debugging\" \"message\")\n:foo\n:foo\n" (str out)))
(is (= "(\"hello\" \"print\" \"this\" \"error\")\n" (str err)))) (is (= "(\"hello\" \"print\" \"this\" \"error\")\n" (str err))))