From 1318cec7ee4da31762dff423fbaded6ce7f0059b Mon Sep 17 00:00:00 2001 From: Sebastian Bensusan Date: Thu, 18 Jun 2015 19:29:57 +0200 Subject: [PATCH] Replaced cljx with cljc. cljs tests are passing but lein test runs no tests. --- project.clj | 37 ++------ .../kahn.cljx => alandipert/kahn.cljc} | 0 src/cljx/jamesmacaulay/zelkova/window.cljx | 57 ------------- .../async_tools/core.cljc} | 19 ++--- .../async_tools/test.clj} | 3 +- .../zelkova/impl/signal.cljc} | 34 ++++---- .../zelkova/impl/time.cljc} | 7 +- .../zelkova/keyboard.cljc} | 55 +++++------- .../zelkova/mouse.cljs} | 15 +--- .../zelkova/signal.cljc} | 21 ++--- .../zelkova/time.cljc} | 84 +++++++++---------- src/jamesmacaulay/zelkova/window.cljc | 50 +++++++++++ .../zelkova/impl/signal_test.cljx | 42 ---------- .../async_tools/core_test.cljc} | 25 +++--- .../zelkova/impl/signal_test.cljc | 39 +++++++++ .../zelkova/signal_test.cljc} | 36 ++++---- 16 files changed, 225 insertions(+), 299 deletions(-) rename src/{cljx/alandipert/kahn.cljx => alandipert/kahn.cljc} (100%) delete mode 100644 src/cljx/jamesmacaulay/zelkova/window.cljx rename src/{cljx/jamesmacaulay/async_tools/core.cljx => jamesmacaulay/async_tools/core.cljc} (64%) rename src/{cljx/jamesmacaulay/async_tools/test.cljx => jamesmacaulay/async_tools/test.clj} (91%) rename src/{cljx/jamesmacaulay/zelkova/impl/signal.cljx => jamesmacaulay/zelkova/impl/signal.cljc} (93%) rename src/{cljx/jamesmacaulay/zelkova/impl/time.cljx => jamesmacaulay/zelkova/impl/time.cljc} (52%) rename src/{cljx/jamesmacaulay/zelkova/keyboard.cljx => jamesmacaulay/zelkova/keyboard.cljc} (78%) rename src/{cljx/jamesmacaulay/zelkova/mouse.cljx => jamesmacaulay/zelkova/mouse.cljs} (91%) rename src/{cljx/jamesmacaulay/zelkova/signal.cljx => jamesmacaulay/zelkova/signal.cljc} (97%) rename src/{cljx/jamesmacaulay/zelkova/time.cljx => jamesmacaulay/zelkova/time.cljc} (59%) create mode 100644 src/jamesmacaulay/zelkova/window.cljc delete mode 100644 test/cljx/jamesmacaulay/zelkova/impl/signal_test.cljx rename test/{cljx/jamesmacaulay/async_tools/core_test.cljx => jamesmacaulay/async_tools/core_test.cljc} (60%) create mode 100644 test/jamesmacaulay/zelkova/impl/signal_test.cljc rename test/{cljx/jamesmacaulay/zelkova/signal_test.cljx => jamesmacaulay/zelkova/signal_test.cljc} (95%) diff --git a/project.clj b/project.clj index 0aa4de8..2df678e 100644 --- a/project.clj +++ b/project.clj @@ -7,47 +7,24 @@ [org.clojure/clojurescript "0.0-3196"] [org.clojure/core.async "0.1.346.0-17112a-alpha"]] :plugins [[lein-cljsbuild "1.0.5"] - [com.keminglabs/cljx "0.6.0" :exclusions [org.clojure/clojure - com.cemerick/piggieback - net.cgrand/parsley]] [com.cemerick/clojurescript.test "0.3.3"]] - :jar-exclusions [#"\.cljx"] - :aliases {"repl" ["with-profile" "repl" "repl"] - "clj-test" ["with-profile" "clj" "test"] - "cljs-test" ["do" "cljx" ["cljsbuild" "test"]] - "cljs-autotest" ["do" "cljx" ["cljsbuild" "auto" "test"]] - "all-tests" ["do" "clean" ["clj-test"] ["cljs-test"]]} + :aliases {"cljs-test" ["cljsbuild" "test"] + "cljs-autotest" ["cljsbuild" "auto" "test"] + "all-tests" ["do" "clean" ["test"] ["cljs-test"]]} :profiles {:dev {:dependencies [[org.clojure/tools.namespace "0.2.10"] [org.clojure/tools.nrepl "0.2.10"] [com.cemerick/piggieback "0.2.0"] [net.cgrand/parsley "0.9.3" :exclusions [org.clojure/clojure]]] - :source-paths ["target/classes"]} - :repl [:dev {:source-paths ["repl" "target/classes" "target/generated/test/clj" "target/generated/test/cljs"] - :test-paths ["target/generated/test/clj" "target/generated/test/cljs"]}] - :clj [:dev {:source-paths ["target/classes"] - :test-paths ["target/generated/test/clj"]}] - :cljs [:dev]} - :prep-tasks [["cljx" "once"] "javac" "compile"] + :source-paths ["src"]}} + :prep-tasks ["javac" "compile"] :cljsbuild {:test-commands {"phantom" ["phantomjs" :runner "target/testable.js"] "node" ["node" :node-runner "target/testable.js"]} :builds [{:id "test" - :source-paths ["target/classes" "target/generated/test/clj" "target/generated/test/cljs"] + :source-paths ["src" "test"] :notify-command ["phantomjs" :cljs.test/runner "target/testable.js"] :compiler {:output-to "target/testable.js" :libs [""] ; node doesn't like source maps I guess? ;:source-map "target/testable.js.map" :optimizations :simple - :pretty-print true}}]} - :cljx {:builds [{:source-paths ["src/cljx"] - :output-path "target/classes" - :rules :clj} - {:source-paths ["src/cljx"] - :output-path "target/classes" - :rules :cljs} - {:source-paths ["test/cljx"] - :output-path "target/generated/test/clj" - :rules :clj} - {:source-paths ["test/cljx"] - :output-path "target/generated/test/cljs" - :rules :cljs}]}) + :pretty-print true}}]}) diff --git a/src/cljx/alandipert/kahn.cljx b/src/alandipert/kahn.cljc similarity index 100% rename from src/cljx/alandipert/kahn.cljx rename to src/alandipert/kahn.cljc diff --git a/src/cljx/jamesmacaulay/zelkova/window.cljx b/src/cljx/jamesmacaulay/zelkova/window.cljx deleted file mode 100644 index b37092e..0000000 --- a/src/cljx/jamesmacaulay/zelkova/window.cljx +++ /dev/null @@ -1,57 +0,0 @@ -(ns jamesmacaulay.zelkova.window - "This namespace provides window-related signals." - (:refer-clojure :exclude [meta]) - #+clj - (:require [jamesmacaulay.zelkova.signal :as z] - [jamesmacaulay.zelkova.impl.signal :as impl] - [clojure.core.async :as async]) - #+cljs - (:require [jamesmacaulay.zelkova.signal :as z] - [jamesmacaulay.zelkova.impl.signal :as impl] - [jamesmacaulay.async-tools.core :as tools] - [goog.events :as events] - [cljs.core.async :as async :refer [>! events-fn dimensions-channel ::dimensions)) - -(def ^{:doc "A signal of `[x y]` vectors representing the current dimensions of -the window."} - dimensions - (impl/make-signal {:init-fn (fn [_ opts] (get-size opts)) - :relayed-event-topic ::dimensions - :event-sources {::dimensions dimensions-events-fn}})) - -(def ^{:doc "A signal of the current width of the window."} - width - (z/map first dimensions)) - -(def ^{:doc "A signal of the current height of the window."} - height - (z/map second dimensions)) diff --git a/src/cljx/jamesmacaulay/async_tools/core.cljx b/src/jamesmacaulay/async_tools/core.cljc similarity index 64% rename from src/cljx/jamesmacaulay/async_tools/core.cljx rename to src/jamesmacaulay/async_tools/core.cljc index 05f0f00..142e93e 100644 --- a/src/cljx/jamesmacaulay/async_tools/core.cljx +++ b/src/jamesmacaulay/async_tools/core.cljc @@ -1,17 +1,12 @@ -#+clj (ns jamesmacaulay.async-tools.core (:refer-clojure :exclude [concat]) - (:require [clojure.core.async :as async :refer [go go-loop >! ! ! ! !]] - [clojure.core.async.impl.protocols :as async-impl]) - #+cljs - (:require [jamesmacaulay.async-tools.core :as tools] - [jamesmacaulay.zelkova.impl.time :as time] - [clojure.zip :as zip] - [clojure.set] - [alandipert.kahn :as kahn] - [cljs.core.async :as async :refer [!]] - [cljs.core.async.impl.protocols :as async-impl]) - #+cljs - (:require-macros [cljs.core.async.macros :refer [go go-loop]])) + #?(:cljs (:require [jamesmacaulay.async-tools.core :as tools] + [jamesmacaulay.zelkova.impl.time :as time] + [clojure.zip :as zip] + [clojure.set] + [alandipert.kahn :as kahn] + [cljs.core.async :as async :refer [!]] + [cljs.core.async.impl.protocols :as async-impl]) + + :clj (:require [jamesmacaulay.async-tools.core :as tools] + [jamesmacaulay.zelkova.impl.time :as time] + [clojure.zip :as zip] + [clojure.set] + [alandipert.kahn :as kahn] + [clojure.core.async :as async :refer [go go-loop !]] + [clojure.core.async.impl.protocols :as async-impl])) + #?(:cljs (:require-macros [cljs.core.async.macros :refer [go go-loop]]))) (defprotocol BoxedValueProtocol (value [boxed])) diff --git a/src/cljx/jamesmacaulay/zelkova/impl/time.cljx b/src/jamesmacaulay/zelkova/impl/time.cljc similarity index 52% rename from src/cljx/jamesmacaulay/zelkova/impl/time.cljx rename to src/jamesmacaulay/zelkova/impl/time.cljc index 356ad01..84e4587 100644 --- a/src/cljx/jamesmacaulay/zelkova/impl/time.cljx +++ b/src/jamesmacaulay/zelkova/impl/time.cljc @@ -1,7 +1,6 @@ (ns jamesmacaulay.zelkova.impl.time "Implementation details for `jamesmacaulay.zelkova.time`.") -#+clj -(defn now [] (System/currentTimeMillis)) -#+cljs -(defn now [] (.valueOf (js/Date.))) +(defn now [] + #?(:clj (System/currentTimeMillis) + :cljs (.valueOf (js/Date.)))) diff --git a/src/cljx/jamesmacaulay/zelkova/keyboard.cljx b/src/jamesmacaulay/zelkova/keyboard.cljc similarity index 78% rename from src/cljx/jamesmacaulay/zelkova/keyboard.cljx rename to src/jamesmacaulay/zelkova/keyboard.cljc index 7547e83..a851136 100644 --- a/src/cljx/jamesmacaulay/zelkova/keyboard.cljx +++ b/src/jamesmacaulay/zelkova/keyboard.cljc @@ -1,43 +1,34 @@ (ns jamesmacaulay.zelkova.keyboard "This namespace provides keyboard-related signals." (:refer-clojure :exclude [meta]) - #+clj - (:require [jamesmacaulay.zelkova.signal :as z] - [clojure.core.async :as async]) - #+cljs - (:require [jamesmacaulay.zelkova.signal :as z] - [goog.events :as events] - [cljs.core.async :as async :refer [>! ! ! ! !]] - [clojure.core.async.impl.protocols :as async-impl] - [jamesmacaulay.zelkova.impl.signal :as impl]) - #+cljs - (:require [cljs.core :as core] - [cljs.core.async :as async :refer [!]] - [cljs.core.async.impl.protocols :as async-impl] - [jamesmacaulay.zelkova.impl.signal :as impl]) - #+cljs - (:require-macros [cljs.core.async.macros :refer [go go-loop]])) + #?(:clj (:require [clojure.core :as core] + [clojure.core.async :as async :refer [go go-loop !]] + [clojure.core.async.impl.protocols :as async-impl] + [jamesmacaulay.zelkova.impl.signal :as impl]) + :cljs (:require [cljs.core :as core] + [cljs.core.async :as async :refer [!]] + [cljs.core.async.impl.protocols :as async-impl] + [jamesmacaulay.zelkova.impl.signal :as impl])) + #?(:cljs (:require-macros [cljs.core.async.macros :refer [go go-loop]]))) (defn input "Returns an input signal with initial value `init`. The signal propagates values diff --git a/src/cljx/jamesmacaulay/zelkova/time.cljx b/src/jamesmacaulay/zelkova/time.cljc similarity index 59% rename from src/cljx/jamesmacaulay/zelkova/time.cljx rename to src/jamesmacaulay/zelkova/time.cljc index d3f97cd..b12b782 100644 --- a/src/cljx/jamesmacaulay/zelkova/time.cljx +++ b/src/jamesmacaulay/zelkova/time.cljc @@ -1,18 +1,16 @@ (ns jamesmacaulay.zelkova.time "Functions for working with time." (:refer-clojure :exclude [second delay]) - #+clj - (:require [jamesmacaulay.zelkova.impl.time :as t] - [jamesmacaulay.zelkova.signal :as z] - [jamesmacaulay.zelkova.impl.signal :as impl] - [clojure.core.async :as async :refer [>! ! ! ! ! waiting v) - (js/setTimeout fire! ms) - (recur))))))) - (:init-fn sig) - sig)) +#?(:cljs + (defn delay + "Delay a signal by `ms` milliseconds." + [ms sig] + (z/splice (fn [from to] + (let [waiting (async/chan (+ 1000 ms)) + fire! #(async/take! waiting (partial async/put! to))] + (go-loop [] + (let [v (! waiting v) + (js/setTimeout fire! ms) + (recur))))))) + (:init-fn sig) + sig))) -#+cljs -(defn since - "Returns a signal of boolean values: true when `sig` has updated in the past +#?(:cljs + (defn since + "Returns a signal of boolean values: true when `sig` has updated in the past `ms` milliseconds, false otherwise." - [ms sig] - (let [start (z/map (constantly 1) sig) - stop (z/map (constantly -1) (delay ms sig)) - delaydiff (z/foldp + 0 (z/merge start stop))] - (z/map (complement zero?) delaydiff))) + [ms sig] + (let [start (z/map (constantly 1) sig) + stop (z/map (constantly -1) (delay ms sig)) + delaydiff (z/foldp + 0 (z/merge start stop))] + (z/map (complement zero?) delaydiff)))) -#+cljs -(defn debounce - "Returns a signal which relays the latest value from `sig` only after `ms` +#?(:cljs + (defn debounce + "Returns a signal which relays the latest value from `sig` only after `ms` milliseconds have passed since `sig` last updated. Useful when you want to wait until a user stops typing before doing something with the text, for example." - [ms sig] - (let [timeouts (->> sig (since ms) (z/keep-if not false))] - (->> sig (z/sample-on timeouts)))) + [ms sig] + (let [timeouts (->> sig (since ms) (z/keep-if not false))] + (->> sig (z/sample-on timeouts))))) diff --git a/src/jamesmacaulay/zelkova/window.cljc b/src/jamesmacaulay/zelkova/window.cljc new file mode 100644 index 0000000..2611a67 --- /dev/null +++ b/src/jamesmacaulay/zelkova/window.cljc @@ -0,0 +1,50 @@ +(ns jamesmacaulay.zelkova.window + "This namespace provides window-related signals." + (:refer-clojure :exclude [meta]) + #?(:clj (:require [jamesmacaulay.zelkova.signal :as z] + [jamesmacaulay.zelkova.impl.signal :as impl] + [clojure.core.async :as async]) + :cljs (:require [jamesmacaulay.zelkova.signal :as z] + [jamesmacaulay.zelkova.impl.signal :as impl] + [jamesmacaulay.async-tools.core :as tools] + [goog.events :as events] + [cljs.core.async :as async :refer [>! events-fn dimensions-channel ::dimensions)) + +(def ^{:doc "A signal of `[x y]` vectors representing the current dimensions of +the window."} + dimensions + (impl/make-signal {:init-fn (fn [_ opts] (get-size opts)) + :relayed-event-topic ::dimensions + :event-sources {::dimensions dimensions-events-fn}})) + +(def ^{:doc "A signal of the current width of the window."} + width + (z/map first dimensions)) + +(def ^{:doc "A signal of the current height of the window."} + height + (z/map second dimensions)) diff --git a/test/cljx/jamesmacaulay/zelkova/impl/signal_test.cljx b/test/cljx/jamesmacaulay/zelkova/impl/signal_test.cljx deleted file mode 100644 index cdf7ed6..0000000 --- a/test/cljx/jamesmacaulay/zelkova/impl/signal_test.cljx +++ /dev/null @@ -1,42 +0,0 @@ -#+clj -(ns jamesmacaulay.zelkova.impl.signal-test - (:require [jamesmacaulay.async-tools.core :as tools] - [jamesmacaulay.zelkova.signal :as z] - [jamesmacaulay.zelkova.impl.signal :as impl] - [clojure.core.async :as async :refer [go go-loop chan to-chan !]] - [clojure.core.async.impl.protocols :as async-impl] - [jamesmacaulay.async-tools.test :refer (deftest-async)] - [clojure.test :refer (deftest is are testing)]) - (:import [java.util.Date])) - -#+cljs -(ns jamesmacaulay.zelkova.impl.signal-test - (:require [jamesmacaulay.async-tools.core :as tools] - [jamesmacaulay.zelkova.signal :as z] - [jamesmacaulay.zelkova.impl.signal :as impl] - [cljs.core.async :as async :refer [chan to-chan !]] - [cljs.core.async.impl.protocols :as async-impl] - [jamesmacaulay.async-tools.test :refer-macros (deftest-async)] - [cemerick.cljs.test :refer-macros (deftest is are testing)]) - (:require-macros [cljs.core.async.macros :refer [go go-loop]])) - -(deftest-async test-msg-fn-takes-event-and-previous-value-and-sequence-of-source-messages-and-returns-a-message - (go - (let [in1 (z/input 0 :in1) - in2 (z/input 0 :in2) - sig (impl/make-signal {:init-fn (constantly :test-init) - :sources [in1 in2] - :msg-xform (map (fn [payload] (impl/fresh payload)))}) - live-graph (z/spawn sig) - output (async/tap live-graph (chan)) - event1 (impl/->Event :in1 1 101) - event2 (impl/->Event :in2 2 102) - expected1 [event1 - :test-init - [(impl/fresh 1) (impl/cached 0)]] - expected2 [event2 - expected1 - [(impl/cached 1) (impl/fresh 2)]]] - (async/onto-chan live-graph [event1 event2]) - (is (= [expected1 expected2] - (!]] - [clojure.core.async.impl.protocols :as impl] - [jamesmacaulay.async-tools.test :refer (deftest-async)] - [clojure.test :refer (deftest is testing)])) -#+cljs -(ns jamesmacaulay.async-tools.core-test - (:require [jamesmacaulay.async-tools.core :as tools] - [cljs.core.async :as async :refer [chan to-chan !]] - [cljs.core.async.impl.protocols :as impl] - [jamesmacaulay.async-tools.test :refer-macros (deftest-async)] - [cemerick.cljs.test :refer-macros (deftest is testing)]) - (:require-macros [cljs.core.async.macros :refer [go]])) + #?(:cljs (:require [jamesmacaulay.async-tools.core :as tools] + [cljs.core.async :as async :refer [chan to-chan !]] + [cljs.core.async.impl.protocols :as impl] + [cemerick.cljs.test :refer-macros (deftest is testing)]) + :clj (:require [jamesmacaulay.async-tools.core :as tools] + [clojure.core.async :as async :refer [go chan to-chan !]] + [clojure.core.async.impl.protocols :as impl] + [jamesmacaulay.async-tools.test :refer (deftest-async)] + [clojure.test :refer (deftest is testing)])) + #?(:cljs (:require-macros [cljs.core.async.macros :refer [go]] + [jamesmacaulay.async-tools.test :refer (deftest-async)]))) (deftest-async test-concat (go diff --git a/test/jamesmacaulay/zelkova/impl/signal_test.cljc b/test/jamesmacaulay/zelkova/impl/signal_test.cljc new file mode 100644 index 0000000..e8168c3 --- /dev/null +++ b/test/jamesmacaulay/zelkova/impl/signal_test.cljc @@ -0,0 +1,39 @@ +(ns jamesmacaulay.zelkova.impl.signal-test + #?(:cljs (:require [jamesmacaulay.async-tools.core :as tools] + [jamesmacaulay.zelkova.signal :as z] + [jamesmacaulay.zelkova.impl.signal :as impl] + [cljs.core.async :as async :refer [chan to-chan !]] + [cljs.core.async.impl.protocols :as async-impl] + [cemerick.cljs.test :refer-macros (deftest is are testing)]) + + :clj (:require [jamesmacaulay.async-tools.core :as tools] + [jamesmacaulay.zelkova.signal :as z] + [jamesmacaulay.zelkova.impl.signal :as impl] + [clojure.core.async :as async :refer [go go-loop chan to-chan !]] + [clojure.core.async.impl.protocols :as async-impl] + [jamesmacaulay.async-tools.test :refer (deftest-async)] + [clojure.test :refer (deftest is are testing)])) + #?(:cljs (:require-macros [cljs.core.async.macros :refer [go go-loop]] + [jamesmacaulay.async-tools.test :refer (deftest-async)]) + :clj (:import [java.util.Date]))) + +(deftest-async test-msg-fn-takes-event-and-previous-value-and-sequence-of-source-messages-and-returns-a-message + (go + (let [in1 (z/input 0 :in1) + in2 (z/input 0 :in2) + sig (impl/make-signal {:init-fn (constantly :test-init) + :sources [in1 in2] + :msg-xform (map (fn [payload] (impl/fresh payload)))}) + live-graph (z/spawn sig) + output (async/tap live-graph (chan)) + event1 (impl/->Event :in1 1 101) + event2 (impl/->Event :in2 2 102) + expected1 [event1 + :test-init + [(impl/fresh 1) (impl/cached 0)]] + expected2 [event2 + expected1 + [(impl/cached 1) (impl/fresh 2)]]] + (async/onto-chan live-graph [event1 event2]) + (is (= [expected1 expected2] + (!]] - [clojure.core.async.impl.protocols :as async-impl] - [jamesmacaulay.async-tools.test :refer (deftest-async)] - [clojure.test :refer (deftest is are testing)]) - (:import [java.util.Date])) - -#+cljs -(ns jamesmacaulay.zelkova.signal-test - (:require [jamesmacaulay.async-tools.core :as tools] - [jamesmacaulay.zelkova.signal :as z] - [jamesmacaulay.zelkova.impl.signal :as impl] - [cljs.core.async :as async :refer [chan to-chan !]] - [cljs.core.async.impl.protocols :as async-impl] - [jamesmacaulay.async-tools.test :refer-macros (deftest-async)] - [cemerick.cljs.test :refer-macros (deftest is are testing)]) - (:require-macros [cljs.core.async.macros :refer [go go-loop]])) + #?(:cljs (:require [jamesmacaulay.async-tools.core :as tools] + [jamesmacaulay.zelkova.signal :as z] + [jamesmacaulay.zelkova.impl.signal :as impl] + [cljs.core.async :as async :refer [chan to-chan !]] + [cljs.core.async.impl.protocols :as async-impl] + [cemerick.cljs.test :refer-macros (deftest is are testing)]) + :clj (:require [jamesmacaulay.async-tools.core :as tools] + [jamesmacaulay.zelkova.signal :as z] + [jamesmacaulay.zelkova.impl.signal :as impl] + [clojure.core.async :as async :refer [go go-loop chan to-chan !]] + [clojure.core.async.impl.protocols :as async-impl] + [jamesmacaulay.async-tools.test :refer (deftest-async)] + [clojure.test :refer (deftest is are testing)])) + #?(:cljs (:require-macros [cljs.core.async.macros :refer [go go-loop]] + [jamesmacaulay.async-tools.test :refer (deftest-async)]) + :clj (:import [java.util.Date]))) (defn event-constructor [topic]