79 lines
2.6 KiB
Clojure
79 lines
2.6 KiB
Clojure
(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)))))
|