|
76 | 76 | [(or (resolve symb)
|
77 | 77 | (throw (ex-info (format "Unable to resolve test named %s" symb) {:test-symbol symb})))])
|
78 | 78 |
|
79 |
| -(defn- excluded-tags |
80 |
| - "Return the set of all tags in an element's metadata that are also in the `:exclude-tags` options." |
81 |
| - [element options] |
82 |
| - (when-let [excluded-tags (not-empty (set (:exclude-tags options)))] |
83 |
| - (let [ns-tags (-> element meta keys set)] |
84 |
| - (not-empty (set/intersection excluded-tags ns-tags))))) |
85 |
| - |
86 |
| -(defn- filter-tests-by-tag |
87 |
| - "Filter out the test cases with tags that are also in the `:exclude-tags` options." |
88 |
| - [tests options] |
89 |
| - (filter (fn [test] |
90 |
| - (if-let [excluded-tags (not-empty (excluded-tags test options))] |
91 |
| - (println (format |
92 |
| - "Skipping test `%s` due to excluded tag(s): %s" |
93 |
| - (:name (meta test)) |
94 |
| - (->> excluded-tags sort (str/join ",")))) |
95 |
| - test)) |
96 |
| - tests)) |
| 79 | +(defn- skip-by-tags? |
| 80 | + "Whether we should skip a namespace or test var because it has tags in `:exclude-tags` or is missing tags in |
| 81 | + `:only-tags`. Prints debug message as a side-effect." |
| 82 | + [ns-or-var options] |
| 83 | + (let [tags-set (fn [ns-or-var] |
| 84 | + (not-empty (set (keys (meta ns-or-var))))) |
| 85 | + excluded-tag? (when-let [exclude-tags (not-empty (set (:exclude-tags options)))] |
| 86 | + (when-let [disallowed-tags (not-empty (set/intersection exclude-tags (tags-set ns-or-var)))] |
| 87 | + (printf |
| 88 | + "Skipping `%s` due to excluded tag(s): %s\n" |
| 89 | + (if (var? ns-or-var) |
| 90 | + (:name (meta ns-or-var)) |
| 91 | + (ns-name ns-or-var)) |
| 92 | + (->> disallowed-tags sort (str/join ","))) |
| 93 | + true)) |
| 94 | + missing-tag? (when (var? ns-or-var) |
| 95 | + (let [varr ns-or-var] |
| 96 | + (when-let [only-tags (not-empty (set (:only-tags options)))] |
| 97 | + (when-let [missing-tags (not-empty (set/difference only-tags |
| 98 | + (tags-set (:ns (meta varr))) |
| 99 | + (tags-set varr)))] |
| 100 | + (printf |
| 101 | + "Skipping `%s` due to missing only tag(s): %s\n" |
| 102 | + (:name (meta varr)) |
| 103 | + (->> missing-tags sort (str/join ","))) |
| 104 | + true))))] |
| 105 | + (or excluded-tag? missing-tag?))) |
97 | 106 |
|
98 | 107 | (defn- find-tests-for-namespace-symbol
|
99 | 108 | [ns-symb options]
|
100 | 109 | (load-test-namespace ns-symb)
|
101 |
| - (if-let [excluded-tags (not-empty (excluded-tags (find-ns ns-symb) options))] |
102 |
| - (println (format |
103 |
| - "Skipping tests in `%s` due to excluded tag(s): %s" |
104 |
| - ns-symb |
105 |
| - (->> excluded-tags sort (str/join ",")))) |
106 |
| - (filter-tests-by-tag |
107 |
| - (eftest.runner/find-tests ns-symb) |
108 |
| - options))) |
| 110 | + (when-not (skip-by-tags? (find-ns ns-symb) options) |
| 111 | + (remove #(skip-by-tags? % options) |
| 112 | + (eftest.runner/find-tests ns-symb)))) |
109 | 113 |
|
110 | 114 | ;; a test namespace or individual test
|
111 | 115 | (defmethod find-tests clojure.lang.Symbol
|
|
0 commit comments