Kaynağa Gözat

Split tests into one file per test directory

Ben S 9 yıl önce
ebeveyn
işleme
5f01ff02fa
3 değiştirilmiş dosya ile 64 ekleme ve 42 silme
  1. 40 27
      generate-testcases.sh
  2. 3 15
      tests/directories.rs
  3. 21 0
      tests/permissions.rs

+ 40 - 27
generate-testcases.sh

@@ -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 aren’t allowed to open
+# - files with users and groups that don’t exist
+# - directories you aren’t 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
+
+# First things first, don’t try to overwrite the testcases if they already
+# exist. It’s 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 on any error!
+# 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
 
+# Let’s 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"

+ 3 - 15
tests/basic.rs → tests/directories.rs

@@ -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 - 0
tests/permissions.rs

@@ -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());
+}