mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-10 23:00:56 +00:00
Use Specsheet for the extended tests
This commit changes the way the extended test suite is run. Previously, there was a folder full of outputs, and a script that ran exa repeatedly to check the outputs match. This script was hacked-together, with many problems: • It stops at the first failure, so if one test fails, you have no idea how many actually failed. • It also didn't actually show you the diff if one was different, it just checked it. • It combined stdout and stderr, and didn't test the exit status of exa. • All the output file names were just whatever I felt like calling the file at the time. • There is no way to only run a few of the tests — you have to run the whole thing each time. • There's no feel-good overall view where you see how many tests are passing. I started writing Specsheet to solve this problem (amongst other problems), and now, three and a half years later, it's finally ready for prime time. The tests are now defined as data rather than as a script. The outputs have a consistent naming convention (directory_flags.ansitxt), and they check stdout, stderr, and exit status separately. Specsheet also lets simple outputs (empty, non-empty, or one-line error messages) can be written inline rather than needing to be in files. So even though this pretty much runs the same tests as the run.sh script did, the tests are now more organised, making it easy to see where tests are missing and functionality is not being tested.
This commit is contained in:
parent
86de17b788
commit
61c5df7c11
12
Cargo.lock
generated
12
Cargo.lock
generated
@ -152,9 +152,9 @@ checksum = "2448f6066e80e3bfc792e9c98bf705b4b0fc6e8ef5b43e5889aff0eaa9c58743"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libgit2-sys"
|
name = "libgit2-sys"
|
||||||
version = "0.12.13+1.0.1"
|
version = "0.12.14+1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "069eea34f76ec15f2822ccf78fe0cdb8c9016764d0a12865278585a74dbdeae5"
|
checksum = "8f25af58e6495f7caf2919d08f212de550cfa3ed2f5e744988938ea292b9f549"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
@ -247,9 +247,9 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-src"
|
name = "openssl-src"
|
||||||
version = "111.11.0+1.1.1h"
|
version = "111.12.0+1.1.1h"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "380fe324132bea01f45239fadfec9343adb044615f29930d039bec1ae7b9fa5b"
|
checksum = "858a4132194f8570a7ee9eb8629e85b23cbc4565f2d4a162e87556e5956abf61"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
]
|
]
|
||||||
@ -285,9 +285,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.18"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
|
checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
|
13
Justfile
13
Justfile
@ -1,5 +1,5 @@
|
|||||||
all: build test
|
all: build test xtests
|
||||||
all-release: build-release test-release
|
all-release: build-release test-release xtests-release
|
||||||
|
|
||||||
|
|
||||||
# compiles the exa binary
|
# compiles the exa binary
|
||||||
@ -28,6 +28,15 @@ all-release: build-release test-release
|
|||||||
cargo hack test --feature-powerset -- --quiet
|
cargo hack test --feature-powerset -- --quiet
|
||||||
|
|
||||||
|
|
||||||
|
# runs extended tests
|
||||||
|
@xtests:
|
||||||
|
xtests/run.sh
|
||||||
|
|
||||||
|
# runs extended tests (using the release mode exa)
|
||||||
|
@xtests-release:
|
||||||
|
xtests/run.sh --release
|
||||||
|
|
||||||
|
|
||||||
# lints the code
|
# lints the code
|
||||||
@clippy:
|
@clippy:
|
||||||
touch src/main.rs
|
touch src/main.rs
|
||||||
|
2
Vagrantfile
vendored
2
Vagrantfile
vendored
@ -1,5 +1,3 @@
|
|||||||
require 'date'
|
|
||||||
|
|
||||||
Vagrant.configure(2) do |config|
|
Vagrant.configure(2) do |config|
|
||||||
|
|
||||||
# We use Ubuntu instead of Debian because the image comes with two-way
|
# We use Ubuntu instead of Debian because the image comes with two-way
|
||||||
|
@ -20,6 +20,7 @@ fi
|
|||||||
|
|
||||||
sudo mkdir "$TEST_ROOT"
|
sudo mkdir "$TEST_ROOT"
|
||||||
sudo chmod 777 "$TEST_ROOT"
|
sudo chmod 777 "$TEST_ROOT"
|
||||||
|
sudo mkdir "$TEST_ROOT/empty"
|
||||||
|
|
||||||
|
|
||||||
# Awkward file size testcases.
|
# Awkward file size testcases.
|
||||||
@ -302,6 +303,10 @@ mkdir "deeply/nested/repository"
|
|||||||
cd "deeply/nested/repository"
|
cd "deeply/nested/repository"
|
||||||
git init >/dev/null
|
git init >/dev/null
|
||||||
touch subfile
|
touch subfile
|
||||||
|
# This file, ‘subfile’, should _not_ be marked as a new file by exa, because
|
||||||
|
# it’s in the sub-repository but hasn’t been added to it. Were the sub-repo not
|
||||||
|
# present, it would be marked as a new file, as the top-level repo knows about
|
||||||
|
# the ‘deeply’ directory.
|
||||||
|
|
||||||
find "$TEST_ROOT/git2" -exec touch {} -t $FIXED_DATE \;
|
find "$TEST_ROOT/git2" -exec touch {} -t $FIXED_DATE \;
|
||||||
sudo chown $FIXED_USER:$FIXED_USER -R "$TEST_ROOT/git2"
|
sudo chown $FIXED_USER:$FIXED_USER -R "$TEST_ROOT/git2"
|
||||||
@ -332,6 +337,7 @@ shopt -u dotglob
|
|||||||
GLOBIGNORE=".:.."
|
GLOBIGNORE=".:.."
|
||||||
|
|
||||||
mkdir "$TEST_ROOT/hiddens"
|
mkdir "$TEST_ROOT/hiddens"
|
||||||
|
cd "$TEST_ROOT/hiddens"
|
||||||
touch "$TEST_ROOT/hiddens/visible"
|
touch "$TEST_ROOT/hiddens/visible"
|
||||||
touch "$TEST_ROOT/hiddens/.hidden"
|
touch "$TEST_ROOT/hiddens/.hidden"
|
||||||
touch "$TEST_ROOT/hiddens/..extra-hidden"
|
touch "$TEST_ROOT/hiddens/..extra-hidden"
|
||||||
|
@ -1,4 +1,47 @@
|
|||||||
## Extra tests
|
# exa › xtests
|
||||||
|
|
||||||
These extra tests are intended to be run from a Vagrant VM that has already had its environment set up -- see the section in the README for more details.
|
These are the **extended tests**. They are integration tests: they run the `exa` binary with select configurations of parameters and environment variables, and assert that the program prints the correct text to standard output and error, and exits with the correct status code.
|
||||||
|
|
||||||
|
They test things like:
|
||||||
|
|
||||||
|
- broken symlinks
|
||||||
|
- extended attributes
|
||||||
|
- file names with weird stuff like newlines or escapes in
|
||||||
|
- invalid UTF-8
|
||||||
|
- missing users and groups
|
||||||
|
- nested Git repositories
|
||||||
|
|
||||||
|
They are intended to be run from the Vagrant VM that has already had its environment set up — see the `devtools/dev-create-test-filesystem.sh` script for how the files are generated.
|
||||||
|
|
||||||
|
|
||||||
|
## Anatomy of the tests
|
||||||
|
|
||||||
|
The tests are run using [Specsheet](https://specsheet.software/). The TOML files define the tests, and the files in `output/` contain the output that exa should produce.
|
||||||
|
|
||||||
|
For example, let’s look at one of the tests in `lines-view.toml`. This test checks that running exa does the right thing when running with the `-1` argument, and a directory full of files:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1’ displays file names, one on each line"
|
||||||
|
shell = "exa -1 /testcases/file-names"
|
||||||
|
stdout = { file = "outputs/names_lines.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline' ]
|
||||||
|
```
|
||||||
|
|
||||||
|
Here’s an explanation of each line:
|
||||||
|
|
||||||
|
1. The `[[cmd]]` line marks this test as a [cmd](https://specsheet.software/checks/command/cmd) check, which can run arbitrary commands. In this case, the commad is exa with some arguments.
|
||||||
|
|
||||||
|
2. The `name` field is a human-readable description of the feature of exa that’s under test. It gets printed to the screen as tests are run.
|
||||||
|
|
||||||
|
3. The `shell` field contains the shell script to execute. It should have `exa` in there somewhere.
|
||||||
|
|
||||||
|
4. The `stdout` field describes the [content](https://specsheet.software/docs/check-file-schema#content) that exa should print to standard output. In this case, the test asserts that the output of running the program should be identical to the contents of the file.
|
||||||
|
|
||||||
|
5. The `stderr` field describes the content of standard error. In this case, it asserts that nothing is printed to stderr.
|
||||||
|
|
||||||
|
6. The `status` field asserts that exa should exit with a status code of 0.
|
||||||
|
|
||||||
|
7. The `tags` field does not change the test at all, but can be used to filter which tests are run, instead of running all of them each time.
|
||||||
|
42
xtests/attributes.toml
Normal file
42
xtests/attributes.toml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -@lT’ produces a tree view with metadata and attribute entries"
|
||||||
|
shell = "exa -@lT /testcases/attributes"
|
||||||
|
stdout = { file = "outputs/attributes_xattrs_long_tree.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'xattrs', 'long', 'tree' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -@T’ produces a tree view with attribute entries"
|
||||||
|
shell = "exa -@T /testcases/attributes"
|
||||||
|
stdout = { file = "outputs/attributes_xattrs_tree.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'xattrs', 'tree' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -@T’ with file arguments produces a tree view with attribute entries"
|
||||||
|
shell = "exa -@T /testcases/attributes/*"
|
||||||
|
stdout = { file = "outputs/attributes_files_xattrs_tree.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'xattrs', 'tree' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -@T’ produces a tree view with attribute entries of symlinks"
|
||||||
|
shell = "exa -@T /testcases/links"
|
||||||
|
stdout = { file = "outputs/links_xattrs_tree.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'xattrs', 'tree' ]
|
||||||
|
|
||||||
|
|
||||||
|
# permission errors tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -@T’ displays an inaccessible directory with errors"
|
||||||
|
shell = "exa -@T /proc/1/root"
|
||||||
|
stdout = { file = "outputs/proc_1_root_xattrs.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'tree' ]
|
57
xtests/colour-term.toml
Normal file
57
xtests/colour-term.toml
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# details view (check the argument works)
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --colour=always’ always uses colours for metadata"
|
||||||
|
shell = "exa -l --colour=always /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-term' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --colour=never’ never uses colours for metadata"
|
||||||
|
shell = "exa -l --colour=never /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_monochrome.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-term' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --colour=automatic’ uses colours dependently for metadata"
|
||||||
|
shell = "exa -l --colour=automatic /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_monochrome.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-term' ]
|
||||||
|
|
||||||
|
|
||||||
|
# grid view (check that all colours are turned off)
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --colour=never’ never uses colours for file names"
|
||||||
|
shell = "exa --colour=never /testcases/file-names"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/files_grid_monochrome.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'grid', 'colour-term' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --colour=never’ never uses colours for files based on their extensions"
|
||||||
|
shell = "exa --colour=never /testcases/file-names-exts"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/exts_grid_monochrome.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'grid', 'colour-term' ]
|
||||||
|
|
||||||
|
|
||||||
|
# tree view (check that all colours are turned off)
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -T --colour=never’ never uses colours for punctuation and symlink targets"
|
||||||
|
shell = "exa -T --colour=never /testcases/file-names/links"
|
||||||
|
stdout = { file = "outputs/links_grid_monochrome.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'tree', 'colour-term' ]
|
@ -1,4 +0,0 @@
|
|||||||
[4mPermissions[0m [4mSize[0m [4mUser[0m [4mDate Accessed[0m [4mName[0m
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 3 Mar 2003[0m plum
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m15 Jun 2006[0m pear
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m22 Dec 2009[0m peach
|
|
@ -1,4 +0,0 @@
|
|||||||
[4mPermissions[0m [4mSize[0m [4mUser[0m [4mDate Modified[0m [4mName[0m
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m22 Dec 2009[0m plum
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m15 Jun 2006[0m peach
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 3 Mar 2003[0m pear
|
|
@ -1,4 +0,0 @@
|
|||||||
[4mPermissions[0m [4mSize[0m [4mUser[0m [4mDate Modified[0m [4mName[0m
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m 3 Mar 2003[0m pear
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m15 Jun 2006[0m peach
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[31mw[38;5;244m-[33mr[38;5;244m--[0m [1;32m0[0m cassowary [34m22 Dec 2009[0m plum
|
|
17
xtests/debug-logging.toml
Normal file
17
xtests/debug-logging.toml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘EXA_DEBUG=1 exa’ produces debug output"
|
||||||
|
shell = "exa --long /testcases"
|
||||||
|
environment = { EXA_DEBUG = "1" }
|
||||||
|
stdout = { empty = false }
|
||||||
|
stderr = { string = "DEBUG" }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'debug', 'env', 'long' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘EXA_DEBUG=trace exa’ produces trace-level debug output"
|
||||||
|
shell = "exa --long /testcases"
|
||||||
|
environment = { EXA_DEBUG = "trace" }
|
||||||
|
stdout = { empty = false }
|
||||||
|
stderr = { string = "TRACE" }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'debug', 'env', 'long' ]
|
46
xtests/details-view-dates.toml
Normal file
46
xtests/details-view-dates.toml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# alternate date formats
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --time-style=long-iso’ produces a table using the long-iso date format"
|
||||||
|
shell = "exa -l --time-style=long-iso /testcases/dates"
|
||||||
|
stdout = { file = "outputs/dates_long_timestyle_longiso.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'time-style' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --time-style=full-iso’ produces a table using the full-iso date format"
|
||||||
|
shell = "exa -l --time-style=full-iso /testcases/dates"
|
||||||
|
stdout = { file = "outputs/dates_long_timestyle_fulliso.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'time-style' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --time-style=iso’ produces a table using the iso date format"
|
||||||
|
shell = "exa -l --time-style=iso /testcases/dates"
|
||||||
|
stdout = { file = "outputs/dates_long_timestyle_iso.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'time-style' ]
|
||||||
|
|
||||||
|
|
||||||
|
# locales
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l’ using a locale with 4-character-long month abbreviations (‘ja_JP’) sizes the date column correctly"
|
||||||
|
shell = "exa -l /testcases/dates"
|
||||||
|
environment = { LC_ALL = "ja_JP.UTF-8", LANG = "ja_JP.UTF-8" }
|
||||||
|
stdout = { file = "outputs/dates_long_localejp.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'locales' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l’ using a locale with 5-character-long month abbreviations (‘fr_FR’) sizes the date column correctly"
|
||||||
|
shell = "exa -l /testcases/dates"
|
||||||
|
environment = { LC_ALL = "fr_FR.UTF-8", LANG = "fr_FR.UTF-8" }
|
||||||
|
stdout = { file = "outputs/dates_long_localefr.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'locales' ]
|
63
xtests/details-view-filesizes.toml
Normal file
63
xtests/details-view-filesizes.toml
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lb’ produces a details table with binary file sizes"
|
||||||
|
shell = "exa -lb /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_binary.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'binary' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lB’ produces a details table with bytes file sizes"
|
||||||
|
shell = "exa -lB /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_bytes.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'bytes' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lhb’ produces a details table with a header and binary file sizes"
|
||||||
|
shell = "exa -lhb /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_header_binary.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'header', 'binary' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lhB’ produces a details table with a header and bytes file sizes"
|
||||||
|
shell = "exa -lhB /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_header_bytes.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'header', 'bytes' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --color-scale’ (US spelling) produces a details table using a file size colour scale"
|
||||||
|
shell = "exa -l --color-scale /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_colourscale.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-scale' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --colour-scale’ (UK spelling) produces a details table using a file size colour scale"
|
||||||
|
shell = "exa -l --colour-scale /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_colourscale.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-scale' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --colour-scale --binary’ produces a details table using a file size colour scale and binary sizes"
|
||||||
|
shell = "exa -l --colour-scale --binary /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_colourscale_binary.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-scale', 'binary' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l --colour-scale --bytes’ produces a details table using a file size colour scale and byte sizes"
|
||||||
|
shell = "exa -l --colour-scale --bytes /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_colourscale_bytes.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'colour-scale', 'bytes' ]
|
7
xtests/details-view-passwd.toml
Normal file
7
xtests/details-view-passwd.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lgh’ produces a tree view with attribute entries"
|
||||||
|
shell = "exa -lgh /testcases/passwd"
|
||||||
|
stdout = { file = "outputs/passwd_long_group_header.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'group', 'header' ]
|
15
xtests/details-view-permissions.toml
Normal file
15
xtests/details-view-permissions.toml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lghR’ (not as the user) produces a tree view with attribute entries"
|
||||||
|
shell = "exa -lghR /testcases/permissions"
|
||||||
|
stdout = { file = "outputs/permissions_long_group_header.ansitxt" }
|
||||||
|
stderr = { string = "/testcases/permissions/forbidden-directory: Permission denied (os error 13)" }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'group', 'header', 'xattrs' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lghR’ (as the user) produces a tree view with attribute entries"
|
||||||
|
shell = "sudo -u cassowary exa -lghR /testcases/permissions"
|
||||||
|
stdout = { file = "outputs/permissions_long_group_header_sudo.ansitxt" }
|
||||||
|
stderr = { string = "/testcases/permissions/forbidden-directory: Permission denied (os error 13)" }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'group', 'header', 'xattrs', 'sudo' ]
|
45
xtests/details-view.toml
Normal file
45
xtests/details-view.toml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l’ produces a details table"
|
||||||
|
shell = "exa -l /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long' ]
|
||||||
|
|
||||||
|
|
||||||
|
# header tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lh’ produces a details table with a header"
|
||||||
|
shell = "exa -lh /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long_header.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'header' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lh’ with an empty directory skips the header"
|
||||||
|
shell = "exa -lh /testcases/empty"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'header' ]
|
||||||
|
|
||||||
|
|
||||||
|
# file kinds
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l’ handles file kinds"
|
||||||
|
shell = "exa -l /testcases/specials"
|
||||||
|
stdout = { file = "outputs/specials_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lF’ handles and classifies file kinds"
|
||||||
|
shell = "exa -lF /testcases/specials"
|
||||||
|
stdout = { file = "outputs/specials_long_classify.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'classify' ]
|
@ -1,3 +0,0 @@
|
|||||||
[1;34mtarget[0m
|
|
||||||
[36mtarget/[1;34mdebug[0m
|
|
||||||
[36mtarget/debug/[1;34mbuild[0m
|
|
58
xtests/dotfiles.toml
Normal file
58
xtests/dotfiles.toml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# hidden files in grid view
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa’ does not show hidden files (in grid view)"
|
||||||
|
shell = "exa /testcases/hiddens"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/hiddens_grid.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'all', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -a’ shows hidden files (in grid view)"
|
||||||
|
shell = "exa -a /testcases/hiddens"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/hiddens_grid_all.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'all', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -aa’ shows hidden files, ., and .. (in grid view)"
|
||||||
|
shell = "exa -aa /testcases/hiddens"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/hiddens_grid_all_all.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'all', 'grid' ]
|
||||||
|
|
||||||
|
|
||||||
|
# hidden files in long view
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -l’ does not show hidden files (in details view)"
|
||||||
|
shell = "exa -l /testcases/hiddens"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/hiddens_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'all', 'long' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -la’ shows hidden files (in details view)"
|
||||||
|
shell = "exa -la /testcases/hiddens"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/hiddens_long_all.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'all', 'long' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -laa’ shows hidden files, ., and .. (in details view)"
|
||||||
|
shell = "exa -laa /testcases/hiddens"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/hiddens_long_all_all.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'all', 'long' ]
|
@ -1 +0,0 @@
|
|||||||
Flag -l conflicts with flag --long
|
|
@ -1 +0,0 @@
|
|||||||
Unknown argument --ternary
|
|
@ -1,2 +0,0 @@
|
|||||||
Flag -t needs a value (choices: modified, changed, accessed, created)
|
|
||||||
To sort newest files last, try "--sort newest", or just "-snew"
|
|
@ -1,2 +0,0 @@
|
|||||||
Option --time (-t) has no "r" setting (choices: modified, changed, accessed, created)
|
|
||||||
To sort oldest files last, try "--sort oldest", or just "-sold"
|
|
@ -1 +0,0 @@
|
|||||||
Flag --long cannot take a value
|
|
@ -1 +0,0 @@
|
|||||||
Option --time-style has no "24" setting (choices: default, long-iso, full-iso, iso)
|
|
@ -1 +0,0 @@
|
|||||||
Unknown argument -4
|
|
@ -1 +0,0 @@
|
|||||||
Flag -l was given twice
|
|
@ -1 +0,0 @@
|
|||||||
Option --binary (-b) is useless without option --long (-l)
|
|
@ -1 +0,0 @@
|
|||||||
Flag --time needs a value (choices: modified, changed, accessed, created)
|
|
17
xtests/errors.toml
Normal file
17
xtests/errors.toml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Error suggestions
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -ltr’ offers a suggestion"
|
||||||
|
shell = "exa -ltr"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "To sort oldest files last, try \"--sort oldest\", or just \"-sold\""}
|
||||||
|
status = 3
|
||||||
|
tags = [ 'error', 'long', 'sort' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -lt’ offers a suggestion"
|
||||||
|
shell = "exa -lt"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "To sort newest files last, try \"--sort newest\", or just \"-snew\""}
|
||||||
|
status = 3
|
||||||
|
tags = [ 'error', 'long', 'sort' ]
|
@ -1,29 +0,0 @@
|
|||||||
[36m/testcases/[1;34mfile-names[0m
|
|
||||||
[38;5;244m├──[0m ansi: [[31m\u{1b}[0m[34mblue[31m\u{1b}[0m[0m]
|
|
||||||
[38;5;244m├──[0m ascii: hello
|
|
||||||
[38;5;244m├──[0m backspace: [[31m\u{8}[0m]
|
|
||||||
[38;5;244m├──[0m bell: [[31m\u{7}[0m]
|
|
||||||
[38;5;244m├──[0m emoji: [🆒]
|
|
||||||
[38;5;244m├──[0m escape: [[31m\u{1b}[0m]
|
|
||||||
[38;5;244m├──[0m form-feed: [[31m\u{c}[0m]
|
|
||||||
[38;5;244m├──[0m invalid-utf8-1: [<5B>]
|
|
||||||
[38;5;244m│ └──[0m [31m<Error: path somehow contained a NUL?>[0m
|
|
||||||
[38;5;244m├──[0m invalid-utf8-2: [<5B>(]
|
|
||||||
[38;5;244m│ └──[0m [31m<Error: path somehow contained a NUL?>[0m
|
|
||||||
[38;5;244m├──[0m invalid-utf8-3: [<5B>(]
|
|
||||||
[38;5;244m│ └──[0m [31m<Error: path somehow contained a NUL?>[0m
|
|
||||||
[38;5;244m├──[0m invalid-utf8-4: [<5B>(<28>(]
|
|
||||||
[38;5;244m│ └──[0m [31m<Error: path somehow contained a NUL?>[0m
|
|
||||||
[38;5;244m├──[0m [1;34mlinks[0m
|
|
||||||
[38;5;244m│ ├──[0m [36manother: [[31m\n[36m][0m [38;5;244m->[0m [36m/testcases/file-names/new-line-dir: [[31m\n[36m]/[0manother: [[31m\n[0m]
|
|
||||||
[38;5;244m│ ├──[0m [36mbroken[0m [31m->[0m [4;31m/testcases/file-names/new-line-dir: [\n]/broken[0m
|
|
||||||
[38;5;244m│ │ └──[0m [31m<No such file or directory (os error 2)>[0m
|
|
||||||
[38;5;244m│ └──[0m [36msubfile[0m [38;5;244m->[0m [36m/testcases/file-names/new-line-dir: [[31m\n[36m]/[0msubfile
|
|
||||||
[38;5;244m├──[0m [1;34mnew-line-dir: [[0m[31m\n[1;34m][0m
|
|
||||||
[38;5;244m│ ├──[0m another: [[31m\n[0m]
|
|
||||||
[38;5;244m│ └──[0m subfile
|
|
||||||
[38;5;244m├──[0m new-line: [[31m\n[0m]
|
|
||||||
[38;5;244m├──[0m return: [[31m\r[0m]
|
|
||||||
[38;5;244m├──[0m tab: [[31m\t[0m]
|
|
||||||
[38;5;244m├──[0m utf-8: pâté
|
|
||||||
[38;5;244m└──[0m vertical-tab: [[31m\u{b}[0m]
|
|
@ -1,3 +0,0 @@
|
|||||||
1_bytes 2_bytes 3_bytes 4_bytes 5_bytes 6_bytes 7_bytes 8_bytes 9_bytes 10_bytes 11_bytes 12_bytes 13_bytes
|
|
||||||
1_KiB 2_KiB 3_KiB 4_KiB 5_KiB 6_KiB 7_KiB 8_KiB 9_KiB 10_KiB 11_KiB 12_KiB 13_KiB
|
|
||||||
1_MiB 2_MiB 3_MiB 4_MiB 5_MiB 6_MiB 7_MiB 8_MiB 9_MiB 10_MiB 11_MiB 12_MiB 13_MiB
|
|
@ -1,3 +0,0 @@
|
|||||||
1_bytes 2_bytes 3_bytes 4_bytes 5_bytes 6_bytes 7_bytes 8_bytes 9_bytes 10_bytes 11_bytes 12_bytes 13_bytes
|
|
||||||
1_KiB 2_KiB 3_KiB 4_KiB 5_KiB 6_KiB 7_KiB 8_KiB 9_KiB 10_KiB 11_KiB 12_KiB 13_KiB
|
|
||||||
1_MiB 2_MiB 3_MiB 4_MiB 5_MiB 6_MiB 7_MiB 8_MiB 9_MiB 10_MiB 11_MiB 12_MiB 13_MiB
|
|
@ -1,39 +0,0 @@
|
|||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m1[0m cassowary [34m 1 Jan 12:34[0m 1_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m1.0[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 1_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m1.0[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 1_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m2[0m cassowary [34m 1 Jan 12:34[0m 2_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m2.0[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 2_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m2.1[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 2_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m3[0m cassowary [34m 1 Jan 12:34[0m 3_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m3.1[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 3_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m3.1[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 3_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m4[0m cassowary [34m 1 Jan 12:34[0m 4_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m4.1[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 4_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m4.2[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 4_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m5[0m cassowary [34m 1 Jan 12:34[0m 5_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m5.1[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 5_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m5.2[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 5_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m6[0m cassowary [34m 1 Jan 12:34[0m 6_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m6.1[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 6_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m6.3[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 6_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m7[0m cassowary [34m 1 Jan 12:34[0m 7_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m7.2[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 7_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m7.3[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 7_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m8[0m cassowary [34m 1 Jan 12:34[0m 8_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m8.2[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 8_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m8.4[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 8_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m9[0m cassowary [34m 1 Jan 12:34[0m 9_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m9.2[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 9_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m9.4[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 9_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m10[0m cassowary [34m 1 Jan 12:34[0m 10_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m10[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 10_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m10[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 10_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m11[0m cassowary [34m 1 Jan 12:34[0m 11_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m11[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 11_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m11[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 11_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m12[0m cassowary [34m 1 Jan 12:34[0m 12_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m12[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 12_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m12[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 12_MiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m13[0m cassowary [34m 1 Jan 12:34[0m 13_bytes
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m13[0m[32mk[0m cassowary [34m 1 Jan 12:34[0m 13_KiB
|
|
||||||
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [1;32m13[0m[32mM[0m cassowary [34m 1 Jan 12:34[0m 13_MiB
|
|
202
xtests/git.toml
Normal file
202
xtests/git.toml
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
# The first Git repo: additions and modifications
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column"
|
||||||
|
shell = "exa --git -l /testcases/git"
|
||||||
|
stdout = { file = "outputs/git1_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -lR’ shows a Git status column in every table"
|
||||||
|
shell = "exa --git -lR /testcases/git"
|
||||||
|
stdout = { file = "outputs/git1_long_recurse.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -lT’ shows a Git status column alongside the tree"
|
||||||
|
shell = "exa --git -lT /testcases/git"
|
||||||
|
stdout = { file = "outputs/git1_long_tree.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ with a directory argument shows the combined Git status column"
|
||||||
|
shell = "exa --git -l /testcases/git/moves/thither"
|
||||||
|
stdout = { file = "outputs/git1_long_moves.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column containing new files"
|
||||||
|
shell = "exa --git -l /testcases/git/additions"
|
||||||
|
stdout = { file = "outputs/git1_long_additions.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column containing modified files"
|
||||||
|
shell = "exa --git -l /testcases/git/edits"
|
||||||
|
stdout = { file = "outputs/git1_long_edits.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column containing multiple statuses"
|
||||||
|
shell = "exa --git -l /testcases/git/{additions,edits}"
|
||||||
|
stdout = { file = "outputs/git1_long_multiple.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -lGd’ with file arguments shows a Git status column"
|
||||||
|
shell = "exa --git -lGd /testcases/git/**/* /testcases"
|
||||||
|
environment = { COLUMNS = "150" }
|
||||||
|
stdout = { file = "outputs/git1_paths_long_grid.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'grid', 'git', 'list-dirs' ]
|
||||||
|
|
||||||
|
|
||||||
|
# The second Git repo: nested repositories and file ignoring
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column with ignored statuses"
|
||||||
|
shell = "exa --git -l /testcases/git2"
|
||||||
|
stdout = { file = "outputs/git2_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -lR’ shows a Git status column in every table, handling ignored files and nested repositories"
|
||||||
|
shell = "exa --git -lR /testcases/git2"
|
||||||
|
stdout = { file = "outputs/git2_long_recurse.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -lT’ shows a Git status column alongside the tree, handling ignored files and nested repositories"
|
||||||
|
shell = "exa --git -lT /testcases/git2"
|
||||||
|
stdout = { file = "outputs/git2_long_tree.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ with a directory argument shows ignored flags inside a directory"
|
||||||
|
shell = "exa --git -l /testcases/git2/ignoreds"
|
||||||
|
stdout = { file = "outputs/git2_long_ignorednested.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ with an ignored directory argument does not flag the contents as ignored"
|
||||||
|
shell = "exa --git -l /testcases/git2/target"
|
||||||
|
stdout = { file = "outputs/git2_long_ignoreddir.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ with a nested repository argument uses the sub-repository rules"
|
||||||
|
shell = "exa --git -l /testcases/git2/deeply/nested/repository"
|
||||||
|
stdout = { file = "outputs/git2_long_nested.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ with multiple directory arguments still gets the flags correct"
|
||||||
|
shell = "exa --git -l /testcases/git2/{deeply,ignoreds,target}"
|
||||||
|
stdout = { file = "outputs/git2_long_multiple.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
|
||||||
|
# The third Git repo: broken symlinks
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ handles broken symlinks in Git repositories"
|
||||||
|
shell = "exa --git -l /testcases/git3"
|
||||||
|
stdout = { file = "outputs/git3_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
|
||||||
|
# Both repositories 1 and 2 at once
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column for multiple repositories"
|
||||||
|
shell = "exa --git -l /testcases/git /testcases/git2"
|
||||||
|
stdout = { file = "outputs/git1+2_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column for multiple repositories across multiple directories"
|
||||||
|
shell = "exa --git -l /testcases/{git/additions,git2/deeply,git/edits,git2/deeply/nested}"
|
||||||
|
stdout = { file = "outputs/git1+2_long_directories.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows a Git status column for multiple repositories across multiple directories"
|
||||||
|
shell = "exa --git -l /testcases/{git2/deeply/nested/directory,git/edits,git2/target,git2/deeply,git}"
|
||||||
|
stdout = { file = "outputs/git1+2_long_nested.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
|
||||||
|
# No repository present
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -l’ shows an empty status for no repository"
|
||||||
|
shell = "exa --git -l /testcases/files"
|
||||||
|
stdout = { file = "outputs/files_long.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git -lG’ shows an empty status for no repository"
|
||||||
|
shell = "exa --git -lG /testcases/files"
|
||||||
|
environment = { COLUMNS = "40" }
|
||||||
|
stdout = { file = "outputs/files_long_grid_1col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid', 'git' ]
|
||||||
|
|
||||||
|
|
||||||
|
# Git-ignoring
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git-ignore -lR’ skips Git-ignored files"
|
||||||
|
shell = "exa --git-ignore -lR /testcases/git2"
|
||||||
|
stdout = { file = "outputs/git2_long_recurse_gitignore.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git-ignore' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --git-ignore -lT’ skips Git-ignored files"
|
||||||
|
shell = "exa --git-ignore -lT /testcases/git2"
|
||||||
|
stdout = { file = "outputs/git2_long_tree_gitignore.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'long', 'git-ignore' ]
|
@ -1,3 +0,0 @@
|
|||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [1;34madditions[0m
|
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [1;34medits[0m
|
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [1;34mmoves[0m
|
|
@ -1,3 +0,0 @@
|
|||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [1;34mdeeply[0m
|
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [1;34mignoreds[0m
|
|
||||||
[1;34md[33mr[31mw[32mx[0m[33mr[31mw[32mx[33mr[38;5;244m-[32mx[0m [38;5;244m-[0m cassowary [34m 1 Jan 12:34[0m [1;34mtarget[0m
|
|
78
xtests/grid-details-view.toml
Normal file
78
xtests/grid-details-view.toml
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# listing directory tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=40 exa -lG’ produces a grid with details of 1 column"
|
||||||
|
shell = "exa -lG /testcases/files"
|
||||||
|
environment = { COLUMNS = "40" }
|
||||||
|
stdout = { file = "outputs/files_long_grid_1col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=80 exa -lG’ produces a grid with details of 1 column"
|
||||||
|
shell = "exa -lG /testcases/files"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/files_long_grid_1col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=120 exa -lG’ produces a grid with details of 2 columns"
|
||||||
|
shell = "exa -lG /testcases/files"
|
||||||
|
environment = { COLUMNS = "120" }
|
||||||
|
stdout = { file = "outputs/files_long_grid_2col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=160 exa -lG’ produces a grid with details of 3 columns"
|
||||||
|
shell = "exa -lG /testcases/files"
|
||||||
|
environment = { COLUMNS = "160" }
|
||||||
|
stdout = { file = "outputs/files_long_grid_3col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=200 exa -lG’ produces a grid with details of 4 columns"
|
||||||
|
shell = "exa -lG /testcases/files"
|
||||||
|
environment = { COLUMNS = "200" }
|
||||||
|
stdout = { file = "outputs/files_long_grid_4col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
|
||||||
|
# listing files tests
|
||||||
|
# (these rely on bash’s glob sort order)
|
||||||
|
# (some of the output files also have trailing whitespace)
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=100 exa -lG’ with file arguments produces a grid with details of 1 column, with full paths"
|
||||||
|
shell = "exa -lG /testcases/files/*"
|
||||||
|
environment = { COLUMNS = "100" }
|
||||||
|
stdout = { file = "outputs/files_paths_long_grid_1col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=150 exa -lG’ with file arguments produces a grid with details of 2 columns, with full paths"
|
||||||
|
shell = "exa -lG /testcases/files/*"
|
||||||
|
environment = { COLUMNS = "150" }
|
||||||
|
stdout = { file = "outputs/files_paths_long_grid_2col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=200 exa -lG’ with file arguments produces a grid with details of 3 columns, with full paths"
|
||||||
|
shell = "exa -lG /testcases/files/*"
|
||||||
|
environment = { COLUMNS = "200" }
|
||||||
|
stdout = { file = "outputs/files_paths_long_grid_3col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'long', 'grid' ]
|
124
xtests/grid-view.toml
Normal file
124
xtests/grid-view.toml
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
# file name tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa’ produces a grid of file names"
|
||||||
|
shell = "exa /testcases/file-names"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/names_grid.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -x’ produces an across grid of file names"
|
||||||
|
shell = "exa -x /testcases/file-names"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/names_grid_across.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid', 'across' ]
|
||||||
|
|
||||||
|
|
||||||
|
# recurse tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -R’ produces several grids of file names"
|
||||||
|
shell = "exa -R /testcases/file-names"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/names_grid_recurse.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid', 'recurse' ]
|
||||||
|
|
||||||
|
|
||||||
|
# symlink tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa’ highlights symlinks and broken symlinks"
|
||||||
|
shell = "exa /testcases/links"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/links_grid.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# columns and width tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=40 exa’ produces a grid of 4 columns"
|
||||||
|
shell = "exa /testcases/files"
|
||||||
|
environment = { COLUMNS = "40" }
|
||||||
|
stdout = { file = "outputs/files_grid_4col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=80 exa’ produces a grid of 8 columns"
|
||||||
|
shell = "exa /testcases/files"
|
||||||
|
environment = { COLUMNS = "80" }
|
||||||
|
stdout = { file = "outputs/files_grid_8col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=120 exa’ produces a grid of 13 columns"
|
||||||
|
shell = "exa /testcases/files"
|
||||||
|
environment = { COLUMNS = "120" }
|
||||||
|
stdout = { file = "outputs/files_grid_13col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=160 exa’ produces a grid of 13 columns"
|
||||||
|
shell = "exa /testcases/files"
|
||||||
|
environment = { COLUMNS = "160" }
|
||||||
|
stdout = { file = "outputs/files_grid_13col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=200 exa’ produces a grid of 20 columns"
|
||||||
|
shell = "exa /testcases/files"
|
||||||
|
environment = { COLUMNS = "200" }
|
||||||
|
stdout = { file = "outputs/files_grid_20col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
|
||||||
|
# columns and width tests with files
|
||||||
|
# (these rely on bash’s glob sort order)
|
||||||
|
# (some of the output files also have trailing whitespace)
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=100 exa’ with file arguments produces a grid of 3 columns, with full paths"
|
||||||
|
shell = "exa /testcases/files/*"
|
||||||
|
environment = { COLUMNS = "100" }
|
||||||
|
stdout = { file = "outputs/files_paths_grid_3col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=150 exa’ with file arguments produces a grid of 5 columns, with full paths"
|
||||||
|
shell = "exa /testcases/files/*"
|
||||||
|
environment = { COLUMNS = "150" }
|
||||||
|
stdout = { file = "outputs/files_paths_grid_5col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘COLUMNS=200 exa’ with file arguments produces a grid of 7 columns, with full paths"
|
||||||
|
shell = "exa /testcases/files/*"
|
||||||
|
environment = { COLUMNS = "200" }
|
||||||
|
stdout = { file = "outputs/files_paths_grid_7col.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'env', 'grid' ]
|
7
xtests/help.toml
Normal file
7
xtests/help.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa --help’ produces the correct help text"
|
||||||
|
shell = "exa --help"
|
||||||
|
stdout = { file = "outputs/help.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'help ']
|
15
xtests/ignore-glob.toml
Normal file
15
xtests/ignore-glob.toml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1 -I’ ignores based on a glob"
|
||||||
|
shell = "exa -1 -I '*.OGG' /testcases/file-names-exts/music.*"
|
||||||
|
stdout = { string = "music.mp3" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline', 'ignore' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1 -I’ ignores based on multiple globs"
|
||||||
|
shell = "exa -1 -I '*.OGG|*.mp3' /testcases/file-names-exts/music.*"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline', 'ignore' ]
|
@ -1 +0,0 @@
|
|||||||
[36m/testcases/file-names-exts/[38;5;92mmusic.mp3[0m
|
|
77
xtests/input-options.toml
Normal file
77
xtests/input-options.toml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
[[cmd]]
|
||||||
|
name = "exa can handle invalid UTF-8 in command-line arguments"
|
||||||
|
shell = "exa /testcases/file-names/*"
|
||||||
|
stdout = { empty = false }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays an error for an unknown short option"
|
||||||
|
shell = "exa -4"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Unknown argument -4" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays an error for an unknown long option"
|
||||||
|
shell = "exa --ternary"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Unknown argument --ternary" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays an error for an option missing a parameter"
|
||||||
|
shell = "exa --time"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Flag --time needs a value (choices: modified, changed, accessed, created)" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays an error for an option that cannot take a parameter has one"
|
||||||
|
shell = "exa --long=time"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Flag --long cannot take a value" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays an error for option that takes the wrong parameter"
|
||||||
|
shell = "exa -l --time-style=24"
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Option --time-style has no \"24\" setting (choices: default, long-iso, full-iso, iso)" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
|
||||||
|
# strict mode settings
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays a warning for a useless option in strict mode"
|
||||||
|
shell = "exa --binary"
|
||||||
|
environment = { EXA_STRICT = "1" }
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Option --binary (-b) is useless without option --long (-l)" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays a warning for a short option given twice in strict mode"
|
||||||
|
shell = "exa -ll"
|
||||||
|
environment = { EXA_STRICT = "1" }
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Flag -l was given twice" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "exa displays a warning for a short option also given as long in strict mode"
|
||||||
|
shell = "exa -l --long"
|
||||||
|
environment = { EXA_STRICT = "1" }
|
||||||
|
stdout = { empty = true }
|
||||||
|
stderr = { string = "Flag -l conflicts with flag --long" }
|
||||||
|
status = 3
|
||||||
|
tags = [ 'options' ]
|
36
xtests/lines-view.toml
Normal file
36
xtests/lines-view.toml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# file name tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1’ displays file names, one on each line"
|
||||||
|
shell = "exa -1 /testcases/file-names"
|
||||||
|
stdout = { file = "outputs/names_lines.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1d’ displays, ‘.’, ‘..’, and ‘/’ correctly"
|
||||||
|
shell = "exa -1d . .. /"
|
||||||
|
stdout = { file = "outputs/dirs_oneline.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline', 'list-dirs' ]
|
||||||
|
|
||||||
|
|
||||||
|
# symlinks tests
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1’ lists the destination of symlinks"
|
||||||
|
shell = "exa -1 /testcases/links"
|
||||||
|
stdout = { file = "outputs/links_lines.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline' ]
|
||||||
|
|
||||||
|
[[cmd]]
|
||||||
|
name = "‘exa -1d’ with file arguments lists the destination of symlinks"
|
||||||
|
shell = "exa -1d /testcases/links/*"
|
||||||
|
stdout = { file = "outputs/links_paths_lines.ansitxt" }
|
||||||
|
stderr = { empty = true }
|
||||||
|
status = 0
|
||||||
|
tags = [ 'oneline', 'list-dirs' ]
|
39
xtests/outputs/files_long_colourscale_binary.ansitxt
Normal file
39
xtests/outputs/files_long_colourscale_binary.ansitxt
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m1[0m cassowary [34m 1 Jan 12:34[0m 1_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m1.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 1_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m1.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 1_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m2[0m cassowary [34m 1 Jan 12:34[0m 2_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m2.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 2_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m2.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 2_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m3[0m cassowary [34m 1 Jan 12:34[0m 3_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m3.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 3_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m3.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 3_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m4[0m cassowary [34m 1 Jan 12:34[0m 4_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m4.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 4_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m4.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 4_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m5[0m cassowary [34m 1 Jan 12:34[0m 5_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m5.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 5_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m5.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 5_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m6[0m cassowary [34m 1 Jan 12:34[0m 6_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m6.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 6_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m6.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 6_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m7[0m cassowary [34m 1 Jan 12:34[0m 7_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m7.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 7_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m7.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 7_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m8[0m cassowary [34m 1 Jan 12:34[0m 8_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m8.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 8_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m8.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 8_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m9[0m cassowary [34m 1 Jan 12:34[0m 9_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m9.0[32mKi[0m cassowary [34m 1 Jan 12:34[0m 9_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m9.0[32mMi[0m cassowary [34m 1 Jan 12:34[0m 9_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m10[0m cassowary [34m 1 Jan 12:34[0m 10_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m10[32mKi[0m cassowary [34m 1 Jan 12:34[0m 10_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m10[32mMi[0m cassowary [34m 1 Jan 12:34[0m 10_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m11[0m cassowary [34m 1 Jan 12:34[0m 11_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m11[32mKi[0m cassowary [34m 1 Jan 12:34[0m 11_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m11[32mMi[0m cassowary [34m 1 Jan 12:34[0m 11_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m12[0m cassowary [34m 1 Jan 12:34[0m 12_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m12[32mKi[0m cassowary [34m 1 Jan 12:34[0m 12_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m12[32mMi[0m cassowary [34m 1 Jan 12:34[0m 12_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m13[0m cassowary [34m 1 Jan 12:34[0m 13_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m13[32mKi[0m cassowary [34m 1 Jan 12:34[0m 13_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m13[32mMi[0m cassowary [34m 1 Jan 12:34[0m 13_MiB
|
39
xtests/outputs/files_long_colourscale_bytes.ansitxt
Normal file
39
xtests/outputs/files_long_colourscale_bytes.ansitxt
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m1[0m cassowary [34m 1 Jan 12:34[0m 1_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m1,024[0m cassowary [34m 1 Jan 12:34[0m 1_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m1,048,576[0m cassowary [34m 1 Jan 12:34[0m 1_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m2[0m cassowary [34m 1 Jan 12:34[0m 2_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m2,048[0m cassowary [34m 1 Jan 12:34[0m 2_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m2,097,152[0m cassowary [34m 1 Jan 12:34[0m 2_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m3[0m cassowary [34m 1 Jan 12:34[0m 3_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m3,072[0m cassowary [34m 1 Jan 12:34[0m 3_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m3,145,728[0m cassowary [34m 1 Jan 12:34[0m 3_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m4[0m cassowary [34m 1 Jan 12:34[0m 4_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m4,096[0m cassowary [34m 1 Jan 12:34[0m 4_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m4,194,304[0m cassowary [34m 1 Jan 12:34[0m 4_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m5[0m cassowary [34m 1 Jan 12:34[0m 5_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m5,120[0m cassowary [34m 1 Jan 12:34[0m 5_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m5,242,880[0m cassowary [34m 1 Jan 12:34[0m 5_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m6[0m cassowary [34m 1 Jan 12:34[0m 6_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m6,144[0m cassowary [34m 1 Jan 12:34[0m 6_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m6,291,456[0m cassowary [34m 1 Jan 12:34[0m 6_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m7[0m cassowary [34m 1 Jan 12:34[0m 7_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m7,168[0m cassowary [34m 1 Jan 12:34[0m 7_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m7,340,032[0m cassowary [34m 1 Jan 12:34[0m 7_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m8[0m cassowary [34m 1 Jan 12:34[0m 8_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m8,192[0m cassowary [34m 1 Jan 12:34[0m 8_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m8,388,608[0m cassowary [34m 1 Jan 12:34[0m 8_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m9[0m cassowary [34m 1 Jan 12:34[0m 9_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m9,216[0m cassowary [34m 1 Jan 12:34[0m 9_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m9,437,184[0m cassowary [34m 1 Jan 12:34[0m 9_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m10[0m cassowary [34m 1 Jan 12:34[0m 10_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m10,240[0m cassowary [34m 1 Jan 12:34[0m 10_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m10,485,760[0m cassowary [34m 1 Jan 12:34[0m 10_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m11[0m cassowary [34m 1 Jan 12:34[0m 11_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m11,264[0m cassowary [34m 1 Jan 12:34[0m 11_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m11,534,336[0m cassowary [34m 1 Jan 12:34[0m 11_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m12[0m cassowary [34m 1 Jan 12:34[0m 12_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m12,288[0m cassowary [34m 1 Jan 12:34[0m 12_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m12,582,912[0m cassowary [34m 1 Jan 12:34[0m 12_MiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;118m13[0m cassowary [34m 1 Jan 12:34[0m 13_bytes
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;190m13,312[0m cassowary [34m 1 Jan 12:34[0m 13_KiB
|
||||||
|
.[1;33mr[31mw[0m[38;5;244m-[33mr[38;5;244m--[33mr[38;5;244m--[0m [38;5;226m13,631,488[0m cassowary [34m 1 Jan 12:34[0m 13_MiB
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user