Line 0
Link Here
|
0 |
- |
1 |
#!/bin/bash |
|
|
2 |
|
3 |
# Presently, only the is_older_than() function is tested. |
4 |
# Requires mktemp(1) and touch(1) from GNU coreutils. |
5 |
|
6 |
bailout() { |
7 |
printf 'Bail out! %s.\n' "$1" |
8 |
exit 1 |
9 |
} |
10 |
|
11 |
printf 'TAP version 14\n' |
12 |
|
13 |
if ! source ./functions.sh; then |
14 |
bailout "Couldn't source ./functions.sh" |
15 |
fi |
16 |
|
17 |
unset -v dir |
18 |
trap '[[ ${dir} ]] && rm -rf -- "${dir}"' EXIT |
19 |
|
20 |
dir=$(mktemp -d) \ |
21 |
&& CDPATH= cd -- "${dir}" \ |
22 |
|| bailout "Couldn't create or change to the temp dir" |
23 |
|
24 |
# The mtimes need to be explicitly assigned. Empirical evidence has shown |
25 |
# theat executing mkdir(1) sequentially, with a single operand each time, |
26 |
# does not guarantee the order of the resulting mtimes. As such, the |
27 |
# implementation of touch(1) from coreutils is required. |
28 |
export TZ=UTC |
29 |
tstamp=197001010000 |
30 |
for age in older newer; do |
31 |
mkdir "${age}"{,-empty} \ |
32 |
&& touch -m -t "${tstamp%0}1" "${age}"/file \ |
33 |
&& touch -m -t "${tstamp}" "${age}"{,-empty} \ |
34 |
|| bailout "Couldn't create or adjust the mtimes of the sample files" |
35 |
tstamp=197001010100 # add an hour |
36 |
done |
37 |
|
38 |
tests=( |
39 |
1 '' '' |
40 |
0 newer newer |
41 |
1 newer newer-empty |
42 |
0 newer newer/file |
43 |
1 newer non-existent |
44 |
1 newer older |
45 |
1 newer older-empty |
46 |
1 newer older/file |
47 |
0 newer-empty newer |
48 |
1 newer-empty newer-empty |
49 |
0 newer-empty newer/file |
50 |
1 newer-empty non-existent |
51 |
1 newer-empty older |
52 |
1 newer-empty older-empty |
53 |
1 newer-empty older/file |
54 |
1 newer/file newer |
55 |
1 newer/file newer-empty |
56 |
1 newer/file newer/file |
57 |
1 newer/file non-existent |
58 |
1 newer/file older |
59 |
1 newer/file older-empty |
60 |
1 newer/file older/file |
61 |
0 non-existent newer |
62 |
0 non-existent newer-empty |
63 |
0 non-existent newer/file |
64 |
1 non-existent non-existent |
65 |
0 non-existent older |
66 |
0 non-existent older-empty |
67 |
0 non-existent older/file |
68 |
0 older newer |
69 |
0 older newer-empty |
70 |
0 older newer/file |
71 |
1 older non-existent |
72 |
0 older older |
73 |
1 older older-empty |
74 |
0 older older/file |
75 |
0 older-empty newer |
76 |
0 older-empty newer-empty |
77 |
0 older-empty newer/file |
78 |
1 older-empty non-existent |
79 |
0 older-empty older |
80 |
1 older-empty older-empty |
81 |
0 older-empty older/file |
82 |
0 older/file newer |
83 |
0 older/file newer-empty |
84 |
0 older/file newer/file |
85 |
1 older/file non-existent |
86 |
1 older/file older |
87 |
1 older/file older-empty |
88 |
1 older/file older/file |
89 |
) |
90 |
|
91 |
total=$(( ${#tests[@]} / 3 )) |
92 |
passed=0 |
93 |
|
94 |
printf '1..%d\n' "${total}" |
95 |
|
96 |
for ((i = 0; i < total; i++)); do |
97 |
set -- "${tests[@]:i*3:3}" |
98 |
if [[ $2 && $3 ]]; then |
99 |
desc="is_older_than $2 $3 (expecting $1)" |
100 |
is_older_than "$2" "$3" |
101 |
else |
102 |
desc="is_older_than (expecting $1)" |
103 |
is_older_than |
104 |
fi |
105 |
if (( $? == $1 )); then |
106 |
(( ++passed )) |
107 |
else |
108 |
printf 'not ' |
109 |
fi |
110 |
printf 'ok %d - %s\n' "$((i + 1))" "${desc}" |
111 |
done |
112 |
|
113 |
printf >&2 '%d/%d tests passed.\n' "${passed}" "${total}" |
114 |
|
115 |
exit "$(( passed < total ))" |