From 6f1134339758d76d60031550fd332dbbd4d46858 Mon Sep 17 00:00:00 2001 From: Dave Della Costa Date: Wed, 8 Apr 2015 18:36:50 +0900 Subject: [PATCH] Adds a little testing of core functionality. --- src/views/core.clj | 2 +- test/views/core_test.clj | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 test/views/core_test.clj diff --git a/src/views/core.clj b/src/views/core.clj index 5bb8de3..52ccffd 100644 --- a/src/views/core.clj +++ b/src/views/core.clj @@ -238,4 +238,4 @@ (start-update-watcher! view-system 1000) - ) \ No newline at end of file + ) diff --git a/test/views/core_test.clj b/test/views/core_test.clj new file mode 100644 index 0000000..3d19b0e --- /dev/null +++ b/test/views/core_test.clj @@ -0,0 +1,37 @@ +(ns views.core-test + (:require + [clojure.test :refer [is deftest use-fixtures]] + [views.protocols :refer [IView id data relevant?]] + [views.core :as v])) + +(def memory-system (atom {})) + +(defrecord MemoryView [id ks] + IView + (id [_] id) + (data [_ namespace parameters] + (get-in @memory-system (-> [namespace] (into ks) (into parameters)))) + (relevant? [_ namespace parameters hints] + (some #(and (= namespace (:namespace %)) (= ks (:hint %))) hints))) + +(def example-view-system + {:views {:foo (MemoryView. :foo [:foo]) + :bar (MemoryView. :bar [:bar]) + :baz (MemoryView. :baz [:baz])} + :send-fn (fn [_ _])}) + +(deftest subscribes-views + (let [view-system (atom example-view-system) + subscribe1 (v/subscribe! view-system :namespace :foo [] 1) + subscribe2 (v/subscribe! view-system :namespace :bar [] 2)] + (while (or (not (realized? subscribe1)) (not (realized? subscribe2)))) ; block until futures are realized + (is (= #{[:namespace :bar []] [:namespace :foo []]} + (v/subscribed-views @view-system))))) + +(deftest unsubscribes-a-view + (let [view-system (atom example-view-system) + subscribe1 (v/subscribe! view-system :namespace :foo [] 1) + subscribe2 (v/subscribe! view-system :namespace :bar [] 2)] + (while (or (not (realized? subscribe1)) (not (realized? subscribe2)))) ; block until futures are realized + (v/unsubscribe! view-system :namespace :foo [] 1) + (is (= #{[:namespace :bar []]} (v/subscribed-views @view-system)))))