babashka/test-resources/lib_tests/clojure/data/csv_test.clj

80 lines
2.6 KiB
Clojure
Raw Normal View History

2020-04-16 21:24:20 +00:00
(ns clojure.data.csv-test
(:use
[clojure.test :only (deftest is)]
[clojure.data.csv :only (read-csv write-csv)])
(:import
[java.io Reader StringReader StringWriter EOFException]))
(def ^{:private true} simple
"Year,Make,Model
1997,Ford,E350
2000,Mercury,Cougar
")
(def ^{:private true} simple-alt-sep
"Year;Make;Model
1997;Ford;E350
2000;Mercury;Cougar
")
(def ^{:private true} complicated
"1997,Ford,E350,\"ac, abs, moon\",3000.00
1999,Chevy,\"Venture \"\"Extended Edition\"\"\",\"\",4900.00
1999,Chevy,\"Venture \"\"Extended Edition, Very Large\"\"\",\"\",5000.00
1996,Jeep,Grand Cherokee,\"MUST SELL!
air, moon roof, loaded\",4799.00")
(deftest reading
(let [csv (read-csv simple)]
(is (= (count csv) 3))
(is (= (count (first csv)) 3))
(is (= (first csv) ["Year" "Make" "Model"]))
(is (= (last csv) ["2000" "Mercury" "Cougar"])))
(let [csv (read-csv simple-alt-sep :separator \;)]
(is (= (count csv) 3))
(is (= (count (first csv)) 3))
(is (= (first csv) ["Year" "Make" "Model"]))
(is (= (last csv) ["2000" "Mercury" "Cougar"])))
(let [csv (read-csv complicated)]
(is (= (count csv) 4))
(is (= (count (first csv)) 5))
(is (= (first csv)
["1997" "Ford" "E350" "ac, abs, moon" "3000.00"]))
(is (= (last csv)
["1996" "Jeep" "Grand Cherokee", "MUST SELL!\nair, moon roof, loaded" "4799.00"]))))
(deftest reading-and-writing
(let [string-writer (StringWriter.)]
(->> simple read-csv (write-csv string-writer))
(is (= simple
(str string-writer)))))
(deftest throw-if-quoted-on-eof
(let [s "ab,\"de,gh\nij,kl,mn"]
(try
(doall (read-csv s))
(is false "No exception thrown")
(catch Exception e
(is (or (instance? java.io.EOFException e)
(and (instance? RuntimeException e)
(instance? java.io.EOFException (.getCause e)))))))))
(deftest parse-line-endings
(let [csv (read-csv "Year,Make,Model\n1997,Ford,E350")]
(is (= 2 (count csv)))
(is (= ["Year" "Make" "Model"] (first csv)))
(is (= ["1997" "Ford" "E350"] (second csv))))
(let [csv (read-csv "Year,Make,Model\r\n1997,Ford,E350")]
(is (= 2 (count csv)))
(is (= ["Year" "Make" "Model"] (first csv)))
(is (= ["1997" "Ford" "E350"] (second csv))))
(let [csv (read-csv "Year,Make,Model\r1997,Ford,E350")]
(is (= 2 (count csv)))
(is (= ["Year" "Make" "Model"] (first csv)))
(is (= ["1997" "Ford" "E350"] (second csv))))
(let [csv (read-csv "Year,Make,\"Model\"\r1997,Ford,E350")]
(is (= 2 (count csv)))
(is (= ["Year" "Make" "Model"] (first csv)))
(is (= ["1997" "Ford" "E350"] (second csv)))))