End-to-end test for the ziextract non-archive fallback using
pkgforge-dev/ghostty-appimage: the downloaded AppImage is not an
archive, so it must be kept as a plain file, marked executable,
and renamed by the mv ice. Asserts on files only; the Linux-only
binary is never executed since CI also runs on macOS.
Closes: https://github.com/zdharma-continuum/zinit/issues/775
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
is_not_value_in builds an associative array from its arguments, so it
died on an odd element count, which made the test depend on how many
completions earlier suites had installed. It also compared a bare name
against full paths, so it never caught a wrongly installed completion.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
Eight tests repeated the same four-line block asserting PWD, OLDPWD and
where cd - lands. Move it beside _oldpwd_fixture in @setup and drop the
comment paragraphs that restate the traps documented in tests/CLAUDE.md.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
The second test runs `zsh -c', which sources $HOME/.zshenv, so the
developer's own rc file would otherwise leak into $output and $state.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
With the text attribute set, core.autocrlf=false hands the decision to
core.eol, so a global core.eol=crlf still produces CRLF checkouts in the
sandbox clones.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
wait-invalid-suffix-x asserted on 'Expected one of: a, b, c', but
+zi-log colourises each suffix letter separately, so the raw output
carries escape sequences between them and no such contiguous substring
exists. Strip the escapes before asserting on the sentence.
for-invalid-as asserted rc 0 while the load ran on to
∞zinit-compile-plugin-hook, which returns 1 for this fixture ("No files
for compilation found") and made `zinit for' exit 1 for a reason
unrelated to the invalid ice under test. Add nocompile so the test
measures ice validation only.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
@setup bodies run under ERR_EXIT. Sourcing zinit.zsh trips it partway
through, so the setup aborted and zunit reported both tests as failures
with an empty message -- which read as a broken assertion rather than a
broken fixture. The source was redundant anyway: the bootstrap already
sources zinit from the sandbox clone.
Drop the ZINIT[BIN_DIR]="$PWD" override with it. It aimed the tests at
the real checkout instead of the sandbox, the same misdirection that
lets a failed bootstrap write into the working tree. Neither test calls
a zinit function; only the hook registries are needed.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
Covers atload, atinit and multisrc, the nocd branch, a since-deleted
$OLDPWD, an $OLDPWD that started unset, and the configure hook.
Each test asserts where `cd -' actually lands, not just the value of
$OLDPWD: `cd -' reads zsh's internal previous-directory state, so a
parameter-only assertion passes against a fix that merely assigns
$OLDPWD while leaving the bug in place. All seven fail without the
preceding two commits.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
Change `ziextract` when no extractor case matches and no explicit type was passed (-z $ext), file is treated as plain single file with info message
`'<file>' is not an archive — keeping it as a plain file.` plus chmod a+x. The existing exec-bit collection then picks it up, sets REPLY for --move, prints normal
success. Error message retained for explicit bogus types (ziextract file bogus-type). One iteration mid-verify: dropped -- from chmod — BSD/macOS chmod rejects it (chmod: --:
No such file or directory).
Why it broke: commit 1334994f (PR #771) made +x detection archive-exec-bit-only. Bare gh-r binaries arrive over HTTP with 644 and no extension => no extractor, no exec bit →
error branch. Pre-#771, file(1) detection covered this case.
Tests (tests/ices.zunit): two new — plain-file success path (asserts no error, message present, file executable) and bogus-explicit-type error
retention. Suite 16/16, including #771's ziextract-permissions. Regression-validated: plain-file test fails 15/16 with fix stashed.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
Resolve ZINIT[...] settings from `zstyle ':zinit:config' <attr>` before
the BIN_DIR/HOME_DIR/derived-dir logic runs. The attribute name is the
hash field lowercased with `_` replaced by `-` (HOME_DIR -> home-dir).
An explicitly-set ZINIT[KEY] always wins over zstyle, which wins over
the built-in default; fully backward-compatible.
Signed-off-by: Vladislav Doster <mvdoster@gmail.com>
replicate/cog stopped shipping a static binary in its GitHub releases
(switched to a Python wheel coglet-*.whl as of v0.20.0), which broke the
linux gh-r CI job — ziextract cannot unpack a .whl, and the linked symlink
returns 'exec format error' when run.
Replace with sigstore/cosign, which still ships static binaries
(cosign-linux-amd64 / cosign-darwin-{amd64,arm64}) and slots into
the alphabetical position between 'checkmake' and 'compress'.
* Refactored 'configure' and 'make' ices
* New 'build' ice sets 'configure' and 'make ices if no flags are needed.
* New 'cmake' ice will build/install using 'cmake'
* Delete command now handles programs using 'make' and 'cmake' ices
* Setting `$ZINIT[DEBUG]` enables debug logging (i.e., `+zi-log "{dbg} message ..."`)