test_curses.sh - sfeed_tests - sfeed tests and RSS and Atom files | |
git clone git://git.codemadness.org/sfeed_tests | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
test_curses.sh (44759B) | |
--- | |
1 #!/bin/sh | |
2 # Dependencies: printf with support for \x, stty, awk, pgrep, pkill, sha… | |
3 # | |
4 # Source-code modifications: | |
5 # Disable pledge and unveil in util.h | |
6 # To test all coverage before _exit add the definition: void __gcov_dump… | |
7 # Build: make CC=gcc CFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS="-f… | |
8 # | |
9 # TODO maybe, for now manual test it: | |
10 # ? resources: | |
11 # - fork resource limit ulimit? maybe non-interactive and let man… | |
12 # - memory limit ulimit? | |
13 # ? auto test 't' with no items. | |
14 # ? page_scrollpage: pages > 0 && if ((p->pos % p->height)). | |
15 # ? terminal with size 0x0. | |
16 # ? read errors: using /proc/self/mem? (Linux-specific). | |
17 # ? write errors: using /dev/full? (Linux-specific). | |
18 # ? test reload of feeds while the feed was removed: | |
19 # - lazyload case. | |
20 # - fseek case in feeds_load. | |
21 # ? try to find the same feed in the pane but it is not visible anymore. | |
22 # steps: have feed with new items, press 't' and highlight the row: re… | |
23 # feed and make sure it has old items. | |
24 # ? memory allocation failures: realloc, calloc, strdup. | |
25 # ? open /dev/tty, /dev/null failure. | |
26 | |
27 #sc="sfeed_curses" | |
28 | |
29 sc="$(pwd)/sfeed_curses" | |
30 markread="$(pwd)/sfeed_markread read" | |
31 markunread="$(pwd)/sfeed_markread unread" | |
32 | |
33 cmd_sha256="$(command -v sha256)" # "sha256" typically on BSD | |
34 if test -n "$cmd_sha256"; then | |
35 sha() { | |
36 sha256 -q # -q only print hash | |
37 } | |
38 else | |
39 sha() { | |
40 sha256sum | cut -f 1 -d ' ' # first field is hash | |
41 } | |
42 fi | |
43 | |
44 # TODO: portable POSIX wrapper for pgrep. | |
45 # maybe: ps -U "$USER" -o pid=,command= | grep "$1" | sed -E 's@^[ ]*|[ … | |
46 #if test -z "$(command -v "pgrep")"; then | |
47 #pgrep(programname) | |
48 #pgrep() { | |
49 # ps -C "$1" | |
50 #} | |
51 #fi | |
52 | |
53 # TODO: portable POSIX wrapper for pkill. | |
54 # maybe: pgrep "$1" | cut -f 1 -d ' ' | |
55 #if test -z "$(command -v "pkill")"; then | |
56 # pkill(signal, programname) | |
57 #pkill() { | |
58 # ps -C "$2" -o pid= | xargs kill "$1" | |
59 #} | |
60 #fi | |
61 | |
62 if test -f "/usr/bin/printf"; then | |
63 printf="/usr/bin/printf" # busybox printf on Void Linux is dogsh… | |
64 else | |
65 printf="$(command -v printf)" # a printf with support for \x. | |
66 fi | |
67 | |
68 test_count=1 | |
69 test_name="" | |
70 test_start() { | |
71 test_name="$1" | |
72 $printf '[%s] #%d Test starting %s\n' "$(date +'%H:%M:%S')" "$te… | |
73 } | |
74 | |
75 test_end() { | |
76 #$printf '[%s] #%d Test success: %s %s\n' "$(date +'%H:%M:%S')" … | |
77 test_count=$((test_count+1)) | |
78 } | |
79 | |
80 fail() { | |
81 $printf '[%s] #%d Test failed: %s %s\n' "$(date +'%H:%M:%S')" "$… | |
82 cleanup | |
83 exit $? | |
84 } | |
85 | |
86 emptydata() { | |
87 $printf '' | |
88 } | |
89 | |
90 fakedata() { | |
91 $printf '0\t1. a\thttp://a\n' | |
92 $printf '1\t2. b\thttp://b\n' | |
93 $printf '2\t3. c\thttp://c\n' | |
94 } | |
95 | |
96 fakedata2() { | |
97 $printf '3\t3. d\thttp://d\n' | |
98 $printf '4\t4. e\thttp://e\n' | |
99 $printf '5\t5. f\thttp://f\n' | |
100 } | |
101 | |
102 fakedata3() { | |
103 $printf '6\t6. g\thttp://g\n' | |
104 $printf '2124567591\t7. h\thttp://h\n' # 2037-04-28 | |
105 $printf '\t8. i\thttp://i\tcontent\tplain\tid\tauthor\thttp://en… | |
106 $printf 'NEIN\t9. j\thttp://j\tcontent\tplain\tid\tauthor\thttp:… | |
107 } | |
108 | |
109 fakedata4() { | |
110 $printf '15\t15. x\thttp://x\n' | |
111 $printf '2124567591\t16. y\thttp://y\n' # 2037-04-28 | |
112 $printf '17\t17. z\thttp://z\n' | |
113 } | |
114 | |
115 sausage="$($printf '\xe3\x82\xbd\xe3\x83\xbc\xe3\x82\xbb\xe3\x83\xbc\xe3… | |
116 dollar="$($printf '\xef\xbc\x84\xef\xbc\x84\xef\xbc\x84\xef\xbc\x84\xef\… | |
117 invaliduni="$($printf '\xc3\xc3\xc3\xc3\xc3\xc3')" | |
118 ctrl="$($printf 'a\tb\rc\nd')" | |
119 wcneg="$($printf '\xef\xbf\xbe\xef\xbf\xbe\xef\xbf\xbe\xef\xbf\xbe\xef\x… | |
120 | |
121 fakedataunicode() { | |
122 $printf '10\t10. 2 width \xef\xbc\x84\xef\xbc\x84\xef\xbc\x84\xe… | |
123 $printf '11\t11. invalid \xc3\xc3\xc3\xc3\xc3\xc3\n' # invalid | |
124 $printf '12\t12. replacement char \xef\xbf\xbd\xef\xbf\xbd\xef\x… | |
125 $printf '13\t13. wcwidth -1 \xef\xbf\xbe\xef\xbf\xbe\xef\xbf\xbe… | |
126 $printf '14\t14. \xe3\x82\xbd\xe3\x83\xbc\xe3\x82\xbb\xe3\x83\xb… | |
127 } | |
128 | |
129 muchdata() { | |
130 # very wow | |
131 echo | awk 'END { | |
132 for (i = 0;i < 500; i++) | |
133 printf("%d\t%d. %d\thttp://%d\n", i, i, i, i); | |
134 }' | |
135 } | |
136 | |
137 # setup: create files | |
138 # feedfiles | |
139 feedfile1=$(mktemp) | |
140 feedfile2=$(mktemp) | |
141 feedfile3=$(mktemp) | |
142 feedfile4=$(mktemp) | |
143 emptyfile=$(mktemp) | |
144 fakedata > "$feedfile1" | |
145 fakedata2 > "$feedfile2" | |
146 fakedata3 > "$feedfile3" | |
147 fakedata4 > "$feedfile4" | |
148 emptydata > "$emptyfile" | |
149 # URL file | |
150 urlfile=$(mktemp) | |
151 touch "$urlfile" | |
152 | |
153 pipefile="$(mktemp)" | |
154 yankfile="$(mktemp)" | |
155 | |
156 plumbfile="$(mktemp)" | |
157 plumbscript="$(mktemp)" | |
158 $printf '#!/bin/sh\necho "$1" >"%s"\n' "$plumbfile" > "$plumbscript" | |
159 chmod +x "$plumbscript" | |
160 | |
161 # terminal size. | |
162 size=$(stty size) | |
163 rows="${size%% *}" | |
164 if test "$rows" = "0"; then | |
165 rows="24" # serial console | |
166 fi | |
167 itemrows=$((rows - 1)) # -1 for bottom bar. | |
168 | |
169 cleanup() { | |
170 rm -f \ | |
171 "$urlfile" "$yankfile" "$pipefile" "$plumbfile" "$plumbs… | |
172 "$feedfile1" "$feedfile2" "$feedfile3" "$feedfile4" "$em… | |
173 } | |
174 | |
175 # manual tests | |
176 manual() { | |
177 echo "Manual tests:" | |
178 echo "* Press ^L to redraw the terminal." | |
179 echo "* Test SIGWINCH by resizing the terminal: resize also to v… | |
180 echo "* Test resizing the sidebar in all layouts and resetting i… | |
181 echo "" | |
182 echo "Press RETURN to continue" | |
183 read p | |
184 test_start "Manual tests" | |
185 "$sc" "$feedfile1" "$feedfile2" "$feedfile3" "$emptyfile" | |
186 test_end | |
187 | |
188 sleep 1 | |
189 echo "Was it OK? [y]/n" | |
190 read answer | |
191 if test "$answer" = "n"; then | |
192 cleanup | |
193 exit 1 | |
194 fi | |
195 | |
196 echo "Unicode data with various widths. Resize the terminal to p… | |
197 echo "" | |
198 echo "Press RETURN to continue" | |
199 read p | |
200 test_start "Unicode" | |
201 fakedataunicode | "$sc" | |
202 test_end | |
203 | |
204 echo "Was it OK? [y]/n" | |
205 read answer | |
206 if test "$answer" = "n"; then | |
207 cleanup | |
208 exit 1 | |
209 fi | |
210 | |
211 echo "* Test filenames with unicode and multi-column characters" | |
212 echo "" | |
213 echo "Press RETURN to continue" | |
214 read p | |
215 | |
216 test_start "Test filenames with unicode" | |
217 tmpfile1="/tmp/sfeed_$sausage" | |
218 tmpfile2="/tmp/sfeed_$invaliduni" | |
219 tmpfile3="/tmp/sfeed_$dollar" | |
220 tmpfile4="/tmp/sfeed_$ctrl" | |
221 tmpfile5="/tmp/sfeed_$wcneg" | |
222 cp "$feedfile1" "$tmpfile1" | |
223 cp "$feedfile2" "$tmpfile2" | |
224 cp "$feedfile3" "$tmpfile3" | |
225 cp "$feedfile4" "$tmpfile4" | |
226 cp "$feedfile4" "$tmpfile5" | |
227 $sc "$tmpfile1" "$tmpfile2" "$tmpfile3" "$tmpfile4" "$tmpfile5" | |
228 rm -f "$tmpfile1" "$tmpfile2" "$tmpfile3" "$tmpfile4" "$tmpfile5" | |
229 test_end | |
230 | |
231 echo "Was it OK? [y]/n" | |
232 read answer | |
233 if test "$answer" = "n"; then | |
234 cleanup | |
235 exit 1 | |
236 fi | |
237 | |
238 echo "* Test SIGHUP to reload feed data, after 3 seconds it relo… | |
239 echo " should be different. Afterward manually close it by pres… | |
240 echo "" | |
241 echo "Press RETURN to continue" | |
242 read p | |
243 | |
244 test_start "Test SIGHUP to reload feed data" | |
245 tmpfile="$(mktemp)" | |
246 cat "$feedfile2" > "$tmpfile" | |
247 (sleep 3;cp "$feedfile3" "$tmpfile"; pkill -SIGHUP sfeed_curses)… | |
248 SFEED_AUTOCMD="" "$sc" "$feedfile1" "$tmpfile" | |
249 rm -f "$tmpfile" | |
250 test_end | |
251 | |
252 echo "Was it OK? [y]/n" | |
253 read answer | |
254 if test "$answer" = "n"; then | |
255 cleanup | |
256 exit 1 | |
257 fi | |
258 | |
259 echo "* Test R to reload feed data, after 2 seconds press R to r… | |
260 echo " should be different. Afterward manually close it by pres… | |
261 echo "" | |
262 echo "Press RETURN to continue" | |
263 read p | |
264 | |
265 test_start "Test R to reload feed data" | |
266 tmpfile="$(mktemp)" | |
267 cat "$feedfile2" > "$tmpfile" | |
268 # use muchdata so the counts are changed, should resizing the si… | |
269 (sleep 2;muchdata > "$tmpfile") & | |
270 SFEED_AUTOCMD="" "$sc" "$feedfile1" "$tmpfile" | |
271 rm -f "$tmpfile" | |
272 test_end | |
273 | |
274 echo "Was it OK? [y]/n" | |
275 read answer | |
276 if test "$answer" = "n"; then | |
277 cleanup | |
278 exit 1 | |
279 fi | |
280 | |
281 echo "* Test SIGHUP to reload the URLs list. After 3 seconds it … | |
282 echo " and the first item should be non-bold. Afterward manuall… | |
283 echo "" | |
284 echo "Press RETURN to continue" | |
285 read p | |
286 | |
287 test_start "Change URL contents externally. Reload URLs with R w… | |
288 rm -f "/tmp/u" | |
289 touch "/tmp/u" | |
290 (sleep 2; echo "http://a" > "/tmp/u"; pkill -SIGHUP sfeed_curses… | |
291 fakedata | SFEED_URL_FILE="/tmp/u" SFEED_AUTOCMD="G" $sc | |
292 status=$? | |
293 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
294 rm -f "/tmp/u" | |
295 test_end | |
296 | |
297 echo "Was it OK? [y]/n" | |
298 read answer | |
299 if test "$answer" = "n"; then | |
300 cleanup | |
301 exit 1 | |
302 fi | |
303 | |
304 echo "* Test SIGHUP while the piper program is open. After 3 sec… | |
305 echo " After closing the piper program after 3 seconds the sign… | |
306 echo " should handle the reload event. The counts of the second… | |
307 echo " new / bold. Afterward manually close it by pressing q." | |
308 echo "" | |
309 echo "Press RETURN to continue" | |
310 read p | |
311 | |
312 test_start "Test SIGHUP to reload feed data while piper program … | |
313 tmpfile="$(mktemp)" | |
314 cat "$feedfile2" > "$tmpfile" | |
315 (sleep 3;cp "$feedfile3" "$tmpfile"; pkill -SIGHUP sfeed_curses)… | |
316 SFEED_PIPER_INTERACTIVE="1" SFEED_PIPER="less" SFEED_AUTOCMD="lp… | |
317 rm -f "$tmpfile" | |
318 test_end | |
319 | |
320 echo "Was it OK? [y]/n" | |
321 read answer | |
322 if test "$answer" = "n"; then | |
323 cleanup | |
324 exit 1 | |
325 fi | |
326 | |
327 echo "Test exit status of mark read program: if it returns 0 the… | |
328 echo "is marked. Press r to test it. It should mark the items as… | |
329 echo "" | |
330 echo "Press RETURN to continue" | |
331 read p | |
332 | |
333 test_start "Test exit status of mark read: exit status zero" | |
334 rm -f "$urlfile" | |
335 touch "$urlfile" | |
336 fakedata | SFEED_URL_FILE="$urlfile" SFEED_MARK_READ="true" $sc | |
337 test_end | |
338 | |
339 echo "Was it OK? [y]/n" | |
340 read answer | |
341 if test "$answer" = "n"; then | |
342 cleanup | |
343 exit 1 | |
344 fi | |
345 | |
346 echo "Test exit status of mark read program: if it returns non-z… | |
347 echo "is not marked. Press r to test it, it should NOT mark the … | |
348 echo "" | |
349 echo "Press RETURN to continue" | |
350 read p | |
351 | |
352 test_start "Test exit status of mark read: exit status non-zero" | |
353 rm -f "$urlfile" | |
354 touch "$urlfile" | |
355 fakedata | SFEED_URL_FILE="$urlfile" SFEED_MARK_READ="false" $sc | |
356 test_end | |
357 | |
358 echo "Was it OK? [y]/n" | |
359 read answer | |
360 if test "$answer" = "n"; then | |
361 cleanup | |
362 exit 1 | |
363 fi | |
364 } | |
365 | |
366 # -m runs manual tests only. | |
367 if test "$1" = "-m"; then | |
368 manual | |
369 cleanup | |
370 exit | |
371 fi | |
372 | |
373 test_start "Search feed name" | |
374 n=$(basename "$feedfile2") | |
375 rm -f "$yankfile" | |
376 touch "$yankfile" | |
377 SFEED_YANKER_INTERACTIVE="1" SFEED_YANKER="cat >$yankfile" SFEED_AUTOCMD… | |
378 status=$? | |
379 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
380 contents="$(cat "$yankfile")" | |
381 test "$contents" = "http://d" || fail "Incorrect URL: $contents" | |
382 test_end | |
383 | |
384 test_start "Forward searching and yanking an URL" | |
385 rm -f "$yankfile" | |
386 touch "$yankfile" | |
387 # NOTE: interactive is needed, else it could spawn and close too fast. | |
388 fakedata | SFEED_YANKER_INTERACTIVE="1" SFEED_YANKER="cat >$yankfile" SF… | |
389 status=$? | |
390 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
391 contents="$(cat "$yankfile")" | |
392 test "$contents" = "http://b" || fail "Incorrect URL: $contents" | |
393 test_end | |
394 | |
395 test_start "Forward searching (unicode) and yanking an URL" | |
396 rm -f "$yankfile" | |
397 touch "$yankfile" | |
398 # NOTE: interactive is needed, else it could spawn and close too fast. | |
399 fakedataunicode | SFEED_YANKER_INTERACTIVE="1" SFEED_YANKER="cat >$yankf… | |
400 status=$? | |
401 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
402 contents="$(cat "$yankfile")" | |
403 test "$contents" = "http://jp" || fail "Incorrect URL: $contents" | |
404 test_end | |
405 | |
406 test_start "Monocle layout: toggle between panes with TAB." | |
407 rm -f "$plumbfile" | |
408 touch "$plumbfile" | |
409 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
410 status=$? | |
411 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
412 contents="$(cat "$plumbfile")" | |
413 test "$contents" = "http://d" || fail "Incorrect URL: $contents" | |
414 test_end | |
415 | |
416 test_start "Pipe: nonexistant command" | |
417 rm -f "$pipefile" | |
418 touch "$pipefile" | |
419 fakedata | SFEED_PIPER_INTERACTIVE="1" SFEED_PIPER="/nonexist" SFEED_AUT… | |
420 status=$? | |
421 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
422 contents="$(cat "$pipefile")" | |
423 line1="" | |
424 test "$contents" = "$line1" || fail "Incorrect content: $contents, expec… | |
425 test_end | |
426 | |
427 test_start "Plumb: nonexistant command" | |
428 rm -f "$plumbfile" | |
429 touch "$plumbfile" | |
430 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="/nonexist" SFEED… | |
431 status=$? | |
432 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
433 contents="$(cat "$plumbfile")" | |
434 test "$contents" = "" || fail "Incorrect URL: $contents" | |
435 test_end | |
436 | |
437 test_start "Yank: nonexistant command" | |
438 rm -f "$yankfile" | |
439 touch "$yankfile" | |
440 # NOTE: interactive is needed, else it could spawn and close too fast. | |
441 fakedata | SFEED_YANKER_INTERACTIVE="1" SFEED_YANKER="/nonexist" SFEED_A… | |
442 status=$? | |
443 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
444 contents="$(cat "$yankfile")" | |
445 test "$contents" = "" || fail "Incorrect URL: $contents" | |
446 test_end | |
447 | |
448 test_start "Test \$SFEED_FEED_PATH" | |
449 rm -f "$yankfile" | |
450 touch "$yankfile" | |
451 SFEED_YANKER_INTERACTIVE="1" SFEED_YANKER="echo \$SFEED_FEED_PATH >$yank… | |
452 status=$? | |
453 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
454 contents="$(cat "$yankfile")" | |
455 test "$contents" = "$feedfile1" || fail "Incorrect content: $contents" | |
456 test_end | |
457 | |
458 test_start "Test \$SFEED_FEED_PATH for stdin" | |
459 rm -f "$yankfile" | |
460 touch "$yankfile" | |
461 fakedata | SFEED_YANKER_INTERACTIVE="1" SFEED_YANKER="echo a\$SFEED_FEED… | |
462 status=$? | |
463 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
464 contents="$(cat "$yankfile")" | |
465 test "$contents" = "a" || fail "Incorrect content: $contents" | |
466 test_end | |
467 | |
468 # Switch to monocle layout: navigation: | |
469 # select second feed and open it (opens items pane). Switch to feed pane… | |
470 # go one row down and open the next feed. Switch left and right and open… | |
471 test_start "Monocle layout: test navigation" | |
472 rm -f "$plumbfile" | |
473 touch "$plumbfile" | |
474 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
475 status=$? | |
476 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
477 contents="$(cat "$plumbfile")" | |
478 test "$contents" = "http://g" || fail "Incorrect URL: $contents" | |
479 test_end | |
480 | |
481 test_start "Navigation keys: up arrow" | |
482 expectedurl="http://h" | |
483 rm -f "$plumbfile" | |
484 touch "$plumbfile" | |
485 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
486 status=$? | |
487 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
488 contents="$(cat "$plumbfile")" | |
489 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
490 test_end | |
491 | |
492 test_start "Navigation keys: up" | |
493 expectedurl="http://h" | |
494 rm -f "$plumbfile" | |
495 touch "$plumbfile" | |
496 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
497 status=$? | |
498 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
499 contents="$(cat "$plumbfile")" | |
500 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
501 test_end | |
502 | |
503 test_start "Navigation keys: home" | |
504 expectedurl="http://g" | |
505 rm -f "$plumbfile" | |
506 touch "$plumbfile" | |
507 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
508 status=$? | |
509 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
510 contents="$(cat "$plumbfile")" | |
511 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
512 test_end | |
513 | |
514 test_start "Navigation keys 2: home" | |
515 expectedurl="http://g" | |
516 rm -f "$plumbfile" | |
517 touch "$plumbfile" | |
518 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
519 status=$? | |
520 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
521 contents="$(cat "$plumbfile")" | |
522 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
523 test_end | |
524 | |
525 test_start "Navigation keys: home key (urxvt)" | |
526 expectedurl="http://g" | |
527 rm -f "$plumbfile" | |
528 touch "$plumbfile" | |
529 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
530 status=$? | |
531 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
532 contents="$(cat "$plumbfile")" | |
533 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
534 test_end | |
535 | |
536 test_start "Navigation keys: end key (urxvt)" | |
537 expectedurl="http://j" | |
538 rm -f "$plumbfile" | |
539 touch "$plumbfile" | |
540 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
541 status=$? | |
542 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
543 contents="$(cat "$plumbfile")" | |
544 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
545 test_end | |
546 | |
547 test_start "Navigation keys: home key (SUN)" | |
548 expectedurl="http://g" | |
549 rm -f "$plumbfile" | |
550 touch "$plumbfile" | |
551 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
552 status=$? | |
553 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
554 contents="$(cat "$plumbfile")" | |
555 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
556 test_end | |
557 | |
558 test_start "Navigation keys: end key (SUN)" | |
559 expectedurl="http://j" | |
560 rm -f "$plumbfile" | |
561 touch "$plumbfile" | |
562 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
563 status=$? | |
564 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
565 contents="$(cat "$plumbfile")" | |
566 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
567 test_end | |
568 | |
569 test_start "Navigation keys: unsupported DEC application key INSERT" | |
570 fakedata3 | SFEED_AUTOCMD="$($printf '\x1b[2~')q" $sc | |
571 status=$? | |
572 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
573 test_end | |
574 | |
575 test_start "Navigation keys: unsupported DEC application key F13" | |
576 fakedata3 | SFEED_AUTOCMD="$($printf '\x1b[25~')q" $sc | |
577 status=$? | |
578 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
579 test_end | |
580 | |
581 test_start "Navigation keys: unsupported DEC application key, unclosed ~" | |
582 fakedata3 | SFEED_AUTOCMD="$($printf '\x1b[2')qq" $sc # NOTE: qq to forc… | |
583 status=$? | |
584 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
585 test_end | |
586 | |
587 test_start "Run it with empty data" | |
588 emptydata | SFEED_AUTOCMD="q" $sc | |
589 status=$? | |
590 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
591 test_end | |
592 | |
593 test_start "Run with empty data and an URL file" | |
594 rm -f "$urlfile" | |
595 touch "$urlfile" | |
596 emptydata | SFEED_URL_FILE="$urlfile" SFEED_AUTOCMD="q" $sc | |
597 status=$? | |
598 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
599 test_end | |
600 | |
601 test_start "Run with empty data and an URL file which does not exist" | |
602 emptydata | SFEED_URL_FILE="/tmp/notexist" SFEED_AUTOCMD="q" $sc | |
603 status=$? | |
604 test $status -eq 1 || fail "Exit code must be 1, was: $status" | |
605 test_end | |
606 | |
607 test_start "Mark URL as read. Mark first 2 entries as read" | |
608 rm -f "$urlfile" | |
609 touch "$urlfile" | |
610 fakedata | SFEED_MARK_READ="$markread" SFEED_URL_FILE="$urlfile" SFEED_A… | |
611 status=$? | |
612 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
613 expect="997864e8cb6fd5ab981f7d64e9817fd80871dd1172dbd04849db6fefa9dd0208" | |
614 result=$(sha < "$urlfile") | |
615 test "$result" = "$expect" || fail "Invalid result" | |
616 test_end | |
617 | |
618 test_start "Mark URL as read. Mark first 2 entries as read. Mark already… | |
619 rm -f "$urlfile" | |
620 touch "$urlfile" | |
621 fakedata | SFEED_MARK_READ="$markread" SFEED_URL_FILE="$urlfile" SFEED_A… | |
622 status=$? | |
623 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
624 expect="997864e8cb6fd5ab981f7d64e9817fd80871dd1172dbd04849db6fefa9dd0208" | |
625 result=$(sha < "$urlfile") | |
626 test "$result" = "$expect" || fail "Invalid result" | |
627 test_end | |
628 | |
629 test_start "Mark URL as read. Select second entry and mark as unread" | |
630 fakedata | SFEED_MARK_UNREAD="$markunread" SFEED_URL_FILE="$urlfile" SFE… | |
631 status=$? | |
632 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
633 result=$(cat "$urlfile") | |
634 expect="http://a" | |
635 test "$result" = "$expect" || fail "Invalid result" | |
636 test_end | |
637 | |
638 test_start "Mark all URLs of a feed as read" | |
639 rm -f "$urlfile" | |
640 touch "$urlfile" | |
641 fakedata | SFEED_MARK_READ="$markread" SFEED_URL_FILE="$urlfile" SFEED_A… | |
642 status=$? | |
643 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
644 expect="da4a1d3a7c80beb04e451c6c02a7a321a69e87abcee2178e7411f6b5d8e3960d" | |
645 result=$(sha < "$urlfile") | |
646 test "$result" = "$expect" || fail "Invalid result" | |
647 test_end | |
648 | |
649 test_start "Mark first 2 feeds read, then mark URLs of first feed as unr… | |
650 rm -f "$urlfile" | |
651 touch "$urlfile" | |
652 SFEED_MARK_READ="$markread" SFEED_MARK_UNREAD="$markunread" SFEED_URL_FI… | |
653 status=$? | |
654 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
655 expect="da4a1d3a7c80beb04e451c6c02a7a321a69e87abcee2178e7411f6b5d8e3960d" | |
656 result=$(sha < "$urlfile") | |
657 test "$result" = "$expect" || fail "Invalid result" | |
658 test_end | |
659 | |
660 test_start "Mark all items of the first 2 feeds as read" | |
661 rm -f "$urlfile" | |
662 touch "$urlfile" | |
663 fakedata | SFEED_MARK_READ="$markread" SFEED_URL_FILE="$urlfile" SFEED_A… | |
664 status=$? | |
665 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
666 expect="9228e2265258aa0c4afe33a129b4484f9b1d01e10ad30333a2139beb6bb0881d" | |
667 result=$(sha < "$urlfile") | |
668 test "$result" = "$expect" || fail "Invalid result" | |
669 test_end | |
670 | |
671 test_start "Backward search and plumb script" | |
672 rm -f "$plumbfile" | |
673 touch "$plumbfile" | |
674 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
675 status=$? | |
676 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
677 contents="$(cat "$plumbfile")" | |
678 test "$contents" = "http://b" || fail "Incorrect URL: $contents" | |
679 test_end | |
680 | |
681 test_start "Pipe contents of item to a pipe script" | |
682 rm -f "$pipefile" | |
683 touch "$pipefile" | |
684 fakedata | SFEED_PIPER_INTERACTIVE="1" SFEED_PIPER="cat >$pipefile" SFEE… | |
685 status=$? | |
686 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
687 contents="$(cat "$pipefile")" | |
688 line1="$($printf '0\t1. a\thttp://a\t\t\t\t\t\t\n')" | |
689 test "$contents" = "$line1" || fail "Incorrect content: $contents, expec… | |
690 test_end | |
691 | |
692 test_start "Plumb script" | |
693 rm -f "$plumbfile" | |
694 touch "$plumbfile" | |
695 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
696 status=$? | |
697 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
698 contents="$(cat "$plumbfile")" | |
699 test "$contents" = "http://a" || fail "Incorrect URL: $contents" | |
700 test_end | |
701 | |
702 test_start "Plumb script and lazyload" | |
703 rm -f "$plumbfile" | |
704 touch "$plumbfile" | |
705 SFEED_LAZYLOAD="1" SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbsc… | |
706 status=$? | |
707 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
708 contents="$(cat "$plumbfile")" | |
709 test "$contents" = "http://a" || fail "Incorrect URL: $contents" | |
710 test_end | |
711 | |
712 test_start "Toggle new feeds in sidebar, but there are none" | |
713 rm -f "$plumbfile" | |
714 touch "$plumbfile" | |
715 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
716 status=$? | |
717 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
718 contents="$(cat "$plumbfile")" | |
719 test "$contents" = "" || fail "Incorrect URL: $contents" | |
720 test_end | |
721 | |
722 test_start "Toggle new feeds in sidebar (horizontal mode), but there are… | |
723 rm -f "$plumbfile" | |
724 touch "$plumbfile" | |
725 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
726 status=$? | |
727 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
728 contents="$(cat "$plumbfile")" | |
729 test "$contents" = "" || fail "Incorrect URL: $contents" | |
730 test_end | |
731 | |
732 test_start "Select a new feed in the sidebar, toggle new feeds: make sur… | |
733 rm -f "$plumbfile" | |
734 touch "$plumbfile" | |
735 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
736 status=$? | |
737 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
738 contents="$(cat "$plumbfile")" | |
739 test "$contents" = "http://x" || fail "Incorrect URL: $contents" | |
740 test_end | |
741 | |
742 test_start "Jump to next bold item" | |
743 rm -f "$plumbfile" | |
744 touch "$plumbfile" | |
745 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
746 status=$? | |
747 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
748 expect="http://h" | |
749 contents="$(cat "$plumbfile")" | |
750 test "$contents" = "$expect" || fail "Incorrect URL: $contents" | |
751 test_end | |
752 | |
753 test_start "Jump to previous bold item" | |
754 rm -f "$plumbfile" | |
755 touch "$plumbfile" | |
756 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
757 status=$? | |
758 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
759 expect="http://h" | |
760 contents="$(cat "$plumbfile")" | |
761 test "$contents" = "$expect" || fail "Incorrect URL: $contents" | |
762 test_end | |
763 | |
764 test_start "Jump to next or previous bold item but there are none" | |
765 rm -f "$plumbfile" | |
766 touch "$plumbfile" | |
767 emptydata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
768 status=$? | |
769 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
770 expect="" | |
771 contents="$(cat "$plumbfile")" | |
772 test "$contents" = "$expect" || fail "Incorrect URL: $contents" | |
773 test_end | |
774 | |
775 test_start "Plumb script (enclosure)" | |
776 rm -f "$plumbfile" | |
777 touch "$plumbfile" | |
778 fakedata3 | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" S… | |
779 status=$? | |
780 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
781 contents="$(cat "$plumbfile")" | |
782 test "$contents" = "http://enclosure/file.mp3" || fail "Incorrect URL: $… | |
783 test_end | |
784 | |
785 # monocle layout: open second feed (switches pane to item in monocle mod… | |
786 # open second item. | |
787 test_start "Monocle layout: open second feed (switches pane to item in m… | |
788 rm -f "$plumbfile" | |
789 touch "$plumbfile" | |
790 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
791 status=$? | |
792 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
793 contents="$(cat "$plumbfile")" | |
794 test "$contents" = "http://e" || fail "Incorrect URL: $contents" | |
795 test_end | |
796 | |
797 test_start "Load first and second feed, switch to item and open it" | |
798 rm -f "$plumbfile" | |
799 touch "$plumbfile" | |
800 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
801 status=$? | |
802 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
803 contents="$(cat "$plumbfile")" | |
804 test "$contents" = "http://e" || fail "Incorrect URL: $contents" | |
805 test_end | |
806 | |
807 # arrow key navigation. | |
808 # monocle layout: arrow down, open second feed (switches pane to item in… | |
809 # page down, open item. | |
810 test_start "Monocle layout: arrow keys: open second feed (switches pane … | |
811 rm -f "$plumbfile" | |
812 touch "$plumbfile" | |
813 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
814 status=$? | |
815 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
816 contents="$(cat "$plumbfile")" | |
817 test "$contents" = "http://f" || fail "Incorrect URL: $contents" | |
818 test_end | |
819 | |
820 # arrow key navigation. | |
821 # monocle layout: arrow down, open second feed (switches pane to item in… | |
822 # page down, open item. | |
823 test_start "Monocle layout: arrow keys 2: open second feed (switches pan… | |
824 rm -f "$plumbfile" | |
825 touch "$plumbfile" | |
826 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
827 status=$? | |
828 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
829 contents="$(cat "$plumbfile")" | |
830 test "$contents" = "http://f" || fail "Incorrect URL: $contents" | |
831 test_end | |
832 | |
833 test_start "Scroll 3 pages down and one up (selecting the last item of t… | |
834 expectedurl="http://$((itemrows * 3 - 1))" | |
835 rm -f "$plumbfile" | |
836 touch "$plumbfile" | |
837 muchdata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
838 status=$? | |
839 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
840 contents="$(cat "$plumbfile")" | |
841 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
842 test_end | |
843 | |
844 test_start "SUN keys: scroll 3 pages down and one up (selecting the last… | |
845 expectedurl="http://$((itemrows * 3 - 1))" | |
846 rm -f "$plumbfile" | |
847 touch "$plumbfile" | |
848 muchdata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
849 status=$? | |
850 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
851 contents="$(cat "$plumbfile")" | |
852 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
853 test_end | |
854 | |
855 test_start "SCO keys: scroll 3 pages down and one up (selecting the last… | |
856 expectedurl="http://$((itemrows * 3 - 1))" | |
857 rm -f "$plumbfile" | |
858 touch "$plumbfile" | |
859 muchdata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
860 status=$? | |
861 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
862 contents="$(cat "$plumbfile")" | |
863 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
864 test_end | |
865 | |
866 test_start "End key: go to last item" | |
867 expectedurl="http://499" | |
868 rm -f "$plumbfile" | |
869 touch "$plumbfile" | |
870 muchdata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
871 status=$? | |
872 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
873 contents="$(cat "$plumbfile")" | |
874 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
875 test_end | |
876 | |
877 # toggle to monocle | |
878 # monocle layout: open second feed (switches pane to item in monocle mod… | |
879 # open second item. | |
880 test_start "Toggle to monocle layout: open second feed (switches pane to… | |
881 rm -f "$plumbfile" | |
882 touch "$plumbfile" | |
883 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
884 status=$? | |
885 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
886 contents="$(cat "$plumbfile")" | |
887 test "$contents" = "http://e" || fail "Incorrect URL: $contents" | |
888 test_end | |
889 | |
890 # Test mouse, reference: | |
891 # | |
892 # mouse button encoding: | |
893 # 0 is left button | |
894 # 1 is middle button | |
895 # 2 is right button | |
896 # 64 scroll up | |
897 # 65 scroll down | |
898 # 128 side button, button 7 backward | |
899 # 129 side button, button 8 forward | |
900 # | |
901 # SGR: | |
902 # m is press, M is release | |
903 # | |
904 # SGR mouse: | |
905 | |
906 test_start "Mouse SGR: left button, press column (x, y) = (1, 2) which i… | |
907 rm -f "$plumbfile" | |
908 touch "$plumbfile" | |
909 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
910 status=$? | |
911 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
912 contents="$(cat "$plumbfile")" | |
913 test "$contents" = "http://b" || fail "Incorrect content: $contents" | |
914 test_end | |
915 | |
916 test_start "Mouse SGR: left button, press column (x, y) = (1, 2) which l… | |
917 rm -f "$plumbfile" | |
918 touch "$plumbfile" | |
919 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
920 status=$? | |
921 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
922 contents="$(cat "$plumbfile")" | |
923 test "$contents" = "http://d" || fail "Incorrect content: $contents" | |
924 test_end | |
925 | |
926 test_start "Mouse SGR: right button, pipe contents of item to a pipe scr… | |
927 rm -f "$pipefile" | |
928 touch "$pipefile" | |
929 fakedata | SFEED_PIPER_INTERACTIVE="1" SFEED_PIPER="cat >$pipefile" SFEE… | |
930 status=$? | |
931 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
932 contents="$(cat "$pipefile")" | |
933 line1="$($printf '1\t2. b\thttp://b\t\t\t\t\t\t\n')" | |
934 test "$contents" = "$line1" || fail "Incorrect content: $contents, expec… | |
935 test_end | |
936 | |
937 test_start "Mouse SGR: side button 7" | |
938 rm -f "$plumbfile" | |
939 touch "$plumbfile" | |
940 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
941 status=$? | |
942 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
943 contents="$(cat "$plumbfile")" | |
944 test "$contents" = "http://d" || fail "Incorrect content: $contents" | |
945 test_end | |
946 | |
947 test_start "Mouse SGR: side button 8" | |
948 rm -f "$plumbfile" | |
949 touch "$plumbfile" | |
950 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
951 status=$? | |
952 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
953 contents="$(cat "$plumbfile")" | |
954 test "$contents" = "http://d" || fail "Incorrect content: $contents" | |
955 test_end | |
956 | |
957 test_start "Mouse SGR: scroll 3 pages down and one up (selecting the las… | |
958 expectedurl="http://$((itemrows * 3 - 1))" | |
959 rm -f "$plumbfile" | |
960 touch "$plumbfile" | |
961 muchdata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
962 status=$? | |
963 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
964 contents="$(cat "$plumbfile")" | |
965 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
966 test_end | |
967 | |
968 test_start "Mouse X10: left button, press column (x, y) = (1, 2) which i… | |
969 rm -f "$plumbfile" | |
970 touch "$plumbfile" | |
971 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
972 status=$? | |
973 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
974 contents="$(cat "$plumbfile")" | |
975 test "$contents" = "http://b" || fail "Incorrect URL: $contents" | |
976 test_end | |
977 | |
978 test_start "Mouse X10: right button, pipe contents of item to a pipe scr… | |
979 rm -f "$pipefile" | |
980 touch "$pipefile" | |
981 fakedata | SFEED_PIPER_INTERACTIVE="1" SFEED_PIPER="cat >$pipefile" SFEE… | |
982 status=$? | |
983 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
984 contents="$(cat "$pipefile")" | |
985 line1="$($printf '1\t2. b\thttp://b\t\t\t\t\t\t\n')" | |
986 test "$contents" = "$line1" || fail "Incorrect content: $contents, expec… | |
987 test_end | |
988 | |
989 test_start "Mouse X10: scroll 3 pages down and one up (selecting the las… | |
990 expectedurl="http://$((itemrows * 3 - 1))" | |
991 rm -f "$plumbfile" | |
992 touch "$plumbfile" | |
993 muchdata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
994 status=$? | |
995 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
996 contents="$(cat "$plumbfile")" | |
997 test "$contents" = "$expectedurl" || fail "Incorrect URL: $contents" | |
998 test_end | |
999 | |
1000 test_start "Mouse X10: side button 7" | |
1001 rm -f "$plumbfile" | |
1002 touch "$plumbfile" | |
1003 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
1004 status=$? | |
1005 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1006 contents="$(cat "$plumbfile")" | |
1007 test "$contents" = "http://d" || fail "Incorrect content: $contents" | |
1008 test_end | |
1009 | |
1010 test_start "Mouse X10: side button 8" | |
1011 rm -f "$plumbfile" | |
1012 touch "$plumbfile" | |
1013 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
1014 status=$? | |
1015 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1016 contents="$(cat "$plumbfile")" | |
1017 test "$contents" = "http://d" || fail "Incorrect content: $contents" | |
1018 test_end | |
1019 | |
1020 # monocle layout: arrow down, open second feed (switches pane to item in… | |
1021 # scroll down, open item. | |
1022 test_start "Monocle layout: mouse scroll down, open second feed (switche… | |
1023 rm -f "$plumbfile" | |
1024 touch "$plumbfile" | |
1025 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
1026 status=$? | |
1027 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1028 contents="$(cat "$plumbfile")" | |
1029 test "$contents" = "http://f" || fail "Incorrect URL: $contents" | |
1030 test_end | |
1031 | |
1032 # Select pane items with keybind, then mouse side button 7 backward, go … | |
1033 # open it, switch to items pane with TAB, open item. | |
1034 test_start "Mouse: side button 7, switches to feeds pane. Then open the … | |
1035 rm -f "$plumbfile" | |
1036 touch "$plumbfile" | |
1037 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
1038 status=$? | |
1039 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1040 contents="$(cat "$plumbfile")" | |
1041 test "$contents" = "http://e" || fail "Incorrect URL: $contents" | |
1042 test_end | |
1043 | |
1044 # mouse disabled (toggle off), left button, press column (x, y) = (1, 2) | |
1045 # which is the second row, double-click. So this should not do anything. | |
1046 test_start "Mouse disabled (toggle off), left button, press column (x, y… | |
1047 rm -f "$plumbfile" | |
1048 touch "$plumbfile" | |
1049 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
1050 status=$? | |
1051 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1052 contents="$(cat "$plumbfile")" | |
1053 test "$contents" = "" || fail "Incorrect URL: $contents" | |
1054 test_end | |
1055 | |
1056 # Horizontal layout, resize 4 down, 2 up, doubleclick cell (1, 8). (3 fe… | |
1057 test_start "Resize sidebar" | |
1058 rm -f "$plumbfile" | |
1059 touch "$plumbfile" | |
1060 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript" SF… | |
1061 status=$? | |
1062 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1063 contents="$(cat "$plumbfile")" | |
1064 test "$contents" = "http://b" || fail "Incorrect content: $contents" | |
1065 test_end | |
1066 | |
1067 # file does not exist. | |
1068 test_start "Test opening a file via argv that does not exist" | |
1069 SFEED_AUTOCMD="q" "$sc" "$feedfile1" "$feedfile2" "/tmp/noexist" | |
1070 status=$? | |
1071 test $status -eq 1 || fail "Exit code must be 1, was: $status" | |
1072 test_end | |
1073 | |
1074 # file access denied. | |
1075 test_start "Test opening a file via argv with no permission to it" | |
1076 SFEED_AUTOCMD="q" "$sc" "$feedfile1" "$feedfile2" "/root/denied" | |
1077 status=$? | |
1078 test $status -eq 1 || fail "Exit code must be 1, was: $status" | |
1079 test_end | |
1080 | |
1081 # setupterm: terminfo database or entry for $TERM not found | |
1082 # NOTE: if using minicurses this does not error. | |
1083 test_start 'Test bogus $TERM' | |
1084 emptydata | TERM=noexist "$sc" | |
1085 status=$? | |
1086 test $status -eq 1 || fail "Exit code must be 1, was: $status" | |
1087 test_end | |
1088 | |
1089 # $TERM: test tparm() returning NULL. Assuming TERM=dumb exists and retu… | |
1090 test_start 'Test tparm() returning NULL for a capability' | |
1091 fakedata | TERM=dumb SFEED_AUTOCMD="jjkkq" "$sc" | |
1092 status=$? | |
1093 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1094 test_end | |
1095 | |
1096 test_start "Mark read: nonexistant command: child in popen returns statu… | |
1097 rm -f "$urlfile" | |
1098 echo -n "test" > "$urlfile" | |
1099 (sleep 1; pkill -SIGTERM sfeed_curses) & | |
1100 fakedata | SFEED_URL_FILE="$urlfile" SFEED_MARK_READ="/tmp/nonexist" SFE… | |
1101 status=$? | |
1102 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1103 expect="test" | |
1104 result=$(cat "$urlfile") | |
1105 test "$result" = "$expect" || fail "Invalid result" | |
1106 test_end | |
1107 | |
1108 test_start "Check if sfeed_curses is killed by SIGTERM while an interact… | |
1109 rm -f /tmp/sfeed_curses_sigterm # state file. | |
1110 plumbscript2="$(mktemp)" | |
1111 $printf '#!/bin/sh\ncat\n' > "$plumbscript2" | |
1112 chmod +x "$plumbscript2" | |
1113 | |
1114 (sleep 1; pkill -SIGTERM sfeed_curses; | |
1115 sleep 1; pgrep sfeed_curses >/dev/null && touch /tmp/sfeed_curses_sigter… | |
1116 | |
1117 (sleep 3; pkill -SIGKILL sfeed_curses) & # watchdog: make sure it is kil… | |
1118 | |
1119 fakedata | SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript2" S… | |
1120 status=$? | |
1121 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1122 wait | |
1123 | |
1124 rm -f "$plumbscript2" | |
1125 if test -f /tmp/sfeed_curses_sigterm; then | |
1126 rm -f /tmp/sfeed_curses_sigterm | |
1127 fail "sfeed_curses was not killed by SIGTERM while the program w… | |
1128 fi | |
1129 rm -f /tmp/sfeed_curses_sigterm | |
1130 test_end | |
1131 | |
1132 test_start "Test non-interactive mode for yanking a link" | |
1133 rm -f "$pipefile" | |
1134 touch "$pipefile" | |
1135 (sleep 1;pkill -SIGTERM sfeed_curses) & | |
1136 SFEED_YANKER_INTERACTIVE="0" SFEED_YANKER="cat >$pipefile" SFEED_AUTOCMD… | |
1137 status=$? | |
1138 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1139 contents="$(cat "$pipefile")" | |
1140 line1="$($printf 'http://a')" | |
1141 test "$contents" = "$line1" || fail "Incorrect content: $contents, expec… | |
1142 test_end | |
1143 | |
1144 test_start "Test non-interactive mode for piping content" | |
1145 rm -f "$pipefile" | |
1146 touch "$pipefile" | |
1147 (sleep 1;pkill -SIGTERM sfeed_curses) & | |
1148 SFEED_PIPER_INTERACTIVE="0" SFEED_PIPER="cat >$pipefile" SFEED_AUTOCMD="… | |
1149 status=$? | |
1150 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1151 contents="$(cat "$pipefile")" | |
1152 line1="$($printf '0\t1. a\thttp://a\t\t\t\t\t\t\n')" | |
1153 test "$contents" = "$line1" || fail "Incorrect content: $contents, expec… | |
1154 test_end | |
1155 | |
1156 test_start "Test non-interactive mode for plumbing a link" | |
1157 rm -f "$plumbfile" | |
1158 touch "$plumbfile" | |
1159 (sleep 1;pkill -SIGTERM sfeed_curses) & | |
1160 SFEED_PLUMBER_INTERACTIVE="0" SFEED_PLUMBER="$plumbscript" SFEED_AUTOCMD… | |
1161 status=$? | |
1162 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1163 contents="$(cat "$plumbfile")" | |
1164 test "$contents" = "http://a" || fail "Incorrect URL: $contents" | |
1165 test_end | |
1166 | |
1167 # SIGTERM while search is open. | |
1168 test_start "test SIGTERM while search is open: should exit" | |
1169 (sleep 1;pkill -SIGTERM sfeed_curses) & | |
1170 SFEED_AUTOCMD="/abc" "$sc" "$feedfile1" "$feedfile2" | |
1171 status=$? | |
1172 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1173 test_end | |
1174 | |
1175 test_start "test SIGINT and exit status" | |
1176 (sleep 1;pkill -SIGINT sfeed_curses) & | |
1177 SFEED_AUTOCMD="jo" "$sc" "$feedfile1" "$feedfile2" | |
1178 status=$? | |
1179 test $status -eq 130 || fail "Exit code must be 130, was: $status" | |
1180 test_end | |
1181 | |
1182 test_start "test SIGINT, interrupting the search prompt" | |
1183 rm -f /tmp/sfeed_tests.tmp | |
1184 (sleep 1 | |
1185 pkill -SIGINT sfeed_curses | |
1186 sleep 1 | |
1187 c=$(pgrep sfeed_curses | wc -l) | |
1188 echo "$c" > /tmp/sfeed_tests.tmp | |
1189 pkill -SIGTERM sfeed_curses # make sure it stops. | |
1190 ) & | |
1191 SFEED_AUTOCMD="$($printf '/abc')" "$sc" "$feedfile1" "$feedfile2" | |
1192 status=$? | |
1193 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1194 c="$(cat /tmp/sfeed_tests.tmp)" | |
1195 c=$((c+0)) # convert int | |
1196 test $c -gt 0 || fail "The process was interrupted instead of the prompt" | |
1197 rm -f /tmp/sfeed_tests.tmp | |
1198 test_end | |
1199 | |
1200 test_start "Check reaping zombies (SIGCHLD)" | |
1201 rm -f /tmp/sfeed_zombies | |
1202 touch /tmp/sfeed_zombies | |
1203 (sleep 3 | |
1204 # check for any zombies | |
1205 ps -o 'state=' | grep Z > "/tmp/sfeed_zombies" | |
1206 pkill -SIGTERM sfeed_curses | |
1207 ) & | |
1208 fakedata | \ | |
1209 SFEED_YANKER_INTERACTIVE="0" SFEED_YANKER="sleep 1" \ | |
1210 SFEED_AUTOCMD="yjy" \ | |
1211 $sc | |
1212 status=$? | |
1213 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1214 count=$(wc -l < "/tmp/sfeed_zombies") | |
1215 count=$((count + 0)) | |
1216 rm -f /tmp/sfeed_zombies | |
1217 test $count -eq 0 || fail "Failed to handle SIGCHLD and reap zombies" | |
1218 test_end | |
1219 | |
1220 test_start "Check reaping zombies (SIGCHLD) while line editor is open" | |
1221 rm -f /tmp/sfeed_zombies | |
1222 touch /tmp/sfeed_zombies | |
1223 (sleep 3 | |
1224 # check for any zombies | |
1225 ps -o 'state=' | grep Z > "/tmp/sfeed_zombies" | |
1226 pkill -SIGTERM sfeed_curses | |
1227 ) & | |
1228 fakedata | \ | |
1229 SFEED_YANKER_INTERACTIVE="0" SFEED_YANKER="sleep 1" \ | |
1230 SFEED_AUTOCMD="yjy/abc" \ | |
1231 $sc | |
1232 status=$? | |
1233 test $status -eq 143 || fail "Exit code must be 143, was: $status" | |
1234 count=$(wc -l < "/tmp/sfeed_zombies") | |
1235 count=$((count + 0)) | |
1236 rm -f /tmp/sfeed_zombies | |
1237 test $count -eq 0 || fail "Failed to handle SIGCHLD and reap zombies" | |
1238 test_end | |
1239 | |
1240 test_start "Check if \$SFEED_FEED_PATH variable is properly set for plum… | |
1241 rm -f /tmp/sfeed_curses_path # value of $SFEED_FEED_PATH | |
1242 plumbscript2="$(mktemp)" | |
1243 $printf '#!/bin/sh\necho "$SFEED_FEED_PATH" > /tmp/sfeed_curses_path\n' … | |
1244 chmod +x "$plumbscript2" | |
1245 SFEED_PLUMBER_INTERACTIVE="1" SFEED_PLUMBER="$plumbscript2" SFEED_AUTOCM… | |
1246 status=$? | |
1247 test $status -eq 0 || fail "Exit code must be 0, was: $status" | |
1248 rm -f "$plumbscript2" | |
1249 content=$(cat '/tmp/sfeed_curses_path') | |
1250 if ! test "$content" = "$feedfile1"; then | |
1251 rm -f /tmp/sfeed_curses_path | |
1252 fail 'Value of $SFEED_FEED_PATH is incorrect' | |
1253 fi | |
1254 rm -f /tmp/sfeed_curses_path | |
1255 test_end | |
1256 | |
1257 # -a runs automated tests only. | |
1258 test "$1" = "-a" || manual | |
1259 | |
1260 cleanup | |
1261 echo "OK, all tests (${test_count}) passed \o/" |