yazi

The atago project wrote these specs on its own initiative and runs them in its own CI, to exercise atago against a real program. They are not yazi’s official test suite, and the yazi project is not affiliated with atago.

Summary #

7 suites · 160 scenarios

Contents #

yazi (third-party terminal file manager) / chooser selection #

Used as a file chooser, yazi’s job is to hand a shell script the paths the user picked. The rule that matters — and the one easiest to get wrong — is that an explicit selection beats whatever the cursor happens to be sitting on. A user who selects three files and then moves the cursor elsewhere must still get those three.

Every way of selecting is put through that test: pressing space on individual entries, sweeping a range in visual mode, selecting everything at once, and inverting a selection. Toggling the same entry twice must clear it, not select it again.

Files and directories are covered separately, and so are names containing spaces — the classic point where a path list gets silently split into the wrong number of entries.

Source: test/e2e/thirdparty/yazi/chooser_selection.atago.yaml

Scenario: chooser-file writes a space-selected file instead of the hovered file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b.txt

Scenario: chooser-file writes a space-selected directory instead of the hovered directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file b-dir/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a-dir/a.txt:

a

Fixture b-dir/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b-dir

Scenario: chooser-file writes space-selected spaced directories #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one/a.txt is created.
  • Fixture file b two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one/a.txt:

a

Fixture b two/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b two

Scenario: chooser-file writes a visual-selected file range #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • Fixture file c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

Fixture c.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /a.txt, /b.txt

Scenario: chooser-file writes a visual-selected directory range #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file b-dir/b.txt is created.
  • Fixture file c-dir/c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a-dir/a.txt:

a

Fixture b-dir/b.txt:

b

Fixture c-dir/c.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /a-dir, /b-dir

Scenario: chooser-file writes a visual-selected spaced file range #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one.txt is created.
  • Fixture file b two.txt is created.
  • Fixture file c three.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one.txt:

a

Fixture b two.txt:

b

Fixture c three.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /a one.txt, /b two.txt

Scenario: chooser-file writes a visual-selected spaced directory range #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one/a.txt is created.
  • Fixture file b two/b.txt is created.
  • Fixture file c three/c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one/a.txt:

a

Fixture b two/b.txt:

b

Fixture c three/c.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /a one, /b two

Scenario: chooser-file writes ctrl-a selected directories #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file b-dir/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a-dir/a.txt:

a

Fixture b-dir/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /a-dir, /b-dir

Scenario: chooser-file writes ctrl-a selected spaced files #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one.txt is created.
  • Fixture file b two.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one.txt:

a

Fixture b two.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /a one.txt, /b two.txt

Scenario: inverse selection with one chosen directory writes the other two #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file b-dir/b.txt is created.
  • Fixture file c-dir/c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a-dir/a.txt:

a

Fixture b-dir/b.txt:

b

Fixture c-dir/c.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .
cat chosen.txt

Then #

  • stdout matches /(?m)^.*/b-dir\n.*/c-dir\n?$/

Scenario: inverse selection with one spaced file writes the other two #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one.txt is created.
  • Fixture file b two.txt is created.
  • Fixture file c three.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one.txt:

a

Fixture b two.txt:

b

Fixture c three.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .
cat chosen.txt

Then #

  • stdout matches /(?m)^.*/b two\.txt\n.*/c three\.txt\n?$/

Scenario: toggling the same directory twice removes the explicit selection #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file b-dir/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a-dir/a.txt:

a

Fixture b-dir/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b-dir

Scenario: toggling the same spaced directory twice removes the explicit selection #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one/a.txt is created.
  • Fixture file b two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one/a.txt:

a

Fixture b two/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b two

Scenario: ctrl-a then esc on files restores enter to the hovered file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b.txt

Scenario: ctrl-a then esc on spaced directories restores enter to the hovered directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a one/a.txt is created.
  • Fixture file b two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a one/a.txt:

a

Fixture b two/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b two

yazi (third-party terminal file manager) / entry args #

Where yazi starts depends on what you pass it, and the two cases differ: a directory argument opens that directory, while a file argument opens its parent with the file already hovered — so it can be chosen immediately, or left behind for a sibling.

Quitting must then report the right working directory. A shell wrapper uses that value to cd, so reporting the file’s own path, or the directory the user started in rather than the one they navigated to, sends the caller to the wrong place.

Several arguments open several tabs, and this suite checks that they land in the given order and that switching between them by number, or by stepping to the next one, selects from the tab actually in front of the user.

Spaced, hidden, and nested paths are covered throughout, since those are where argument handling usually breaks.

Source: test/e2e/thirdparty/yazi/entry_args.atago.yaml

Scenario: starting on an explicit directory writes that cwd on quit #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target/a.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt target

Then #

  • file cwd.txt contains /target

Scenario: starting on an explicit file can choose that file immediately #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target/a.txt:

a

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt target/a.txt

Then #

  • file chosen.txt contains /target/a.txt

Scenario: starting on an explicit file writes its parent cwd on q #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target/a.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt target/a.txt

Then #

  • file cwd.txt contains /target

Scenario: starting on an explicit file can leave to its parent and choose a sibling #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target/a.txt is created.
  • Fixture file target/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target/a.txt:

a

Fixture target/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt target/a.txt

Then #

  • file chosen.txt contains /target/b.txt

Scenario: starting on a spaced directory writes that cwd on quit #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file two words/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture two words/a.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt "two words"

Then #

  • file cwd.txt contains /two words

Scenario: starting on a spaced file can choose that file immediately #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file two words/a file.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture two words/a file.txt:

a

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt "two words/a file.txt"

Then #

  • file chosen.txt contains /two words/a file.txt

Scenario: starting with a spaced file writes its parent cwd on q #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file two words/a file.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture two words/a file.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt "two words/a file.txt"

Then #

  • file cwd.txt contains /two words

Scenario: starting on a hidden directory writes that cwd on quit #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file .hidden/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture .hidden/a.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .hidden

Then #

  • file cwd.txt contains /.hidden

Scenario: starting on a nested file lets q write its parent cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file nested/deeper/file.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture nested/deeper/file.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt nested/deeper/file.txt

Then #

  • file cwd.txt contains /nested/deeper

Scenario: starting with two explicit directories opens the second as another tab #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt one two

Then #

  • file cwd.txt contains /two

Scenario: starting with a directory and a file lets numeric switching choose the file tab #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt one two/b.txt

Then #

  • file chosen.txt contains /two/b.txt

Scenario: starting with two explicit files lets next-tab choose the second file tab #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt one/a.txt two/b.txt

Then #

  • file chosen.txt contains /two/b.txt

Scenario: starting with three explicit directories can switch to the third tab #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • Fixture file three/c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

Fixture three/c.txt:

c

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt one two three

Then #

  • file cwd.txt contains /three

The operations here are the ones that can lose data, so each is pinned in both directions.

Cancelling a pending cut or copy must really cancel it: a later paste must do nothing, rather than quietly completing the operation the user thought they had abandoned.

Overwriting must really overwrite. When the destination already exists, the forced paste has to replace it — for a file and for a whole directory subtree, under both copy and move — and the result on disk is checked afterwards, not just the absence of an error.

Hardlinking is covered as its own case, since a hardlink that silently degrades into a copy looks identical until something writes through it.

Spaced names run through all of it, being where path handling tends to fail.

Source: test/e2e/thirdparty/yazi/links_and_overwrite.atago.yaml

Scenario: uppercase X cancels a cut before pasting #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/move-me.txt is created.
  • Fixture file dst/keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/move-me.txt:

keep

Fixture dst/keep.txt:

keep

When #

# interactive (pty): yazi src

Then #

  • file src/move-me.txt contains keep
  • file dst/move-me.txt does not exist
  • file dst/keep.txt contains keep

Scenario: uppercase Y cancels a copy before pasting #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/copy-me.txt is created.
  • Fixture file dst/keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/copy-me.txt:

keep

Fixture dst/keep.txt:

keep

When #

# interactive (pty): yazi src

Then #

  • file src/copy-me.txt contains keep
  • file dst/copy-me.txt does not exist
  • file dst/keep.txt contains keep

Scenario: uppercase P overwrites an existing spaced file during copy #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/two words.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

src

Fixture dst/two words.txt:

dst

When #

# interactive (pty): yazi src

Then #

  • file dst/two words.txt contains src

Scenario: uppercase P overwrites an existing spaced file during move #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/two words.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

src

Fixture dst/two words.txt:

dst

When #

# interactive (pty): yazi src

Then #

  • file dst/two words.txt contains src
  • file src/two words.txt does not exist

Scenario: uppercase P overwrites an existing directory subtree during copy #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/src/sub/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

src

Fixture dst/src/sub/a.txt:

dst

When #

# interactive (pty): yazi .

Then #

  • file dst/src/sub/a.txt contains src

Scenario: uppercase P overwrites an existing directory subtree during move #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/src/sub/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

src

Fixture dst/src/sub/a.txt:

dst

When #

# interactive (pty): yazi .

Then #

  • file dst/src/sub/a.txt contains src
  • dir src does not exist

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/alpha.txt is created.
  • Fixture file dst/keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/alpha.txt:

alpha

Fixture dst/keep.txt:

keep

When #

# interactive (pty): yazi src
stat -c '%h' src/alpha.txt

Then #

  • file dst/alpha.txt contains alpha
  • stdout equals an exact value

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

alpha

Fixture dst/keep.txt:

keep

When #

# interactive (pty): yazi src
stat -c '%h' 'src/two words.txt'

Then #

  • file dst/two words.txt contains alpha
  • stdout equals an exact value

yazi (third-party terminal file manager) / navigation and tabs #

Moving around is what a file manager does between operations, and it has to put the cursor exactly where the user believes it is — because the next keystroke acts on whatever is hovered.

Arrow-key movement is therefore checked by its consequence: after moving, the entry that gets chosen must be the one the user moved to. Entering and leaving directories is checked the same way, including the working directory reported on quit after stepping back out.

Tabs get the same treatment. Opening new tabs, switching by number, closing one and returning to the previous, and reordering tabs — after which the numbers must follow the new order, not the original one.

Spaced names appear throughout.

Source: test/e2e/thirdparty/yazi/navigation_tabs.atago.yaml

Scenario: down arrow moves to the second file before choosing #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b.txt

Scenario: up arrow returns from the third file to the second before choosing #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • Fixture file c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

Fixture c.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b.txt

Scenario: right arrow enters the hovered directory before choosing a file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file sub/inside.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture sub/inside.txt:

inside

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /sub/inside.txt

Scenario: left arrow leaves the entered directory and q writes the parent cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file sub/inside.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture sub/inside.txt:

inside

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • file cwd.txt does not contain /sub

Scenario: right arrow enters a spaced directory before choosing a file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file two words/inside.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture two words/inside.txt:

inside

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /two words/inside.txt

Scenario: down arrow reaches a spaced filename before choosing #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file two words.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture two words.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /two words.txt

Scenario: swap-left reorders two directory tabs for numeric switching #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt one two

Then #

  • file cwd.txt contains /two

Scenario: swap-right reorders two directory tabs for numeric switching #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt one two

Then #

  • file cwd.txt contains /one

Scenario: swap-left reorders two file tabs for numeric switching #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt one/a.txt two/b.txt

Then #

  • file chosen.txt contains /two/b.txt

Scenario: tt twice creates a third tab that 3 can activate #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • file cwd.txt contains ${workdir}

Scenario: closing the third tab with ctrl-c returns to the second tab #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • file cwd.txt contains ${workdir}

yazi (third-party terminal file manager) / search and tabs #

Two things a file manager offers beyond moving files: finding them, and keeping more than one place open at a time.

Content search must locate a file by what is inside it, not by its name, and leave the user positioned on the match. The information panel must describe the entry currently hovered — the wrong entry’s details is a subtle bug, since the panel still looks right.

Tabs are checked as a pair of operations that must undo each other: opening a tab roots it at the current directory, and closing it returns to the directory the previous tab was showing.

Source: test/e2e/thirdparty/yazi/search_tabs.atago.yaml

Scenario: uppercase S content search finds the matching file #

only when rg --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • Fixture file beta.txt is created.
  • Fixture file gamma.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha.txt:

alpha

Fixture beta.txt:

needle

Fixture gamma.txt:

gamma

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains beta.txt

Scenario: tab shows file information for the hovered file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha.txt:

alpha

When #

# interactive (pty): yazi .

Scenario: tt opens a new tab rooted at the current cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha.txt:

a

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • file cwd.txt contains ${workdir}

Scenario: ctrl-c closes the current tab and returns to the previous tab cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt one two

Then #

  • file cwd.txt contains /one

yazi (third-party terminal file manager) / selection matrix #

One rule, checked against every combination that could break it: an operation acts on what is selected, not on what the cursor is pointing at.

Select an entry, move the cursor somewhere else, then copy, move, or delete — and the selected entry must be the one affected, while the entry now under the cursor must be left alone. Acting on the hovered file instead is the failure mode that quietly destroys the wrong data.

The matrix runs that rule across files and directories, single entries and visual-mode ranges, and copy, move, and permanent delete — with spaced names included, since a path that splits on a space turns one operation into several wrong ones.

Source: test/e2e/thirdparty/yazi/selection_matrix.atago.yaml

Scenario: space-selected file is moved even when the cursor moves away #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file src/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

Fixture src/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • file dst/b.txt contains b
  • file src/b.txt does not exist
  • file dst/a.txt does not exist

Scenario: space-selected directory is copied even when the cursor moves away #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a-dir/a.txt is created.
  • Fixture file src/b-dir/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a-dir/a.txt:

a

Fixture src/b-dir/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • file dst/b-dir/b.txt contains b
  • dir dst/a-dir does not exist

Scenario: space-selected directory is moved even when the cursor moves away #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a-dir/a.txt is created.
  • Fixture file src/b-dir/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a-dir/a.txt:

a

Fixture src/b-dir/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • file dst/b-dir/b.txt contains b
  • dir src/b-dir does not exist
  • dir dst/a-dir does not exist

Scenario: space-selected spaced directory is moved even when the cursor moves away #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a-dir/a.txt is created.
  • Fixture file src/two words/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a-dir/a.txt:

a

Fixture src/two words/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • file dst/two words/b.txt contains b
  • dir src/two words does not exist
  • dir dst/a-dir does not exist

Scenario: visual mode selects a file range and moves both files #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file src/b.txt is created.
  • Fixture file src/c.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

Fixture src/b.txt:

b

Fixture src/c.txt:

c

When #

# interactive (pty): yazi src

Then #

  • file dst/a.txt contains a
  • file dst/b.txt contains b
  • file src/c.txt contains c
  • file src/a.txt does not exist

Scenario: visual mode selects a file range and permanently deletes both files #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • Fixture file c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

Fixture c.txt:

c

When #

# interactive (pty): yazi .

Then #

  • file a.txt does not exist
  • file b.txt does not exist
  • file c.txt contains c

Scenario: visual mode selects a directory range and copies both directories #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a-dir/a.txt is created.
  • Fixture file src/b-dir/b.txt is created.
  • Fixture file src/c-dir/c.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a-dir/a.txt:

a

Fixture src/b-dir/b.txt:

b

Fixture src/c-dir/c.txt:

c

When #

# interactive (pty): yazi src

Then #

  • file dst/a-dir/a.txt contains a
  • file dst/b-dir/b.txt contains b
  • dir dst/c-dir does not exist

Scenario: visual mode selects a directory range and moves both directories #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a-dir/a.txt is created.
  • Fixture file src/b-dir/b.txt is created.
  • Fixture file src/c-dir/c.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a-dir/a.txt:

a

Fixture src/b-dir/b.txt:

b

Fixture src/c-dir/c.txt:

c

When #

# interactive (pty): yazi src

Then #

  • file dst/a-dir/a.txt contains a
  • file dst/b-dir/b.txt contains b
  • dir src/a-dir does not exist
  • file src/c-dir/c.txt contains c

Scenario: visual mode selects spaced directories and moves both #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a one/a.txt is created.
  • Fixture file src/b two/b.txt is created.
  • Fixture file src/c three/c.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a one/a.txt:

a

Fixture src/b two/b.txt:

b

Fixture src/c three/c.txt:

c

When #

# interactive (pty): yazi src

Then #

  • file dst/a one/a.txt contains a
  • file dst/b two/b.txt contains b
  • dir src/a one does not exist
  • file src/c three/c.txt contains c

yazi (third-party terminal file manager) #

yazi is a file manager, so every keystroke is a potential file operation. A test that only checked the screen would pass on a version that draws a successful copy it never performed — and on a file manager, that class of bug destroys data.

So both are asserted throughout: what the terminal displays, and what actually happened on disk afterwards.

This suite covers the core interactions — hidden files staying hidden until toggled, live filtering narrowing the list, creating files and directories, renaming exactly one entry and nothing else, yank/paste and cut/paste between directories, and permanent deletion including the case where the confirmation is declined and the file must survive.

The remaining yazi suites break out selection semantics, entry arguments, navigation and tabs, search, and hardlinks and overwrites.

Source: test/e2e/thirdparty/yazi/yazi.atago.yaml

Scenario: version prints a semantic version banner #

only when yazi --version succeeds

When #

yazi --version

Then #

  • exit code is 0
  • stdout matches /^Yazi [0-9]+\.[0-9]+\.[0-9]+/

Scenario: hidden files stay hidden by default #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • Fixture file .secret is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • rendered screen contains alpha.txt
  • rendered screen does not contain .secret

Scenario: dot toggles hidden files into view #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • Fixture file .secret is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • rendered screen contains alpha.txt
  • rendered screen contains .secret

Scenario: filter narrows the visible file list #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • Fixture file beta.txt is created.
  • Fixture file gamma.log is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • rendered screen contains beta.txt
  • rendered screen does not contain alpha.txt
  • rendered screen does not contain gamma.log

Scenario: create makes a new file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi ${workdir}

Then #

  • exit code is 0
  • the step changed exactly created notes.txt, modified nothing, deleted nothing, ignoring .atago-home/**
  • file notes.txt exists

Generated artifacts #

  • notes.txt

Scenario: create with a trailing slash makes a directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • dir nested exists

Scenario: rename changes the hovered file name and nothing else #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old.txt:

old

When #

# interactive (pty): yazi .

Then #

  • the step changed exactly created old.bak.txt, modified nothing, deleted old.txt, ignoring .atago-home/**
  • file old.txt does not exist
  • file old.bak.txt contains old

Scenario: yank then paste copies a file into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/alpha.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/alpha.txt:

alpha

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • the step changed exactly created dst/alpha.txt, modified nothing, deleted nothing, ignoring .atago-home/**
  • file src/alpha.txt contains alpha
  • file dst/alpha.txt contains alpha

Scenario: select-all then yank copies multiple files into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file src/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

Fixture src/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • the step changed exactly created dst/a.txt, dst/b.txt, modified nothing, deleted nothing, ignoring .atago-home/**
  • file dst/a.txt contains a
  • file dst/b.txt contains b

Scenario: cut then paste moves a file into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/beta.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/beta.txt:

beta

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • the step changed exactly created dst/beta.txt, modified nothing, deleted src/beta.txt, ignoring .atago-home/**
  • file src/beta.txt does not exist
  • file dst/beta.txt contains beta

Scenario: uppercase D permanently deletes the hovered file after confirmation #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed.txt:

doomed

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • the step changed exactly created nothing, modified nothing, deleted doomed.txt, ignoring .atago-home/**
  • file doomed.txt does not exist

Scenario: canceling permanent delete returns to the file list and keeps the file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • file keep.txt contains keep

Scenario: canceling a yank leaves nothing to paste #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/one.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/one.txt:

one

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • the step changed exactly created nothing, modified nothing, deleted nothing, ignoring .atago-home/**

Scenario: canceling a cut leaves nothing to paste #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/one.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/one.txt:

one

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • the step changed exactly created nothing, modified nothing, deleted nothing, ignoring .atago-home/**

Scenario: select-all then cut moves multiple files into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file src/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

Fixture src/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file dst/a.txt contains a
  • file dst/b.txt contains b
  • file src/a.txt does not exist
  • file src/b.txt does not exist

Scenario: select-all then permanent delete removes multiple files #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • file a.txt does not exist
  • file b.txt does not exist

Scenario: trash moves the hovered file into sandbox home trash #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file trashme.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture trashme.txt:

trash

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • file trashme.txt does not exist
  • file .atago-home/.local/share/Trash/files/trashme.txt contains trash

Scenario: trashing selected files moves both into sandbox home trash #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • file a.txt does not exist
  • file b.txt does not exist
  • file .atago-home/.local/share/Trash/files/a.txt contains a
  • file .atago-home/.local/share/Trash/files/b.txt contains b

Scenario: canceling trash returns to the file list and keeps the file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • exit code is 0
  • file keep.txt contains keep

Scenario: space-selected file is copied even when the cursor moves away #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file src/b.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

Fixture src/b.txt:

b

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file dst/b.txt contains b
  • file dst/a.txt does not exist

Scenario: visual mode selects a range and copies both files #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file src/b.txt is created.
  • Fixture file src/c.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

Fixture src/b.txt:

b

Fixture src/c.txt:

c

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file dst/a.txt contains a
  • file dst/b.txt contains b
  • file dst/c.txt does not exist

Scenario: lowercase p copies to item_1 when the destination already exists #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/item.txt is created.
  • Fixture file dst/item.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/item.txt:

new

Fixture dst/item.txt:

old

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file src/item.txt contains new
  • file dst/item.txt contains old
  • file dst/item_1.txt contains new

Scenario: lowercase p moves to item_1 when the destination already exists #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/item.txt is created.
  • Fixture file dst/item.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/item.txt:

new

Fixture dst/item.txt:

old

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file src/item.txt does not exist
  • file dst/item.txt contains old
  • file dst/item_1.txt contains new

Scenario: uppercase P overwrites an existing file during copy #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/item.txt is created.
  • Fixture file dst/item.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/item.txt:

new

Fixture dst/item.txt:

old

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file src/item.txt contains new
  • file dst/item.txt contains new

Scenario: uppercase P overwrites an existing file during move #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/item.txt is created.
  • Fixture file dst/item.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/item.txt:

new

Fixture dst/item.txt:

old

When #

# interactive (pty): yazi src

Then #

  • exit code is 0
  • file src/item.txt does not exist
  • file dst/item.txt contains new

Scenario: alphabetical sort puts a then b then c at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file b.txt is created.
  • Fixture file a.txt is created.
  • Fixture file c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: reverse alphabetical sort puts c then b then a at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file b.txt is created.
  • Fixture file a.txt is created.
  • Fixture file c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: extension sort puts log then md then txt at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file b.md is created.
  • Fixture file a.txt is created.
  • Fixture file c.log is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: reverse extension sort puts txt then md then log at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file b.md is created.
  • Fixture file a.txt is created.
  • Fixture file c.log is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: size sort puts one then two then three at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one.txt is created.
  • Fixture file three.txt is created.
  • Fixture file two.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one.txt:

1

Fixture three.txt:

333

Fixture two.txt:

22

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: reverse size sort puts three then two then one at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one.txt is created.
  • Fixture file three.txt is created.
  • Fixture file two.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one.txt:

1

Fixture three.txt:

333

Fixture two.txt:

22

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: natural sort puts 3 then 20 then 100 at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file 20.txt is created.
  • Fixture file 3.txt is created.
  • Fixture file 100.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: natural sort is visible on the rendered file list before quitting #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file 20.txt is created.
  • Fixture file 3.txt is created.
  • Fixture file 100.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: reverse natural sort puts 100 then 20 then 3 at the cursor #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file 20.txt is created.
  • Fixture file 3.txt is created.
  • Fixture file 100.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: reverse natural sort is visible on the rendered file list before quitting #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file 20.txt is created.
  • Fixture file 3.txt is created.
  • Fixture file 100.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi .

Then #

  • exit code is 0

Scenario: chooser-file writes the hovered path and exits on enter #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file picked.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture picked.txt:

picked

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • exit code is 0
  • file chosen.txt contains picked.txt

Scenario: chooser-file writes all selected paths on enter #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • exit code is 0
  • file chosen.txt contains a.txt, b.txt

Scenario: chooser-file remains absent when quitting with uppercase Q #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file picked.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture picked.txt:

picked

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • exit code is 0
  • file chosen.txt does not exist

Scenario: uppercase G moves to the bottom item before choosing #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • Fixture file z.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • exit code is 0
  • file chosen.txt contains z.txt

Scenario: gg moves to the top item before choosing #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • Fixture file z.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • exit code is 0
  • file chosen.txt contains a.txt

Scenario: quitting immediately writes the initial cwd to cwd-file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt contains /atago-

Scenario: quitting after entering a directory writes the final cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file z-nested/inside.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt contains z-nested

Scenario: leaving a directory then quitting writes the parent cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt does not contain a-dir

Scenario: tabs preserve per-tab cwd and q writes the active tab cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file z-dir/z.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt contains a-dir

Scenario: closing the current tab returns to the previous tab cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file z-dir/z.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt contains a-dir

Scenario: previous and next tab navigation preserve each tab cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a-dir/a.txt is created.
  • Fixture file z-dir/z.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt contains z-dir

Scenario: uppercase Q exits without writing the cwd file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file z-nested/inside.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • exit code is 0
  • file cwd.txt does not exist

Scenario: create accepts filenames with spaces #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file two words.txt exists

Generated artifacts #

  • two words.txt

Scenario: create accepts directory names with spaces #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • dir two words exists

Scenario: rename accepts spaces in filenames #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old.txt:

old

When #

# interactive (pty): yazi .

Then #

  • file old two words.txt contains old

Scenario: rename accepts spaces in directory names #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old-dir/keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old-dir/keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file old-dir two words/keep.txt contains keep

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

When #

# interactive (pty): yazi .
readlink dst/a.txt

Then #

  • stdout matches /^.+/src/a\.txt ?$/

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

When #

# interactive (pty): yazi .
readlink dst/a.txt

Then #

  • stdout equals an exact value

Scenario: yanked directory can be absolute-symlinked into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

a

When #

# interactive (pty): yazi .
readlink dst/sub

Then #

  • stdout matches /^.+/src/sub ?$/

Scenario: yanked directory can be relative-symlinked into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

a

When #

# interactive (pty): yazi .
readlink dst/sub

Then #

  • stdout equals an exact value

Scenario: modified time sort reorders the rendered list #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file oldest.txt is created.
  • Fixture file newest.txt is created.
  • Fixture file middle.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture oldest.txt:

old

Fixture newest.txt:

new

Fixture middle.txt:

mid

When #

# interactive (pty): yazi .

Scenario: reverse modified time sort reorders the rendered list #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file oldest.txt is created.
  • Fixture file newest.txt is created.
  • Fixture file middle.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture oldest.txt:

old

Fixture newest.txt:

new

Fixture middle.txt:

mid

When #

# interactive (pty): yazi .

Scenario: modified time sort chooses the oldest file first #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file oldest.txt is created.
  • Fixture file newest.txt is created.
  • Fixture file middle.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture oldest.txt:

old

Fixture newest.txt:

new

Fixture middle.txt:

mid

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains oldest.txt

Scenario: reverse modified time sort chooses the newest file first #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file oldest.txt is created.
  • Fixture file newest.txt is created.
  • Fixture file middle.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture oldest.txt:

old

Fixture newest.txt:

new

Fixture middle.txt:

mid

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains newest.txt

Scenario: toggling the same file twice removes the explicit selection #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains /b.txt

Scenario: inverse selection flips one picked file into the other two #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file a.txt is created.
  • Fixture file b.txt is created.
  • Fixture file c.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture a.txt:

a

Fixture b.txt:

b

Fixture c.txt:

c

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .
cat chosen.txt

Then #

  • stdout matches /(?m)^.*/b\.txt\n.*/c\.txt\n?$/

Scenario: direct tab switching with 1 and 2 preserves per-tab cwd #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file one/a.txt is created.
  • Fixture file two/b.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture one/a.txt:

a

Fixture two/b.txt:

b

When #

# interactive (pty): yazi --cwd-file ${workdir}/cwd.txt .

Then #

  • file cwd.txt contains /two

Scenario: block shell command creates a file and returns to the browser #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file shell-created.txt contains shell-created

Scenario: filter can be cleared after confirming it #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • Fixture file beta.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha.txt:

a

Fixture beta.txt:

b

When #

# interactive (pty): yazi .

Scenario: yank then paste copies a directory subtree into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

a

When #

# interactive (pty): yazi .

Then #

  • file dst/src/sub/a.txt contains a
  • file src/sub/a.txt contains a

Scenario: cut then paste moves a directory subtree into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

a

When #

# interactive (pty): yazi .

Then #

  • file dst/src/sub/a.txt contains a
  • dir src does not exist

Scenario: lowercase p copies a directory to name_1 when the destination exists #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/src/existing.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

src

Fixture dst/src/existing.txt:

dst

When #

# interactive (pty): yazi .

Then #

  • file dst/src/existing.txt contains dst
  • file dst/src_1/sub/a.txt contains src

Scenario: lowercase p moves a directory to name_1 when the destination exists #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/sub/a.txt is created.
  • Fixture file dst/src/existing.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/sub/a.txt:

src

Fixture dst/src/existing.txt:

dst

When #

# interactive (pty): yazi .

Then #

  • file dst/src/existing.txt contains dst
  • file dst/src_1/sub/a.txt contains src
  • dir src does not exist

Scenario: uppercase D permanently deletes a directory subtree after confirmation #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed/sub/a.txt is created.
  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed/sub/a.txt:

a

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • dir doomed does not exist

Scenario: canceling uppercase D keeps a directory subtree intact #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed/sub/a.txt is created.
  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed/sub/a.txt:

a

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file doomed/sub/a.txt contains a

Scenario: trash moves a directory subtree into sandbox home trash #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed/sub/a.txt is created.
  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed/sub/a.txt:

a

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • dir doomed does not exist
  • file .atago-home/.local/share/Trash/files/doomed/sub/a.txt contains a

Scenario: canceling trash keeps a directory subtree intact #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed/sub/a.txt is created.
  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed/sub/a.txt:

a

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file doomed/sub/a.txt contains a

Scenario: canceling trash for selected directories keeps both subtrees #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha-dir/sub/x.txt is created.
  • Fixture file beta-dir/sub/y.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture alpha-dir/sub/x.txt:

x

Fixture beta-dir/sub/y.txt:

y

When #

# interactive (pty): yazi .

Then #

  • file alpha-dir/sub/x.txt contains x
  • file beta-dir/sub/y.txt contains y

Scenario: yank then paste copies a spaced filename into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

spaced

When #

# interactive (pty): yazi src

Then #

  • file dst/two words.txt contains spaced

Scenario: cut then paste moves a spaced filename into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

spaced

When #

# interactive (pty): yazi src

Then #

  • file dst/two words.txt contains spaced
  • file src/two words.txt does not exist

Scenario: yank then paste copies a spaced directory subtree into a sibling directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words/a.txt:

spaced

When #

# interactive (pty): yazi src

Then #

  • file dst/two words/a.txt contains spaced

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

spaced

When #

# interactive (pty): yazi src
readlink "dst/two words.txt"

Then #

  • stdout matches /^.+/src/two words\.txt ?$/

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words.txt:

spaced

When #

# interactive (pty): yazi src
readlink "dst/two words.txt"

Then #

  • stdout equals an exact value

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words/a.txt:

spaced

When #

# interactive (pty): yazi src
readlink "dst/two words"

Then #

  • stdout matches /^.+/src/two words ?$/

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/two words/a.txt is created.
  • Fixture file dst/.keep is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/two words/a.txt:

spaced

When #

# interactive (pty): yazi src
readlink "dst/two words"

Then #

  • stdout equals an exact value

Scenario: hidden toggle can be turned back off #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file alpha.txt is created.
  • Fixture file .secret is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

When #

# interactive (pty): yazi --chooser-file ${workdir}/chosen.txt .

Then #

  • file chosen.txt contains alpha.txt

Scenario: block shell command creates a directory and returns to the browser #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • dir shell-dir exists

Scenario: block shell command can rename a file in place #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old.txt:

old

When #

# interactive (pty): yazi .

Then #

  • file shell-renamed.txt contains old

Scenario: block shell command creates a spaced filename #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file two words.txt contains spaced

Scenario: block shell command creates a spaced directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • dir two words exists

Scenario: block shell command deletes the hovered file #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed.txt is created.
  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed.txt:

doomed

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file doomed.txt does not exist

Scenario: block shell command copies the hovered file to a new name #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old.txt:

old

When #

# interactive (pty): yazi .

Then #

  • file shell-copy.txt contains old

Scenario: block shell command runs inside the entered directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file sub/keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture sub/keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file sub/inside.txt contains inside

Scenario: block shell command can create nested files inside a new directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file shell-nested/file.txt contains nested

Scenario: block shell command moves a file into a new directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file move-me.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture move-me.txt:

move

When #

# interactive (pty): yazi .

Then #

  • file moved/move-me.txt contains move

Scenario: block shell command renames a directory #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old-dir/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old-dir/a.txt:

a

When #

# interactive (pty): yazi .

Then #

  • file shell-dir/a.txt contains a

Scenario: block shell command appends to the hovered file content #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file note.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture note.txt:

first

When #

# interactive (pty): yazi .

Then #

  • file note.txt contains second

Scenario: block shell command can create a hidden file that dot then reveals #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • file .shell-hidden contains hidden

Scenario: block shell command deletes a directory subtree #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file doomed/a.txt is created.
  • Fixture file keep.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture doomed/a.txt:

doomed

Fixture keep.txt:

keep

When #

# interactive (pty): yazi .

Then #

  • dir doomed does not exist

Scenario: block shell command copies a directory subtree to a new name #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file src/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture src/a.txt:

a

When #

# interactive (pty): yazi .

Then #

  • file shell-copy-dir/a.txt contains a

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target.txt:

target

When #

# interactive (pty): yazi .
readlink linked.txt

Then #

  • stdout equals an exact value

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target-dir/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target-dir/a.txt:

a

When #

# interactive (pty): yazi .
readlink linked-dir

Then #

  • stdout equals an exact value

Scenario: block shell command renames a spaced filename #

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file old name.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture old name.txt:

old

When #

# interactive (pty): yazi .

Then #

  • file new name.txt contains old

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target file.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target file.txt:

target

When #

# interactive (pty): yazi .
readlink "linked file.txt"

Then #

  • stdout equals an exact value

only when yazi --version succeeds · skipped on Windows

Given #

  • Fixture file target dir/a.txt is created.
  • The command runs with a cleared environment (passing through: PATH).
  • The command runs with an isolated home under ${workdir}/.atago-home (HOME/XDG or APPDATA redirected).

Inputs #

Fixture target dir/a.txt:

a

When #

# interactive (pty): yazi .
readlink "linked dir"

Then #

  • stdout equals an exact value