Split tests into one file per test directory

This commit is contained in:
Ben S 2016-06-11 13:57:33 +01:00
parent 331d5ea724
commit 5f01ff02fa
3 changed files with 64 additions and 42 deletions

View File

@ -1,51 +1,64 @@
#!/bin/bash
# This is a script to generate "awkward" files and directories as test cases,
# to check that exa can actually handle them: symlinks that point at
# themselves, directories that you aren't allowed to view, files with strange
# extended attributes, that sort of thing.
# This is a script to generate “awkward” files and directories that the
# testing scripts use as integration test cases.
#
# Tests like these verify that exa is doing the right thing at every step,
# from command-line parsing to colourising the output properly -- especially
# on multiple or weird platforms!
#
# Examples of the things it generates are:
# - files with newlines in their name
# - files with invalid UTF-8 in their name
# - directories you arent allowed to open
# - files with users and groups that dont exist
# - directories you arent allowed to read the xattrs for
## -- configuration --
# Directory that the files should be generated in.
DIR=testcases
if [[ -e "$DIR" ]]
then
echo "'$DIR' already exists - aborting" >&2
exit 2
fi
# You! Yes, you, the name of the user running this script.
YOU=`whoami`
# Someone with *higher* privileges than yourself, such as root.
ROOT=root
# A UID that doesn't map to any user on the system.
# A UID that doesnt map to any user on the system.
INVALID_UID=666
# A GID that doesn't map to any group on the system.
# A GID that doesnt map to any group on the system.
INVALID_GID=616
# List commands as they are run
# set -x
# Get confirmation from the user before running.
echo "This script will generate files into the $DIR directory."
echo "It requires sudo for the '$ROOT' user."
echo "You may want to edit this file before running it."
read -r -p "Continue? [y/N] " response
if [[ ! $response =~ ^([yY][eE][sS]|[yY])$ ]]
then
exit 2
fi
# Abort on any error!
# First things first, dont try to overwrite the testcases if they already
# exist. Its safer to just start again from scratch.
if [[ -e "$DIR" ]]
then
echo "'$DIR' already exists - aborting" >&2
echo "(you'll probably have to sudo rm it.)" >&2
exit 2
fi
# Abort if anything goes wrong past this point!
abort() { echo 'Hit an error - aborting' >&2; exit 1; }
trap 'abort' ERR
# Get confirmation from the user before running.
# echo "This script will generate files into the $DIR directory."
# echo "It requires sudo for the '$ROOT' user."
# echo "You probably want to edit this file before running it."
# read -r -p "Continue? [y/N] " response
# if [[ ! $response =~ ^([yY][eE][sS]|[yY])$ ]]
# then
# exit 2
# fi
# List commands as they are run
set -x
# Lets go!
mkdir "$DIR"
@ -61,8 +74,8 @@ ln -s nowhere "$DIR/links/broken"
mkdir "$DIR/passwd"
# sudo is needed for these because we technically aren't a member of the
# groups (because they don't exist), and chown and chgrp are smart enough to
# sudo is needed for these because we technically arent a member of the
# groups (because they dont exist), and chown and chgrp are smart enough to
# disallow it!
touch "$DIR/passwd/unknown-uid"

View File

@ -1,14 +1,15 @@
extern crate exa;
use exa::Exa;
/// ---------------------------------------------------------------------------
/// --------------------------------------------------------------------------
/// These tests assume that the generate annoying testcases script has been
/// run first. Otherwise, they will break!
/// ---------------------------------------------------------------------------
/// --------------------------------------------------------------------------
static DIRECTORIES: &'static str = concat!(
"\x1B[1;34m", "attributes", "\x1B[0m", '\n',
//"\x1B[1;34m", "filenames", "\x1B[0m", '\n',
"\x1B[1;34m", "links", "\x1B[0m", '\n',
"\x1B[1;34m", "passwd", "\x1B[0m", '\n',
"\x1B[1;34m", "permissions", "\x1B[0m", '\n',
@ -21,16 +22,3 @@ fn directories() {
assert_eq!(output, DIRECTORIES.as_bytes());
}
static PERMISSIONS: &'static str = concat!(
"\x1B[1;32m", "all-permissions", "\x1B[0m", '\n',
"\x1B[1;34m", "forbidden-directory", "\x1B[0m", '\n',
"no-permissions", '\n',
);
#[test]
fn permissions() {
let mut output = Vec::<u8>::new();
Exa::new( &[ "-1", "testcases/permissions" ], &mut output).unwrap().run().unwrap();
assert_eq!(output, PERMISSIONS.as_bytes());
}

21
tests/permissions.rs Normal file
View File

@ -0,0 +1,21 @@
extern crate exa;
use exa::Exa;
/// --------------------------------------------------------------------------
/// These tests assume that the generate annoying testcases script has been
/// run first. Otherwise, they will break!
/// --------------------------------------------------------------------------
static PERMISSIONS: &'static str = concat!(
"\x1B[1;32m", "all-permissions", "\x1B[0m", '\n',
"\x1B[1;34m", "forbidden-directory", "\x1B[0m", '\n',
"no-permissions", '\n',
);
#[test]
fn permissions() {
let mut output = Vec::<u8>::new();
Exa::new( &[ "-1", "testcases/permissions" ], &mut output).unwrap().run().unwrap();
assert_eq!(output, PERMISSIONS.as_bytes());
}