diff options
-rwxr-xr-x | tests/ls.test | 15 | ||||
-rw-r--r-- | toys/posix/ls.c | 9 |
2 files changed, 15 insertions, 9 deletions
diff --git a/tests/ls.test b/tests/ls.test index 33877aa2..c207c3f6 100755 --- a/tests/ls.test +++ b/tests/ls.test @@ -33,9 +33,6 @@ testing "with -k" "$IN && ls -k; $OUT" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" " testing "with -m" "$IN && ls -m; $OUT" "dir1, dir2, file1.txt, file2.txt\n" "" "" testing "with -F" "$IN && ls -F; $OUT" "dir1/\ndir2/\nfile1.txt\nfile2.txt\n" "" "" testing "with -dk *" "$IN && ls -dk *; $OUT" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" -# TODO(ilijic) Remove `sed` commands in `-w` tests after trailing space patch is applied -testing "with -w - one column" "$IN && ls -xw 5 | sed 's/^[ \t]*//;s/[ \t]*$//' && $OUT" "dir1\ndir2\nfile1.txt\nfile2.txt\n" "" "" -testing "with -w - two columns" "$IN && ls -Cw 32 | sed 's/^[ \t]*//;s/[ \t]*$//' && $OUT" "dir1 file1.txt\ndir2 file2.txt\n" "" "" testing "with -Z" "$IN && ls -Z file1.txt | egrep -q '^[^ ]+ file1.txt' || echo fail; $OUT" "" "" "" testing "with -lZ" "$IN && ls --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; $OUT" "" "" "" @@ -60,5 +57,17 @@ unset INODE testing "missing" "$IN && ls does-not-exist 2>err ; grep -q 'ls:.*missing.*: No such file' err || echo missing error; $OUT" "" "" "" +rm -f lstest/{file1.txt,err} +touch lstest/{one,two,three,four,five,six,seven,eight,nine,ten} +testing "-w test 1" "$IN && ls -Cw 20; $OUT" \ + "eight one three\nfive seven two\nfour six\nnine ten\n" "" "" +testing "-w test 2" "$IN && ls -Cw 19; $OUT" \ + "eight seven\nfive six\nfour ten\nnine three\none two\n" "" "" + +rm -rf lstest/* +touch lstest/{a,b,c,d,e,f} +testing "-w test 3" "$IN && ls -Cw 3; $OUT" "a\nb\nc\nd\ne\nf\n" "" "" +testing "-w test 4" "$IN && ls -Cw 4; $OUT" "a d\nb e\nc f\n" "" "" + # Removing test dir for cleanup purpose rm -rf lstest diff --git a/toys/posix/ls.c b/toys/posix/ls.c index c7b09bf2..548a31a7 100644 --- a/toys/posix/ls.c +++ b/toys/posix/ls.c @@ -403,10 +403,9 @@ static void listfiles(int dirfd, struct dirtree *indir) // Loop through again to produce output. width = 0; - unsigned curcol = 0; for (ul = 0; ul<dtlen; ul++) { int ii, zap; - unsigned lastlen = *len, lastcol = curcol, color = 0; + unsigned curcol, lastlen = *len, lastcol = ul ? curcol : 0, color = 0; unsigned long next = next_column(ul, dtlen, columns, &curcol); struct stat *st = &(sort[next]->st); mode_t mode = st->st_mode; @@ -565,10 +564,8 @@ void ls_main(void) } TT.screen_width = 80; - if (FLAG(w)) { - // TODO (ilijic): Add test for setting w flag - TT.screen_width = TT.w; - } else { terminal_size(&TT.screen_width, NULL); } + if (FLAG(w)) TT.screen_width = TT.w+4; + else terminal_size(&TT.screen_width, NULL); if (TT.screen_width<2) TT.screen_width = 2; if (FLAG(b)) TT.escmore = " \\"; |