Skip to content

Commit e9faf34

Browse files
Main work
1 parent 4902a4e commit e9faf34

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

bin/generate-tests

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
3+
# Synopsis:
4+
# Generate the tests for each exercise with a generator template.
5+
6+
# Example: generate tests for all exercises with a generator template
7+
# bin/generate-tests
8+
9+
# Example: generate tests for a single exercise with a generator template
10+
# bin/generate-tests two-fer
11+
12+
set -eo pipefail
13+
14+
die() { echo "$*" >&2; exit 1; }
15+
16+
required_tool() {
17+
command -v "${1}" >/dev/null 2>&1 ||
18+
die "${1} is required but not installed. Please install it and make sure it's in your PATH."
19+
}
20+
21+
required_tool clj
22+
23+
exercise_slug="${1}"
24+
25+
if [ -z "${exercise_slug}" ]; then
26+
clj -X generator/run
27+
else
28+
clj -X generator/run :exercise "${exercise_slug}"
29+
fi

generators/src/generator.clj

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
(ns generator
2-
(:require [canonical-data]
2+
(:require [clojure.string :as str]
3+
[canonical-data]
34
[templates]
45
[log]))
56

6-
(defn- slugs-to-generate [args]
7+
(defn- slugs-to-generate [slug]
78
(let [slugs templates/exercises-with-template]
8-
(if-let [slug (first args)]
9+
(if (str/blank? slug)
10+
slugs
911
(if (contains? slugs slug)
1012
[slug]
11-
(log/error (str "No template found for exercise '" slug "'")))
12-
slugs)))
13+
(log/error (str "No template found for exercise '" slug "'"))))))
1314

14-
(defn- run [args]
15+
(defn- run [{:keys [exercise]}]
1516
(canonical-data/sync-repo)
16-
(doseq [slug (slugs-to-generate args)]
17+
(doseq [slug (slugs-to-generate (str exercise))]
1718
(log/normal (str "Generating tests for exercise '" slug "'"))
1819
(templates/generate-tests-file slug (canonical-data/test-cases slug))))

generators/src/templates.clj

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
(file-seq)
99
(filter #(.isFile %))
1010
(filter #(= "generator.template" (.getName %)))
11-
(mapv #(-> % (.getParentFile) (.getParentFile) (.getName)))))
11+
(map #(-> % (.getParentFile) (.getParentFile) (.getName)))
12+
(set)))
1213

1314
(defn- render-template [data template]
1415
(selmer/render (slurp template) data))

0 commit comments

Comments
 (0)