From 92e95c72639696cc67bfbb832c24a29e6b843287 Mon Sep 17 00:00:00 2001 From: Knight Date: Wed, 11 May 2016 00:41:07 +0800 Subject: [PATCH] dircolors: tests added --- tests/dircolors.rs | 71 +++++++ tests/fixtures/dircolors/bash_def.expected | 2 + tests/fixtures/dircolors/csh_def.expected | 1 + tests/fixtures/dircolors/internal.expected | 191 ++++++++++++++++++ .../fixtures/dircolors/keywords.csh.expected | 1 + tests/fixtures/dircolors/keywords.sh.expected | 2 + tests/fixtures/dircolors/keywords.txt | 23 +++ tests/fixtures/dircolors/test1.csh.expected | 1 + tests/fixtures/dircolors/test1.sh.expected | 2 + tests/fixtures/dircolors/test1.txt | 24 +++ 10 files changed, 318 insertions(+) create mode 100644 tests/dircolors.rs create mode 100644 tests/fixtures/dircolors/bash_def.expected create mode 100644 tests/fixtures/dircolors/csh_def.expected create mode 100644 tests/fixtures/dircolors/internal.expected create mode 100644 tests/fixtures/dircolors/keywords.csh.expected create mode 100644 tests/fixtures/dircolors/keywords.sh.expected create mode 100644 tests/fixtures/dircolors/keywords.txt create mode 100644 tests/fixtures/dircolors/test1.csh.expected create mode 100644 tests/fixtures/dircolors/test1.sh.expected create mode 100644 tests/fixtures/dircolors/test1.txt diff --git a/tests/dircolors.rs b/tests/dircolors.rs new file mode 100644 index 000000000..7a33ab95e --- /dev/null +++ b/tests/dircolors.rs @@ -0,0 +1,71 @@ +#[macro_use] +mod common; + +use common::util::*; + +static UTIL_NAME: &'static str = "dircolors"; + +#[test] +fn test1() { + test_helper("test1", "gnome"); +} + +#[test] +fn test_keywords() { + test_helper("keywords", ""); +} + +#[test] +fn test_internal_db() { + let (at, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-p"); + let out = ucmd.run().stdout; + let filename = "internal.expected"; + assert_eq!(out, at.read(filename)); +} + +#[test] +fn test_bash_default() { + let (at, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-b"); + let out = ucmd.env("TERM", "screen").run().stdout; + let filename = "bash_def.expected"; + assert_eq!(out, at.read(filename)); +} + +#[test] +fn test_csh_default() { + let (at, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-c"); + let out = ucmd.env("TERM", "screen").run().stdout; + let filename = "csh_def.expected"; + assert_eq!(out, at.read(filename)); +} + +#[test] +fn test_no_env() { + // no SHELL and TERM + let (_, mut ucmd) = testing(UTIL_NAME); + ucmd.fails(); +} + +#[test] +fn test_exclusive_option() { + let (_, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-cp"); + ucmd.fails(); +} + +fn test_helper(file_name: &str, term: &str) { + let (at, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-c").env("TERM", term); + let out = ucmd.arg(format!("{}.txt", file_name)).run().stdout; + let filename = format!("{}.csh.expected", file_name); + assert_eq!(out, at.read(&filename)); + + let (at, mut ucmd) = testing(UTIL_NAME); + ucmd.arg("-b").env("TERM", term); + let out = ucmd.arg(format!("{}.txt", file_name)).run().stdout; + let filename = format!("{}.sh.expected", file_name); + assert_eq!(out, at.read(&filename)); +} diff --git a/tests/fixtures/dircolors/bash_def.expected b/tests/fixtures/dircolors/bash_def.expected new file mode 100644 index 000000000..d0bd0d33b --- /dev/null +++ b/tests/fixtures/dircolors/bash_def.expected @@ -0,0 +1,2 @@ +LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:'; +export LS_COLORS diff --git a/tests/fixtures/dircolors/csh_def.expected b/tests/fixtures/dircolors/csh_def.expected new file mode 100644 index 000000000..2d1e1d374 --- /dev/null +++ b/tests/fixtures/dircolors/csh_def.expected @@ -0,0 +1 @@ +setenv LS_COLORS 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:' diff --git a/tests/fixtures/dircolors/internal.expected b/tests/fixtures/dircolors/internal.expected new file mode 100644 index 000000000..8566587f4 --- /dev/null +++ b/tests/fixtures/dircolors/internal.expected @@ -0,0 +1,191 @@ +# Configuration file for dircolors, a utility to help you set the +# LS_COLORS environment variable used by GNU ls with the --color option. +# Copyright (C) 1996-2016 Free Software Foundation, Inc. +# Copying and distribution of this file, with or without modification, +# are permitted provided the copyright notice and this notice are preserved. +# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the +# slackware version of dircolors) are recognized but ignored. +# Below are TERM entries, which can be a glob patterns, to match +# against the TERM environment variable to determine if it is colorizable. +TERM Eterm +TERM ansi +TERM color-xterm +TERM con[0-9]*x[0-9]* +TERM cons25 +TERM console +TERM cygwin +TERM dtterm +TERM eterm-color +TERM gnome +TERM gnome-256color +TERM hurd +TERM jfbterm +TERM konsole +TERM kterm +TERM linux +TERM linux-c +TERM mach-color +TERM mach-gnu-color +TERM mlterm +TERM putty +TERM putty-256color +TERM rxvt* +TERM screen* +TERM st +TERM st-256color +TERM terminator +TERM tmux* +TERM vt100 +TERM xterm* +# Below are the color init strings for the basic file types. A color init +# string consists of one or more of the following numeric codes: +# Attribute codes: +# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed +# Text color codes: +# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white +# Background color codes: +# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white +#NORMAL 00 # no color code at all +#FILE 00 # regular file: use no color at all +RESET 0 # reset to "normal" color +DIR 01;34 # directory +LINK 01;36 # symbolic link. (If you set this to 'target' instead of a + # numerical value, the color is as for the file pointed to.) +MULTIHARDLINK 00 # regular file with more than one link +FIFO 40;33 # pipe +SOCK 01;35 # socket +DOOR 01;35 # door +BLK 40;33;01 # block device driver +CHR 40;33;01 # character device driver +ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ... +MISSING 00 # ... and the files they point to +SETUID 37;41 # file that is setuid (u+s) +SETGID 30;43 # file that is setgid (g+s) +CAPABILITY 30;41 # file with capability +STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w) +OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky +STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable +# This is for files with execute permission: +EXEC 01;32 +# List any file extensions like '.gz' or '.tar' that you would like ls +# to colorize below. Put the extension, a space, and the color init string. +# (and any comments you want to add after a '#') +# If you use DOS-style suffixes, you may want to uncomment the following: +#.cmd 01;32 # executables (bright green) +#.exe 01;32 +#.com 01;32 +#.btm 01;32 +#.bat 01;32 +# Or if you want to colorize scripts even if they do not have the +# executable bit actually set. +#.sh 01;32 +#.csh 01;32 + # archives or compressed (bright red) +.tar 01;31 +.tgz 01;31 +.arc 01;31 +.arj 01;31 +.taz 01;31 +.lha 01;31 +.lz4 01;31 +.lzh 01;31 +.lzma 01;31 +.tlz 01;31 +.txz 01;31 +.tzo 01;31 +.t7z 01;31 +.zip 01;31 +.z 01;31 +.Z 01;31 +.dz 01;31 +.gz 01;31 +.lrz 01;31 +.lz 01;31 +.lzo 01;31 +.xz 01;31 +.bz2 01;31 +.bz 01;31 +.tbz 01;31 +.tbz2 01;31 +.tz 01;31 +.deb 01;31 +.rpm 01;31 +.jar 01;31 +.war 01;31 +.ear 01;31 +.sar 01;31 +.rar 01;31 +.alz 01;31 +.ace 01;31 +.zoo 01;31 +.cpio 01;31 +.7z 01;31 +.rz 01;31 +.cab 01;31 +# image formats +.jpg 01;35 +.jpeg 01;35 +.gif 01;35 +.bmp 01;35 +.pbm 01;35 +.pgm 01;35 +.ppm 01;35 +.tga 01;35 +.xbm 01;35 +.xpm 01;35 +.tif 01;35 +.tiff 01;35 +.png 01;35 +.svg 01;35 +.svgz 01;35 +.mng 01;35 +.pcx 01;35 +.mov 01;35 +.mpg 01;35 +.mpeg 01;35 +.m2v 01;35 +.mkv 01;35 +.webm 01;35 +.ogm 01;35 +.mp4 01;35 +.m4v 01;35 +.mp4v 01;35 +.vob 01;35 +.qt 01;35 +.nuv 01;35 +.wmv 01;35 +.asf 01;35 +.rm 01;35 +.rmvb 01;35 +.flc 01;35 +.avi 01;35 +.fli 01;35 +.flv 01;35 +.gl 01;35 +.dl 01;35 +.xcf 01;35 +.xwd 01;35 +.yuv 01;35 +.cgm 01;35 +.emf 01;35 +# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions +.ogv 01;35 +.ogx 01;35 +# audio formats +.aac 00;36 +.au 00;36 +.flac 00;36 +.m4a 00;36 +.mid 00;36 +.midi 00;36 +.mka 00;36 +.mp3 00;36 +.mpc 00;36 +.ogg 00;36 +.ra 00;36 +.wav 00;36 +# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions +.oga 00;36 +.opus 00;36 +.spx 00;36 +.xspf 00;36 diff --git a/tests/fixtures/dircolors/keywords.csh.expected b/tests/fixtures/dircolors/keywords.csh.expected new file mode 100644 index 000000000..f7f1f4ead --- /dev/null +++ b/tests/fixtures/dircolors/keywords.csh.expected @@ -0,0 +1 @@ +setenv LS_COLORS 'no=00:fi=00:rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:lc=\e[:rc=m:ec=\xff:' diff --git a/tests/fixtures/dircolors/keywords.sh.expected b/tests/fixtures/dircolors/keywords.sh.expected new file mode 100644 index 000000000..fdbf6871e --- /dev/null +++ b/tests/fixtures/dircolors/keywords.sh.expected @@ -0,0 +1,2 @@ +LS_COLORS='no=00:fi=00:rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:lc=\e[:rc=m:ec=\xff:'; +export LS_COLORS diff --git a/tests/fixtures/dircolors/keywords.txt b/tests/fixtures/dircolors/keywords.txt new file mode 100644 index 000000000..ac131d7ba --- /dev/null +++ b/tests/fixtures/dircolors/keywords.txt @@ -0,0 +1,23 @@ +NORMAL 00 # no color code at all +FILE 00 # regular file: use no color at all +RESET 0 # reset to "normal" color +Dir 01;34 # directory +LINK 01;36 # symbolic link. (If you set this to 'target' instead of a +multihardlink 00 # regular file with more than one link +fifo 40;33 # pipe +SOCK 01;35 # socket +DOOR 01;35 # door +BLK 40;33;01 # block device driver +CHR 40;33;01 # character device driver +orphan 40;31;01 # symlink to nonexistent file, or non-stat'able file ... +MISSING 00 # ... and the files they point to +setuid 37;41 # file that is setuid (u+s) +SETGID 30;43 # file that is setgid (g+s) +CAPABILITY 30;41 # file with capability +STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w) +Other_writable 34;42 # dir that is other-writable (o+w) and not sticky +STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable +EXEC 01;32 +LEFTCODE \e[ +RIGHTCODE m +ENDCODE \xff diff --git a/tests/fixtures/dircolors/test1.csh.expected b/tests/fixtures/dircolors/test1.csh.expected new file mode 100644 index 000000000..5d7186935 --- /dev/null +++ b/tests/fixtures/dircolors/test1.csh.expected @@ -0,0 +1 @@ +setenv LS_COLORS '*.xspf=00;36:no=00:fi=00:su=37;41:sg=30;43:ca=30;41:' diff --git a/tests/fixtures/dircolors/test1.sh.expected b/tests/fixtures/dircolors/test1.sh.expected new file mode 100644 index 000000000..c34901ea4 --- /dev/null +++ b/tests/fixtures/dircolors/test1.sh.expected @@ -0,0 +1,2 @@ +LS_COLORS='*.xspf=00;36:no=00:fi=00:su=37;41:sg=30;43:ca=30;41:'; +export LS_COLORS diff --git a/tests/fixtures/dircolors/test1.txt b/tests/fixtures/dircolors/test1.txt new file mode 100644 index 000000000..855a642ba --- /dev/null +++ b/tests/fixtures/dircolors/test1.txt @@ -0,0 +1,24 @@ +.xspf 00;36 +NORMAL 00 # no color code at all +FILE 00 # regular file: use no color at all +# Below are the color init strings for the basic file types. A color init +# string consists of one or more of the following numeric codes: +# Attribute codes: +# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed +# Text color codes: +# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white +# Background color codes: +# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white +TERM screen* +.rar 12;34 +.tar 01;31 +.tgz 01;31 +.arc 01;31 +ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ... +MISSING 00 # ... and the files they point to +.arj 01;31 +.taz 01;31 +TERM gnome +SETUID 37;41 # file that is setuid (u+s) +SETGID 30;43 # file that is setgid (g+s) +CAPABILITY 30;41 # file with capability