aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2022-05-05 08:29:20 -0300
committerSean Whitton <spwhitton@spwhitton.name>2022-05-05 12:26:10 -0700
commit54d75297ea8b190a3b91bd662deb61e670e9f9ef (patch)
treecb0027e12ac3f8de9319ed98c80ea2d721f1f1d7 /tests
parentdd44f19023f4cc9a70b431aff999c9a771b364b1 (diff)
downloadconsfigurator-54d75297ea8b190a3b91bd662deb61e670e9f9ef.tar.gz
add package CONSFIGURATOR.DATA.UTIL
This package is intended to provide a home for utility functions used by multiple data sources. Initially move a local function from CONSFIGURATOR.DATA.FILES-TREE, and slightly generalize it to support an extension or TYPE argument. Note that the goal of LITERAL-DATA-PATHNAME is to map (IDEN1 IDEN2) to existing paths in a user-maintained file hierarchy. This is quite different from DATA-PATHNAME, which escapes various characters to map to a safe internal filename, effectively flattening a directory hierarchy into a single level. Signed-off-by: David Bremner <david@tethera.net>
Diffstat (limited to 'tests')
-rw-r--r--tests/data/util.lisp67
-rw-r--r--tests/package.lisp2
2 files changed, 68 insertions, 1 deletions
diff --git a/tests/data/util.lisp b/tests/data/util.lisp
new file mode 100644
index 0000000..a04b8be
--- /dev/null
+++ b/tests/data/util.lisp
@@ -0,0 +1,67 @@
+(in-package :consfigurator/tests)
+(named-readtables:in-readtable :consfigurator)
+(in-consfig "consfigurator/tests")
+
+;; relative parts
+(deftest literal-data-pathname.1
+ (unix-namestring (literal-data-pathname "/home/user/data/" "foo" "bar"))
+ "/home/user/data/foo/bar")
+
+;; missing trailing / on part 1
+(deftest literal-data-pathname.2
+ (unix-namestring (literal-data-pathname "/home/user/data" "foo" "bar"))
+ "/home/user/data/foo/bar")
+
+;; absolute part 2
+(deftest literal-data-pathname.3
+ (unix-namestring (literal-data-pathname "/home/user/data/" "/foo" "bar"))
+ "/home/user/data/foo/bar")
+
+;; relative part 2, "_"
+(deftest literal-data-pathname.4
+ (unix-namestring (literal-data-pathname "/home/user/data/" "_foo" "bar"))
+ "/home/user/data/_foo/bar")
+
+;; absolute part 3
+(deftest literal-data-pathname.5
+ (unix-namestring (literal-data-pathname "/home/user/" "/data" "/foo/bar"))
+ "/home/user/data/foo/bar")
+
+;; with type
+(deftest literal-data-pathname.6
+ (unix-namestring
+ (literal-data-pathname "/home/user/" "/data" "/foo/bar" :type "txt"))
+ "/home/user/data/foo/bar.txt")
+
+;; base-path is pathname
+
+(deftest literal-data-pathname.7
+ (unix-namestring (literal-data-pathname #P"/home/user/data/" "foo" "bar"))
+ "/home/user/data/foo/bar")
+
+;; base-path not a directory
+(deftest literal-data-pathname.8
+ (handler-case
+ (literal-data-pathname #P"/home/user/data" "foo" "bar")
+ (simple-program-error (c) "fail"))
+ "fail")
+
+;; extra '/' at end
+(deftest literal-data-pathname.9
+ (unix-namestring (literal-data-pathname "/home/user/data//" "foo" "bar"))
+ "/home/user/data/foo/bar")
+
+;; extra '/' in middle
+(deftest literal-data-pathname.10
+ (unix-namestring (literal-data-pathname "/home/user//data/" "foo" "bar"))
+ "/home/user/data/foo/bar")
+
+;; extra '/' part 2
+(deftest literal-data-pathname.11
+ (unix-namestring (literal-data-pathname "/home/user/data/" "foo//" "bar"))
+ "/home/user/data/foo/bar")
+
+;; extra '/' part 3
+(deftest literal-data-pathname.12
+ (unix-namestring (literal-data-pathname "/home/user/data/" "foo" "//bar"))
+ "/home/user/data/foo/bar")
diff --git a/tests/package.lisp b/tests/package.lisp
index 286243c..0a303f0 100644
--- a/tests/package.lisp
+++ b/tests/package.lisp
@@ -1,5 +1,5 @@
(in-package :cl-user)
(defpackage :consfigurator/tests
- (:use #:cl #:consfigurator #+sbcl :sb-rt #-sbcl :rtest)
+ (:use #:cl #:consfigurator #:consfigurator.data.util #+sbcl :sb-rt #-sbcl :rtest)
(:local-nicknames (#:file #:consfigurator.property.file)))