|
1 | 1 | (ns getclojure.extract-test
|
2 | 2 | (:require
|
3 |
| - [clojure.test :refer [deftest is]] |
4 |
| - [getclojure.extract :as subject])) |
| 3 | + [clojure.test :refer [deftest testing is]] |
| 4 | + [getclojure.extract :as subject] |
| 5 | + [clojure.java.io :as io])) |
5 | 6 |
|
6 | 7 | (deftest extract-sexps-test
|
7 |
| - (is (= '() |
8 |
| - (subject/extract-sexps ""))) |
| 8 | + (testing "We extract s-expressions from strings as expected." |
| 9 | + (is (= '() |
| 10 | + (subject/extract-sexps ""))) |
9 | 11 |
|
10 |
| - (is (= (into #{} ["(inc 1)" "(inc 2)" "()"]) |
11 |
| - (into #{} (subject/extract-sexps "(inc 1) blah blah () (inc 2)")))) |
| 12 | + (is (= (into #{} ["(inc 1)" "(inc 2)" "()"]) |
| 13 | + (into #{} (subject/extract-sexps "(inc 1) blah blah () (inc 2)")))) |
12 | 14 |
|
13 |
| - (is (= (into #{} ["(+ (inc 1))" "(inc 2)"]) |
14 |
| - (into #{} (subject/extract-sexps "(+ (inc 1)) (inc 2)")))) |
| 15 | + (is (= (into #{} ["(+ (inc 1))" "(inc 2)"]) |
| 16 | + (into #{} (subject/extract-sexps "(+ (inc 1)) (inc 2)")))) |
15 | 17 |
|
16 |
| - (is (= '() |
17 |
| - (subject/extract-sexps nil)))) |
| 18 | + (is (= '() |
| 19 | + (subject/extract-sexps nil))))) |
| 20 | + |
| 21 | +(deftest logfile->mapseq-test |
| 22 | + (testing "logfile->mapseq returns maps with expected data for our sample html file" |
| 23 | + (let [logfile (io/as-file (io/resource "logs/2017-06-29.html")) |
| 24 | + result (subject/logfile->mapseq logfile)] |
| 25 | + |
| 26 | + (is (every? (fn [m] (some? (:nickname m))) |
| 27 | + result) |
| 28 | + "Every line contains a nickname despite some entries missing them") |
| 29 | + |
| 30 | + (is (every? (fn [m] (some? (:content m))) |
| 31 | + result) |
| 32 | + "Every line contains content") |
| 33 | + |
| 34 | + (is (every? (fn [m] (some? (:timestamp m))) |
| 35 | + result) |
| 36 | + "Every line contains a timestamp") |
| 37 | + |
| 38 | + (is (every? (fn [m] (some? (:date m))) |
| 39 | + result) |
| 40 | + "Every line contains a date") |
| 41 | + |
| 42 | + (is (= 1 (-> (filter (fn [m] (:sexps m)) result) |
| 43 | + count)) |
| 44 | + "Only one line in the log contains s-expressions") |
| 45 | + |
| 46 | + (is (= 3 (-> (filter (fn [m] (:sexps m)) result) |
| 47 | + first |
| 48 | + :sexps |
| 49 | + count)) |
| 50 | + "The line containing s-expressions has 3 expressions")))) |
| 51 | + |
| 52 | +(deftest forward-propagate-test |
| 53 | + (testing "That we fill nil values with the last seen value for the same keyword" |
| 54 | + (let [example-input [{:nickname "bill" :content "ciil"} |
| 55 | + {:nickname nil :content "cool*"}] |
| 56 | + empty-start [{:nickname nil :content "a"} |
| 57 | + {:nickname "ted" :content "b"}]] |
| 58 | + (is (= [{:nickname "bill" |
| 59 | + :content "ciil"} |
| 60 | + {:nickname "bill" |
| 61 | + :content "cool*"}] |
| 62 | + (subject/forward-propagate example-input :nickname)) |
| 63 | + "We carry forward the nickname to the next nil value") |
| 64 | + (is (= [{:nickname nil |
| 65 | + :content "a"} |
| 66 | + {:nickname "ted" |
| 67 | + :content "b"}] |
| 68 | + (subject/forward-propagate empty-start :nickname)) |
| 69 | + "If we start with a nil value, we don't clobber the next entry's value") |
| 70 | + (is (= [{:nickname "bill" |
| 71 | + :content "ciil"} |
| 72 | + {:nickname "bill" |
| 73 | + :content "cool*"} |
| 74 | + {:nickname "bill" |
| 75 | + :content "how is everyone?"}] |
| 76 | + (subject/forward-propagate (conj example-input {:nickname nil |
| 77 | + :content "how is everyone?"}) |
| 78 | + :nickname)) |
| 79 | + "We carry forward the nickname to all future nil entries, not just the next one")))) |
0 commit comments