From 54d75297ea8b190a3b91bd662deb61e670e9f9ef Mon Sep 17 00:00:00 2001 From: David Bremner Date: Thu, 5 May 2022 08:29:20 -0300 Subject: 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 --- tests/data/util.lisp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/package.lisp | 2 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 tests/data/util.lisp (limited to 'tests') 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))) -- cgit v1.2.3