1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
source "$(dirname "$0")"/../tap.sh || exit 1
bin=${1:-${PMTEST_UTIL_DIR}pacsort}
if ! type -p "$bin" &>/dev/null; then
tap_bail "pacsort binary ($bin) could not be located"
exit 1
fi
tap_runtest() {
tap_diff <(printf "$1" | $bin $4) <(printf "$2") "$3"
}
tap_check_return_value() {
printf "$1" | $bin $4 2>/dev/null
tap_is_int "$?" "$2" "$3"
}
tap_plan 32
in="1\n2\n3\n4\n"
tap_runtest $in $in "already ordered"
in="4\n2\n3\n1\n"
ex="1\n2\n3\n4\n"
tap_runtest $in $ex "easy reordering"
in="1\n2\n3\n4"
ex="1\n2\n3\n4\n"
tap_runtest $in $ex "add trailing newline"
in="1\n2\n4\n3"
ex="1\n2\n3\n4\n"
tap_runtest $in $ex "add trailing newline"
in="1.0-1\n1.0\n1.0-2\n1.0\n"
tap_runtest $in $in "stable sort"
in="firefox-18.0-2-x86_64.pkg.tar.xz\nfirefox-18.0.1-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort" "--files"
in="firefox-18.0-2\nfirefox-18.0.1-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort with invalid filename" "--files"
in="firefox-18.0-2-x86_64.pkg.tar.xz\n/path2/firefox-18.0.1-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort maybe with leading paths" "--files"
in="/path1/firefox-18.0-2-x86_64.pkg.tar.xz\n/path2/firefox-18.0.1-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort with different leading paths" "--files"
in="/path2/firefox-18.0-2-x86_64.pkg.tar.xz\n/path1/path2/firefox-18.0.1-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort with uneven leading path components" "--files"
in="firefox-18.0-2-i686.pkg.tar.xz\nfirefox-18.0.1-1-x86_64.pkg.tar.gz\n"
tap_runtest $in $in "filename sort with different extensions" "--files"
in="/packages/dialog-1.2_20131001-1-x86_64.pkg.tar.xz\n/packages/dialog-1:1.2_20130928-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort with epoch" "--files"
in="/packages/dia-log-1:1.2_20130928-1-x86_64.pkg.tar.xz\n/packages/dialog-1.2_20131001-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort with differing package names and epoch" "--files"
in="/packages/systemd-217-1-x86_64.pkg.tar.xz\n/packages/systemd-sysvcompat-217-1-x86_64.pkg.tar.xz\n"
tap_runtest $in $in "filename sort with package names as shared substring" "--files"
declare normal reverse names_normal names_reverse
for ((i=1; i<600; i++)); do
normal="${normal}${i}\n"
reverse="${reverse}$((600 - ${i}))\n"
fields="${fields}colA bogus$((600 - ${i})) ${i}\n"
fields_reverse="${fields_reverse}colA bogus${i} $((600 - ${i}))\n"
separator="${separator}colA|bogus$((600 - ${i}))|${i}\n"
separator_reverse="${separator_reverse}colA|bogus${i}|$((600 - ${i}))\n"
done
tap_runtest $normal $normal "really long input"
tap_runtest $reverse $normal "really long input"
tap_runtest $reverse $reverse "really long input, reversed" "-r"
tap_runtest $normal $reverse "really long input, reversed" "-r"
tap_runtest "$fields" "$fields" "really long input, sort key" "-k3"
tap_runtest "$fields_reverse" "$fields" "really long input, sort key" "-k3"
tap_runtest "$fields_reverse" "$fields_reverse" "really long input, sort key, reversed" "-k 3 -r"
tap_runtest "$fields" "$fields_reverse" "really long input, sort key, reversed" "-k 3 -r"
tap_runtest "$separator" "$separator" "really long input, sort key, separator" "-k3 -t|"
tap_runtest "$separator_reverse" "$separator" "really long input, sort key, separator" "-k3 -t|"
tap_runtest "$separator_reverse" "$separator_reverse" "really long input, sort key, separator, reversed" "-k 3 -t| -r"
tap_runtest "$separator" "$separator_reverse" "really long input, sort key, separator, reversed" "-k 3 -t| -r"
tap_check_return_value "" "2" "invalid sort key (no argument)" "-k"
tap_check_return_value "" "2" "invalid sort key (non-numeric)" "-k asd"
tap_check_return_value "" "2" "invalid field separator (no argument)" "-t"
tap_check_return_value "" "2" "invalid field separator (multiple characters)" "-t sda"
tap_check_return_value "" "2" "invalid field separator (two characters must start with a slash)" "-t ag"
tap_check_return_value "" "2" "invalid field separator (\g is invalid)" '-t \g'
tap_finish
|