license change
[lnf] / test / test
1 #!/bin/bash
2 # I, Ian Kelling, follow the GNU license recommendations at
3 # https://www.gnu.org/licenses/license-recommendations.en.html. They
4 # recommend that small programs, < 300 lines, be licensed under the
5 # Apache License 2.0. This file contains or is part of one or more small
6 # programs. If a small program grows beyond 300 lines, I plan to switch
7 # its license to GPL.
8
9 # Copyright 2024 Ian Kelling
10
11 # Licensed under the Apache License, Version 2.0 (the "License");
12 # you may not use this file except in compliance with the License.
13 # You may obtain a copy of the License at
14
15 # http://www.apache.org/licenses/LICENSE-2.0
16
17 # Unless required by applicable law or agreed to in writing, software
18 # distributed under the License is distributed on an "AS IS" BASIS,
19 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 # See the License for the specific language governing permissions and
21 # limitations under the License.
22
23
24
25 # some basic sanity / verification
26
27 # I don't recommend actually running this unless you have a reason to,
28 # since it creates & deletes files, and being a test, it is not as thoroughly
29 # inspected for bugs
30
31 # assumes we have trash-put in path, and that lnf-function is in .. to this files location
32
33
34 # 2 arguments, test that a file in the link location is removed and replaed with a link
35 case1() {
36 touch b
37 lnf -T a b
38 [[ -L b ]]
39 }
40
41 # 2 arguments, test that directory in link location is removed and replaced with a link
42 case2() {
43 mkdir b
44 lnf -T a b
45 [[ -L b ]]
46 }
47
48 # single argument, test that an existing non-empty directory is removed and replaced by a link
49 case3() {
50 mkdir a
51 touch a/b
52 lnf ../a
53 [[ -L a ]]
54 }
55
56 # 4 arguments, 2 of the link locations already contain files.
57 # test that they got removed and replaced by links
58 case4() {
59 mkdir a
60 touch a/b
61 touch a/c
62 lnf b c d a
63 [[ -L a/b && -L a/c && -L a/d ]]
64 }
65
66 # 2 arguments, test that link is made correctly
67 case5() {
68 mkdir b
69 lnf a b
70 [[ -L b/a ]]
71 }
72
73
74
75 cleanup() {
76 rm -rf *
77 }
78
79
80 docases() {
81 for x in {1..5}; do
82 case$x
83 cleanup
84 done
85 }
86
87 PATH="$(readlink -f ${0%/*}/..):$PATH"
88
89 # might want to undo this if things go wrong
90 # set -x
91
92 # trap errors, and output a simple bash stack trace
93 set -E;
94 trap 'echo "${BASH_COMMAND:+BASH_COMMAND=\"$BASH_COMMAND\" }
95 ${FUNCNAME:+FUNCNAME=\"$FUNCNAME\" }${LINENO:+LINENO=\"$LINENO\" }\$?=$?"' ERR
96 tempdir=$(mktemp -d)
97 cd $tempdir
98 docases
99 # test again, using rm -rf in place of trash-put.
100 trash-put() { rm -rf -- "$@"; }
101 export -f trash-put
102 docases
103
104 rm -rf $tempdir
105 echo tests concluded