From 522c8b6ea41d67ebba521d79b9eec7704fab29d0 Mon Sep 17 00:00:00 2001 From: oakes Date: Sat, 23 Aug 2014 22:59:36 -0400 Subject: [PATCH] Add more assertions to core.clj --- src/play_clj/core.clj | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/play_clj/core.clj b/src/play_clj/core.clj index f399d16..39883f4 100644 --- a/src/play_clj/core.clj +++ b/src/play_clj/core.clj @@ -466,13 +466,11 @@ via the screen map. (println (:distance screen)) ; the end distance between fingers entities))" [n & options] - ; make sure the options are valid - (let [s (format "Unexpected value in (defscreen %s). Make sure you give it + (let [s (format "Unexpected value in (defscreen %s). You need to give it keywords and functions in pairs." (str n))] (assert (even? (count options)) s) (assert (= 0 (count (remove keyword? (keys (apply hash-map options))))) s)) - ; return form calling defscreen* `(let [fn-syms# (->> (for [[k# v#] ~(apply hash-map options)] [k# (intern *ns* (symbol (str '~n "-" (name k#))) v#)]) flatten @@ -506,6 +504,8 @@ keywords and functions in pairs." (set-screen! my-game main-screen text-screen)" [^Game game-object & screen-objects] + (assert (isa? (type game-object) Game) "The first argument in set-screen! +must be the defgame object.") (let [run-fn! (fn [k & args] (doseq [screen screen-objects] (apply (get screen k) args)))] @@ -547,8 +547,13 @@ is the atom storing the screen map behind the scenes. Returns the updated `screen` map. (update! screen :renderer (stage))" - [{:keys [update-fn!] :as screen} & args] - (update-fn! assoc args)) + [screen & args] + (assert (some? (:update-fn! screen)) "The first argument in update! must be +the screen map.") + (assert (even? (count args)) "You need to give update! your screen followed by +pairs of values, such as +(update! screen :renderer (stage) :camera (orthographic)).") + ((:update-fn! screen) assoc args)) (defn run! "Runs a function defined in another screen. You may optionally pass a series @@ -557,6 +562,10 @@ of key-value pairs, which will be given to the function via its screen map. (run! my-other-screen :on-show) (run! my-other-screen :on-change-color :color :blue)" [screen-object fn-name & options] + (assert (some? (:screen screen-object)) "The first argument in run! must be +a defscreen object, such as main-screen.") + (assert (keyword? fn-name) "The second argument in run! must be a keyword.") + (assert (even? (count options)) "Unexpected argument count in run!.") (let [execute-fn! (-> screen-object :screen deref :execute-fn!) screen-fn (-> screen-object :options (get fn-name))] (apply execute-fn! screen-fn options)