babashka/test-resources/lib_tests/clojure_csv/test/utils.clj
Gabriel Horner 4e7d04f672
Add libtest (#1112)
* Add add-libtest script and add 2 libraries with it

* Add tests for 3 existing libraries
2021-12-21 19:25:10 +01:00

112 lines
5.1 KiB
Clojure

(ns clojure-csv.test.utils
"Some whitebox testing of the private utility functions used in core."
(:import [java.io StringReader])
;; TEST-FIX: Had to require since use caused conflict which bb failed on
(:require [clojure-csv.core])
(:use clojure.test
clojure.java.io))
(def default-options {:delimiter \, :quote-char \"
:strict false :end-of-line nil})
(deftest eol-at-reader-pos?
;; Testing the private function to check for EOLs
(is (= true (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "\n") nil)))
(is (= true (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "\r\n")
nil)))
(is (= true (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "\nabc")
nil)))
(is (= true (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "\r\nabc")
nil)))
(is (= false (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "\r\tabc")
nil)))
;; Testing for user-specified EOLs
(is (= true (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "abc")
"abc")))
(is (= true (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "abcdef")
"abc")))
(is (= false (#'clojure-csv.core/eol-at-reader-pos? (StringReader. "ab")
"abc"))))
(deftest skip-past-eol
(is (= (int \c)
(let [rdr (StringReader. "\nc")]
(#'clojure-csv.core/skip-past-eol rdr)
(.read rdr))))
(is (= (int \c)
(let [rdr (StringReader. "\r\nc")]
(#'clojure-csv.core/skip-past-eol rdr)
(.read rdr))))
(is (= (int \c)
(let [rdr (StringReader. "QQQc")]
(#'clojure-csv.core/skip-past-eol rdr "QQQ")
(.read rdr)))))
(deftest read-unquoted-field
(let [{:keys [delimiter quote-char strict end-of-line]} default-options]
(is (= "abc" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abc,def")
delimiter quote-char strict end-of-line)))
(is (= "abc" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abc")
delimiter quote-char strict end-of-line)))
(is (= "abc" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abc\n")
delimiter quote-char strict end-of-line)))
(is (= "abc" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abc\r\n")
delimiter quote-char strict end-of-line)))
(is (= "abc" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abcQQQ")
delimiter quote-char strict "QQQ")))
(is (= "abc\n" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abc\nQQQ")
delimiter quote-char strict "QQQ")))
(is (= "abc\"" (#'clojure-csv.core/read-unquoted-field
(StringReader. "abc\",")
delimiter quote-char strict end-of-line)))
(is (= "" (#'clojure-csv.core/read-unquoted-field
(StringReader. ",,,")
delimiter quote-char strict end-of-line)))
(is (thrown? java.lang.Exception
(#'clojure-csv.core/read-unquoted-field
(StringReader. "abc\",")
delimiter quote-char true end-of-line)))))
(deftest escaped-quote-at-reader-pos?
(is (= true (#'clojure-csv.core/escaped-quote-at-reader-pos?
(StringReader. "\"\"")
(int \"))))
(is (= true (#'clojure-csv.core/escaped-quote-at-reader-pos?
(StringReader. "\"\"abc")
(int \"))))
(is (= false (#'clojure-csv.core/escaped-quote-at-reader-pos?
(StringReader. "\"abc")
(int \"))))
(is (= false (#'clojure-csv.core/escaped-quote-at-reader-pos?
(StringReader. "abc")
(int \")))))
(deftest read-quoted-field
(let [{:keys [delimiter quote-char strict]} default-options
delimiter (int delimiter)
quote-char (int quote-char)]
(is (= "abc" (#'clojure-csv.core/read-quoted-field
(StringReader. "\"abc\"")
delimiter quote-char strict)))
(is (= "abc" (#'clojure-csv.core/read-quoted-field
(StringReader. "\"abc\",def")
delimiter quote-char strict)))
(is (= "ab\"c" (#'clojure-csv.core/read-quoted-field
(StringReader. "\"ab\"\"c\"")
delimiter quote-char strict)))
(is (= "ab\nc" (#'clojure-csv.core/read-quoted-field
(StringReader. "\"ab\nc\"")
delimiter quote-char strict)))
(is (= "ab,c" (#'clojure-csv.core/read-quoted-field
(StringReader. "\"ab,c\"")
delimiter quote-char strict)))
(is (thrown? java.lang.Exception
(#'clojure-csv.core/read-quoted-field
(StringReader. "\"abc")
delimiter quote-char true)))))