With that correction, you should see: spec-test=> (transform-fontspecs test-sample) {"283f1EV" {:size 21, :family "c2S6", :color ""}, "BzYMt4eEm" {:size -5, :family "q0xhOE3", :color "bhV3PsVh"}, "uA2i" {:size -5, :family "HHGoD", :color "J47ZX935"}} spec-test=>
On Wed, Oct 30, 2019 at 9:51 PM Sean Corfield <s...@corfield.org> wrote: > (s/def ::fontspecs (s/coll-of ::fontspec)) > > Sorry, I missed that error first time around. s/* is a regex spec but your > argument should be a collection of ::fontspec > > On Wed, Oct 30, 2019 at 9:02 PM Philos Kim <philo...@gmail.com> wrote: > >> Thanks for your answer! >> >> I corrected the code like the following according to your advice. >> >> (s/fdef transform-fontspecs >> :args (s/cat :fontspecs ::fontspecs)) >> >> However, the same error occurs again. >> >> 2019년 10월 31일 목요일 오전 11시 44분 46초 UTC+9, Philos Kim 님의 말: >>> >>> I don't know why the following spec error occurred. >>> >>> Could anyone tell me why? >>> >>> (ns spec-test >>> (:require [clojure.spec.alpha :as s] >>> [clojure.spec.test.alpha :as stest])) >>> >>> ;;; spec definitions >>> >>> (s/def :msds.fontspec/tag #{:fontspec}) >>> >>> (s/def ::id string?) >>> (s/def ::size int?) >>> (s/def ::family string?) >>> (s/def ::color string?) >>> >>> (s/def :msds.fontspec/attrs >>> (s/keys :req-un [::id ::size ::family ::color])) >>> >>> (s/def :msds.fontspec/content (s/cat)) >>> >>> (s/def ::fontspec >>> (s/keys :req-un [:msds.fontspec/tag :msds.fontspec/attrs >>> :msds.fontspec/content])) >>> >>> (s/def ::fontspecs (s/* ::fontspec)) >>> >>> >>> ;;; spec application >>> >>> (defn transform-fontspecs >>> "fontspecs를 사용하기 편리한 형태로 변환한다." >>> [fontspecs] >>> (->> fontspecs >>> (map (fn [{:keys [attrs] :as fontspec}] >>> [(get attrs :id) (dissoc attrs :id)] )) >>> (into {}) )) >>> >>> (s/fdef transform-fontspecs >>> :args ::fontspecs) >>> >>> (stest/instrument `transform-fontspecs) >>> >>> >>> ;;; test code >>> >>> (def test-sample >>> '({:tag :fontspec, >>> :attrs {:id "283f1EV", :size 21, :family "c2S6", :color ""}, >>> :content ()} >>> {:tag :fontspec, >>> :attrs >>> {:id "BzYMt4eEm", :size -5, :family "q0xhOE3", :color "bhV3PsVh"}, >>> :content ()} >>> {:tag :fontspec, >>> :attrs {:id "uA2i", :size -5, :family "HHGoD", :color "J47ZX935"}, >>> :content ()})) >>> >>> (transform-fontspecs test-sample) >>> 2. Unhandled clojure.lang.Compiler$CompilerException >>> Error compiling src/spec_test.clj at (55:1) >>> #:clojure.error{:phase :compile-syntax-check, >>> :line 55, >>> :column 1, >>> :source "/home/philos/work/metapdf/src/spec_test.clj"} >>> Compiler.java: 7648 clojure.lang.Compiler/load >>> REPL: 1 metapdf.core/eval19243 >>> REPL: 1 metapdf.core/eval19243 >>> Compiler.java: 7177 clojure.lang.Compiler/eval >>> Compiler.java: 7132 clojure.lang.Compiler/eval >>> core.clj: 3214 clojure.core/eval >>> core.clj: 3210 clojure.core/eval >>> main.clj: 437 clojure.main/repl/read-eval-print/fn >>> main.clj: 437 clojure.main/repl/read-eval-print >>> main.clj: 458 clojure.main/repl/fn >>> main.clj: 458 clojure.main/repl >>> main.clj: 368 clojure.main/repl >>> RestFn.java: 1523 clojure.lang.RestFn/invoke >>> interruptible_eval.clj: 79 >>> nrepl.middleware.interruptible-eval/evaluate >>> interruptible_eval.clj: 55 >>> nrepl.middleware.interruptible-eval/evaluate >>> interruptible_eval.clj: 142 >>> nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn >>> AFn.java: 22 clojure.lang.AFn/run >>> session.clj: 171 >>> nrepl.middleware.session/session-exec/main-loop/fn >>> session.clj: 170 >>> nrepl.middleware.session/session-exec/main-loop >>> AFn.java: 22 clojure.lang.AFn/run >>> Thread.java: 748 java.lang.Thread/run >>> >>> 1. Caused by clojure.lang.ExceptionInfo >>> Spec assertion failed. >>> >>> Spec: #object[clojure.spec.alpha$regex_spec_impl$reify__2509 >>> 0x3660c4ee "clojure.spec.alpha$regex_spec_impl$reify__2509@3660c4ee"] >>> Value: (({:tag :fontspec, >>> :attrs {:id "283f1EV", :size 21, :family "c2S6", >>> :color ""}, >>> :content ()} >>> {:tag :fontspec, >>> :attrs >>> {:id "BzYMt4eEm", :size -5, :family "q0xhOE3", :color >>> "bhV3PsVh"}, >>> :content ()} >>> {:tag :fontspec, >>> :attrs {:id "uA2i", :size -5, :family "HHGoD", :color >>> "J47ZX935"}, >>> :content ()})) >>> >>> Problems: >>> >>> val: ({:tag :fontspec, >>> :attrs {:id "283f1EV", :size 21, :family "c2S6", >>> :color ""}, >>> :content ()} >>> {:tag :fontspec, >>> :attrs >>> {:id "BzYMt4eEm", :size -5, :family "q0xhOE3", :color >>> "bhV3PsVh"}, >>> :content ()} >>> {:tag :fontspec, >>> :attrs {:id "uA2i", :size -5, :family "HHGoD", :color >>> "J47ZX935"}, >>> :content ()}) >>> in: [0] >>> failed: map? >>> spec: :spec-test/fontspec >>> >>> alpha.clj: 132 >>> clojure.spec.test.alpha/spec-checking-fn/conform! >>> alpha.clj: 140 >>> clojure.spec.test.alpha/spec-checking-fn/fn >>> RestFn.java: 408 clojure.lang.RestFn/invoke >>> spec_test.clj: 55 spec-test/eval19293 >>> spec_test.clj: 55 spec-test/eval19293 >>> Compiler.java: 7177 clojure.lang.Compiler/eval >>> Compiler.java: 7636 clojure.lang.Compiler/load >>> REPL: 1 metapdf.core/eval19243 >>> REPL: 1 metapdf.core/eval19243 >>> Compiler.java: 7177 clojure.lang.Compiler/eval >>> Compiler.java: 7132 clojure.lang.Compiler/eval >>> core.clj: 3214 clojure.core/eval >>> core.clj: 3210 clojure.core/eval >>> main.clj: 437 clojure.main/repl/read-eval-print/fn >>> main.clj: 437 clojure.main/repl/read-eval-print >>> main.clj: 458 clojure.main/repl/fn >>> main.clj: 458 clojure.main/repl >>> main.clj: 368 clojure.main/repl >>> RestFn.java: 1523 clojure.lang.RestFn/invoke >>> interruptible_eval.clj: 79 >>> nrepl.middleware.interruptible-eval/evaluate >>> interruptible_eval.clj: 55 >>> nrepl.middleware.interruptible-eval/evaluate >>> interruptible_eval.clj: 142 >>> nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn >>> AFn.java: 22 clojure.lang.AFn/run >>> session.clj: 171 >>> nrepl.middleware.session/session-exec/main-loop/fn >>> session.clj: 170 >>> nrepl.middleware.session/session-exec/main-loop >>> AFn.java: 22 clojure.lang.AFn/run >>> Thread.java: 748 java.lang.Thread/run >>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clojure@googlegroups.com >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/clojure/c7c5895c-56db-427b-8e40-e10dfe273080%40googlegroups.com >> <https://groups.google.com/d/msgid/clojure/c7c5895c-56db-427b-8e40-e10dfe273080%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Sean A Corfield -- (904) 302-SEAN > An Architect's View -- http://corfield.org/ > World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ > > "Perfection is the enemy of the good." > -- Gustave Flaubert, French realist novelist (1821-1880) > -- Sean A Corfield -- (904) 302-SEAN An Architect's View -- http://corfield.org/ World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ "Perfection is the enemy of the good." -- Gustave Flaubert, French realist novelist (1821-1880) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CAD4thx8zr587N1cQAjZV_dZQVAyt5CJ3-CT0O2RMp46NJseLcQ%40mail.gmail.com.