From ef5ad1de6de4c8dcd4cb063df59a2d9d02cd1cda Mon Sep 17 00:00:00 2001 From: nathanmarz Date: Fri, 17 Feb 2017 12:05:12 -0500 Subject: [PATCH] fix transforms on subvectors to maintain the type as a vector type --- CHANGES.md | 1 + src/clj/com/rpl/specter/navs.cljc | 6 +++--- test/com/rpl/specter/core_test.cljc | 12 ++++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f19c4fd..fc8ae5c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ * Dynamic navs automatically compile sequence returns if completely static * Eliminate reflection warnings for clj (thanks @mpenet) * Bug fix: Collected vals now properly passed to subpaths for `if-path`, `selected?`, and `not-selected?` +* Bug fix: `LAST`, `FIRST`, `srange`, `BEGINNING`, and `END` properly transform subvector types to a vector type ## 0.13.2 diff --git a/src/clj/com/rpl/specter/navs.cljc b/src/clj/com/rpl/specter/navs.cljc index 0868ce6..30ce51f 100644 --- a/src/clj/com/rpl/specter/navs.cljc +++ b/src/clj/com/rpl/specter/navs.cljc @@ -99,7 +99,7 @@ (clojure.lang.MapEntry. newk newv)))) - #?(:clj clojure.lang.PersistentVector :cljs cljs.core/PersistentVector) + #?(:clj clojure.lang.IPersistentVector :cljs cljs.core/PersistentVector) (all-transform [structure next-fn] (into [] (comp (map next-fn) @@ -360,7 +360,7 @@ (prepend-one [_ elem] (list elem)) - #?(:clj clojure.lang.PersistentVector :cljs cljs.core/PersistentVector) + #?(:clj clojure.lang.IPersistentVector :cljs cljs.core/PersistentVector) (append-all [structure elements] (reduce conj structure elements)) (prepend-all [structure elements] @@ -436,7 +436,7 @@ (extend-protocol UpdateExtremes - #?(:clj clojure.lang.PersistentVector :cljs cljs.core/PersistentVector) + #?(:clj clojure.lang.IPersistentVector :cljs cljs.core/PersistentVector) (update-first [v afn] (let [val (nth v 0)] (assoc v 0 (afn val)))) diff --git a/test/com/rpl/specter/core_test.cljc b/test/com/rpl/specter/core_test.cljc index df9ba59..ff86cf4 100644 --- a/test/com/rpl/specter/core_test.cljc +++ b/test/com/rpl/specter/core_test.cljc @@ -1442,3 +1442,15 @@ (is (predand= list? '(1) (setval s/BEFORE-ELEM 1 nil))) (is (= #{1 2 3} (setval s/NONE-ELEM 3 #{1 2}))) ) + +(deftest subvec-test + (let [v (subvec [1] 0)] + (is (predand= vector? [2] (transform s/FIRST inc v))) + (is (predand= vector? [2] (transform s/LAST inc v))) + (is (predand= vector? [2] (transform s/ALL inc v))) + (is (predand= vector? [0 1] (setval s/BEGINNING [0] v))) + (is (predand= vector? [1 0] (setval s/END [0] v))) + (is (predand= vector? [0 1] (setval s/BEFORE-ELEM 0 v))) + (is (predand= vector? [1 0] (setval s/AFTER-ELEM 0 v))) + (is (predand= vector? [1 0] (setval (s/srange 1 1) [0] v))) + ))