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 <[email protected]> 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 <[email protected]> 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 [email protected]
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected]
>> 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 [email protected].
>> 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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/CAD4thx8zr587N1cQAjZV_dZQVAyt5CJ3-CT0O2RMp46NJseLcQ%40mail.gmail.com.