|
10 | 10 | (:require [clojure.test :as test :refer [deftest is testing]] |
11 | 11 | [cljs.closure :as closure] |
12 | 12 | [cljs.util :as util] |
13 | | - [cljs.module-graph :as module-graph])) |
| 13 | + [cljs.module-graph :as module-graph]) |
| 14 | + (:import [clojure.lang ExceptionInfo])) |
14 | 15 |
|
15 | 16 | (def opts {:output-dir "out"}) |
16 | 17 |
|
|
24 | 25 | :depends-on [:shared] |
25 | 26 | :output-to (str output-dir "/page2.js")}}) |
26 | 27 |
|
27 | | -(defn inputs [{:keys [output-dir] :as opts}] |
28 | | - [{:provides '[goog] |
29 | | - :out-file (str output-dir "/goog/base.js")} |
30 | | - {:provides '[cljs.core] |
31 | | - :out-file (str output-dir "/cljs/core.js")} |
32 | | - {:provides ["cljs.reader"] |
33 | | - :requires ["cljs.core"] |
34 | | - :out-file (str output-dir "/cljs/reader.js")} |
35 | | - {:provides '[events "event.types"] |
36 | | - :requires ["cljs.core"] |
37 | | - :out-file (str output-dir "/events.js")} |
38 | | - {:provides '[shared.a] |
39 | | - :requires ["cljs.core"] |
40 | | - :out-file (str output-dir "/shared/a.js")} |
41 | | - {:provides '[shared.b] |
42 | | - :requires '[cljs.core] |
43 | | - :out-file (str output-dir "/shared/b.js")} |
44 | | - {:provides ["page1.a"] |
45 | | - :requires ["cljs.core" "cljs.reader" "events" 'shared.a] |
46 | | - :out-file (str output-dir "/page1/a.js")} |
47 | | - {:provides ["page1.b"] |
48 | | - :requires '[cljs.core shared.b] |
49 | | - :out-file (str output-dir "/page1/b.js")} |
50 | | - {:provides ["page2.a"] |
51 | | - :requires ["cljs.core" "events" 'shared.a] |
52 | | - :out-file (str output-dir "/page2/a.js")} |
53 | | - {:provides ["page2.b"] |
54 | | - :requires ['cljs.core 'shared.b] |
55 | | - :out-file (str output-dir "/page2/b.js")}]) |
| 28 | +(defn inputs |
| 29 | + ([] |
| 30 | + (inputs {:output-dir "out"})) |
| 31 | + ([{:keys [output-dir] :as opts}] |
| 32 | + [{:provides '[goog] |
| 33 | + :out-file (str output-dir "/goog/base.js")} |
| 34 | + {:provides '[cljs.core] |
| 35 | + :out-file (str output-dir "/cljs/core.js")} |
| 36 | + {:provides ["cljs.reader"] |
| 37 | + :requires ["cljs.core"] |
| 38 | + :out-file (str output-dir "/cljs/reader.js")} |
| 39 | + {:provides '[events "event.types"] |
| 40 | + :requires ["cljs.core"] |
| 41 | + :out-file (str output-dir "/events.js")} |
| 42 | + {:provides '[shared.a] |
| 43 | + :requires ["cljs.core"] |
| 44 | + :out-file (str output-dir "/shared/a.js")} |
| 45 | + {:provides '[shared.b] |
| 46 | + :requires '[cljs.core] |
| 47 | + :out-file (str output-dir "/shared/b.js")} |
| 48 | + {:provides ["page1.a"] |
| 49 | + :requires ["cljs.core" "cljs.reader" "events" 'shared.a] |
| 50 | + :out-file (str output-dir "/page1/a.js")} |
| 51 | + {:provides ["page1.b"] |
| 52 | + :requires '[cljs.core shared.b] |
| 53 | + :out-file (str output-dir "/page1/b.js")} |
| 54 | + {:provides ["page2.a"] |
| 55 | + :requires ["cljs.core" "events" 'shared.a] |
| 56 | + :out-file (str output-dir "/page2/a.js")} |
| 57 | + {:provides ["page2.b"] |
| 58 | + :requires ['cljs.core 'shared.b] |
| 59 | + :out-file (str output-dir "/page2/b.js")}])) |
56 | 60 |
|
57 | 61 | (deftest test-add-cljs-base |
58 | 62 | (is (true? (contains? (module-graph/add-cljs-base (modules opts)) :cljs-base)))) |
|
151 | 155 | (deftest test-module-for |
152 | 156 | (is (= :page1 (module-graph/module-for 'page1.a (modules opts)))) |
153 | 157 | (is (= :page1 (module-graph/module-for "page1.a" (modules opts))))) |
| 158 | + |
| 159 | +(def circular-inputs |
| 160 | + [{:provides ["foo.core"] |
| 161 | + :requires ["bar.core"]} |
| 162 | + {:provides ["bar.core"] |
| 163 | + :requires ["baz.core"]} |
| 164 | + {:provides ["baz.core"] |
| 165 | + :requires ["foo.core"]}]) |
| 166 | + |
| 167 | +(deftest test-circular-deps |
| 168 | + (is (nil? (module-graph/validate-inputs (inputs)))) |
| 169 | + (is (thrown? ExceptionInfo (module-graph/validate-inputs circular-inputs)))) |
0 commit comments