1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash 2*cf5a6c84SAndroid Build Coastguard Worker 3*cf5a6c84SAndroid Build Coastguard Worker# Copyright 2013 Robin Mittal <[email protected]> 4*cf5a6c84SAndroid Build Coastguard Worker# Copyright 2013 Divya Kothari <[email protected]> 5*cf5a6c84SAndroid Build Coastguard Worker 6*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh 7*cf5a6c84SAndroid Build Coastguard Worker 8*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin" 9*cf5a6c84SAndroid Build Coastguard Worker#set -x 10*cf5a6c84SAndroid Build Coastguard Worker 11*cf5a6c84SAndroid Build Coastguard Worker# Creating test-file/dir for testing ls 12*cf5a6c84SAndroid Build Coastguard Workermkdir -p dir1 dir2 || exit 1 13*cf5a6c84SAndroid Build Coastguard Workerecho "test file1" > file1.txt 14*cf5a6c84SAndroid Build Coastguard Workerecho "test file2" > file2.txt 15*cf5a6c84SAndroid Build Coastguard Workerecho "hidden file1" > .hfile1 16*cf5a6c84SAndroid Build Coastguard Worker 17*cf5a6c84SAndroid Build Coastguard Workertestcmd "no argument" "" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" 18*cf5a6c84SAndroid Build Coastguard Workertestcmd "-C column spacing equals 2" "-C" "dir1 dir2 file1.txt file2.txt\n" \ 19*cf5a6c84SAndroid Build Coastguard Worker "" "" 20*cf5a6c84SAndroid Build Coastguard Workertestcmd "-x column spacing equals 2" "-x" "dir1 dir2 file1.txt file2.txt\n" \ 21*cf5a6c84SAndroid Build Coastguard Worker "" "" 22*cf5a6c84SAndroid Build Coastguard Workertestcmd "explicit files" "file*" "file1.txt\nfile2.txt\n" "" "" 23*cf5a6c84SAndroid Build Coastguard Workertestcmd "explicit -1" "-1 file*" "file1.txt\nfile2.txt\n" "" "" 24*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-p" "dir1/\ndir2/\nfile1.txt\nfile2.txt\n" "" "" 25*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-a" ".\n..\n.hfile1\ndir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" 26*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-A" ".hfile1\ndir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" 27*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-d" ".\n" "" "" 28*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-d *" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" 29*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-k" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" 30*cf5a6c84SAndroid Build Coastguard Workertestcmd "-m" "-m" "dir1, dir2, file1.txt, file2.txt\n" "" "" 31*cf5a6c84SAndroid Build Coastguard Workertestcmd "-F" "-F" "dir1/\ndir2/\nfile1.txt\nfile2.txt\n" "" "" 32*cf5a6c84SAndroid Build Coastguard Workertestcmd "-dk *" "-dk *" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" 33*cf5a6c84SAndroid Build Coastguard Workertestcmd "-Z" "-Z file1.txt | egrep -q '^[^ ]+ file1.txt' || echo fail" "" "" "" 34*cf5a6c84SAndroid Build Coastguard Workertestcmd "-lZ" "--full-time -lZ file1.txt | egrep -q '^-[rwx-]+ +[0-9]+ +[^ ]+ +[^ ]+ +[^ ]+ +[0-9]+ [0-9][0-9][0-9][0-9]-[0-9][0-9]-.* file1.txt' || echo fail" "" "" "" 35*cf5a6c84SAndroid Build Coastguard Worker 36*cf5a6c84SAndroid Build Coastguard Workerln -s file1.txt slink 37*cf5a6c84SAndroid Build Coastguard Workertestcmd "-l symlink" "-l slink | grep -q -- ' slink -> file1.txt' && echo ok" \ 38*cf5a6c84SAndroid Build Coastguard Worker "ok\n" "" "" 39*cf5a6c84SAndroid Build Coastguard Workerrm -f slink 40*cf5a6c84SAndroid Build Coastguard Worker 41*cf5a6c84SAndroid Build Coastguard Workerln -s /dev/null/nosuchfile nosuchfile 42*cf5a6c84SAndroid Build Coastguard Workertestcmd "-d broken symlink" "-d nosuchfile" "nosuchfile\n" "" "" 43*cf5a6c84SAndroid Build Coastguard Workerrm -f nosuchfile 44*cf5a6c84SAndroid Build Coastguard Worker 45*cf5a6c84SAndroid Build Coastguard Workerrm -rf file{1,2}.txt .hfile1 dir1 dir2 46*cf5a6c84SAndroid Build Coastguard Worker 47*cf5a6c84SAndroid Build Coastguard Workermkdir -p dir1 && touch file1.txt dir1/file2 48*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-R" ".:\ndir1\nfile1.txt\n\n./dir1:\nfile2\n" "" "" 49*cf5a6c84SAndroid Build Coastguard Workerrm -rf dir1 file1.txt 50*cf5a6c84SAndroid Build Coastguard Worker 51*cf5a6c84SAndroid Build Coastguard Workertouch file1.txt 52*cf5a6c84SAndroid Build Coastguard Workertestcmd "-i" "-i" "$(stat -c %i file1.txt) file1.txt\n" "" "" 53*cf5a6c84SAndroid Build Coastguard Workertestcmd "missing" "does-not-exist 2>&1 >/dev/null | grep -o does-not-exist" \ 54*cf5a6c84SAndroid Build Coastguard Worker "does-not-exist\n" "" "" 55*cf5a6c84SAndroid Build Coastguard Workerrm -f file1.txt 56*cf5a6c84SAndroid Build Coastguard Worker 57*cf5a6c84SAndroid Build Coastguard Worker# sort tests 58*cf5a6c84SAndroid Build Coastguard WorkerTIME=1234567890 59*cf5a6c84SAndroid Build Coastguard Workerfor i in one two three four five six seven eight nine ten 60*cf5a6c84SAndroid Build Coastguard Worker do touch -d @$((TIME++)) $i 61*cf5a6c84SAndroid Build Coastguard Workerdone 62*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-r" "two\nthree\nten\nsix\nseven\none\nnine\nfour\nfive\neight\n" \ 63*cf5a6c84SAndroid Build Coastguard Worker "" "" 64*cf5a6c84SAndroid Build Coastguard Workertestcmd "-w test 1" "-Cw 20" \ 65*cf5a6c84SAndroid Build Coastguard Worker "eight one three\nfive seven two\nfour six\nnine ten\n" "" "" 66*cf5a6c84SAndroid Build Coastguard Workertestcmd "-w test 2" "-Cw 19" \ 67*cf5a6c84SAndroid Build Coastguard Worker "eight seven\nfive six\nfour ten\nnine three\none two\n" "" "" 68*cf5a6c84SAndroid Build Coastguard Workerrm -f one two three four five six seven eight nine ten 69*cf5a6c84SAndroid Build Coastguard Worker 70*cf5a6c84SAndroid Build Coastguard Workertouch a b c d e f 71*cf5a6c84SAndroid Build Coastguard Workertestcmd "-w test 3" "-Cw 3" "a\nb\nc\nd\ne\nf\n" "" "" 72*cf5a6c84SAndroid Build Coastguard Workertestcmd "-w test 4" "-Cw 4" "a d\nb e\nc f\n" "" "" 73*cf5a6c84SAndroid Build Coastguard Workerrm -f a b c d e f 74*cf5a6c84SAndroid Build Coastguard Worker 75*cf5a6c84SAndroid Build Coastguard Workertouch 'hello 76*cf5a6c84SAndroid Build Coastguard Workerworld' 77*cf5a6c84SAndroid Build Coastguard Workertestcmd "default escaping" "" "hello 78*cf5a6c84SAndroid Build Coastguard Workerworld\n" "" "" 79*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-b" 'hello\\ \\rworld\n' "" "" 80*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-q" 'hello ?world\n' "" "" 81*cf5a6c84SAndroid Build Coastguard Workertestcmd "" "-N" 'hello 82*cf5a6c84SAndroid Build Coastguard Workerworld\n' "" "" 83*cf5a6c84SAndroid Build Coastguard Worker# testcmd "" "-qN" 'hello ?world\n' "" "" behaves differently, and ok with it. 84*cf5a6c84SAndroid Build Coastguard Workerrm hello* 85*cf5a6c84SAndroid Build Coastguard Worker 86*cf5a6c84SAndroid Build Coastguard Workermkdir zzz dir && echo hello > xxx && sleep .05 && echo longer > abc 87*cf5a6c84SAndroid Build Coastguard Worker# pause because filesystem granularity may be "jiffies". 88*cf5a6c84SAndroid Build Coastguard WorkerX=999; for i in abc x abc.jkl zzz xxx Abc cde.def dir bcd.ghi 89*cf5a6c84SAndroid Build Coastguard Workerdo sleep .05; touch -d @$((X--)) $i; done 90*cf5a6c84SAndroid Build Coastguard Worker 91*cf5a6c84SAndroid Build Coastguard Worker# MacOS filesystems are case insensitive, so Abc and abc can't coexist. 92*cf5a6c84SAndroid Build Coastguard Worker[ "$(uname)" == Darwin ] && SKIP=999 93*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '--group-directories-first' \ 94*cf5a6c84SAndroid Build Coastguard Worker 'dir\nzzz\nAbc\nabc\nabc.jkl\nbcd.ghi\ncde.def\nx\nxxx\n' '' '' 95*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '-cr' 'abc\nx\nabc.jkl\nzzz\nxxx\nAbc\ncde.def\ndir\nbcd.ghi\n' '' '' 96*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '-tr' 'bcd.ghi\ndir\ncde.def\nAbc\nxxx\nzzz\nabc.jkl\nx\nabc\n' '' '' 97*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '-S --group-directories-first' 'dir\nzzz\nabc\nxxx\nAbc\nabc.jkl\nbcd.ghi\ncde.def\nx\n' '' '' 98*cf5a6c84SAndroid Build Coastguard Workertestcmd '' '-X' 'Abc\nabc\ndir\nx\nxxx\nzzz\ncde.def\nbcd.ghi\nabc.jkl\n' '' '' 99*cf5a6c84SAndroid Build Coastguard Workertestcmd '-U matches -f' '-aU1' "$("$C" -f1)\n" '' '' 100*cf5a6c84SAndroid Build Coastguard Worker# -ltu sorts by atime, -lu shows atime but sorts by name (same for -oc/-otc) 101*cf5a6c84SAndroid Build Coastguard WorkerTZ=utc testcmd '-ou' '-ou --full-time . | sed -n "s/.*:\([0-9]*\).*/\1/p"' \ 102*cf5a6c84SAndroid Build Coastguard Worker '34\n39\n37\n31\n33\n32\n38\n35\n36\n' '' '' 103*cf5a6c84SAndroid Build Coastguard WorkerTZ=utc testcmd '-otu' '-otu --full-time . | sed -n "s/.*:\([0-9]*\).*/\1/p"' \ 104*cf5a6c84SAndroid Build Coastguard Worker '39\n38\n37\n36\n35\n34\n33\n32\n31\n' '' '' 105toyonly testcmd '' '--sort=reverse' 'zzz\nxxx\nx\ndir\ncde.def\nbcd.ghi\nabc.jkl\nabc\nAbc\n' '' '' 106toyonly testcmd '' '--sort=nocase,time' 'abc\nAbc\nabc.jkl\nbcd.ghi\ncde.def\ndir\nx\nxxx\nzzz\n' '' '' 107SKIP=0 108