@sebastienrousseau/dotfiles 0.2.481 → 0.2.499
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ARCHITECTURE.md +29 -196
- package/docs/COMPLIANCE.md +10 -10
- package/docs/COPYRIGHT +3 -4
- package/docs/OPERATIONS.md +38 -65
- package/docs/PLAN.md +3 -3
- package/docs/PR_DESCRIPTION.md +85 -84
- package/docs/ROADMAP.md +11 -11
- package/docs/ROADMAP_legacy.md +556 -0
- package/docs/SECURITY_CHECKLIST.md +1 -1
- package/docs/TASK.md +4 -4
- package/docs/WALKTHROUGH.md +33 -152
- package/package.json +17 -5
- package/scripts/backup.sh +142 -0
- package/scripts/banner.sh +20 -0
- package/scripts/benchmark.sh +20 -0
- package/scripts/build.sh +41 -0
- package/scripts/clean.sh +31 -0
- package/scripts/compile.sh +54 -0
- package/scripts/copy.sh +108 -0
- package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
- package/scripts/doctor.sh +79 -0
- package/scripts/dotfiles.sh +63 -0
- package/scripts/download.sh +35 -0
- package/scripts/help.sh +57 -0
- package/scripts/lock-configs.sh +57 -0
- package/scripts/package.sh +46 -0
- package/scripts/ssh.sh +55 -0
- package/scripts/teleport.sh +23 -0
- package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
- package/scripts/test_smoke.sh +88 -0
- package/scripts/unpack.sh +28 -0
- package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
- package/templates/projects/go/README.md +0 -4
- package/templates/projects/node/README.md +0 -4
- package/templates/projects/python/README.md +0 -4
- package/templates/projects/python/pyproject.toml +0 -15
- package/CHANGELOG.md +0 -285
- package/LICENSE +0 -1283
- package/README.md +0 -315
- package/docs/ALIASES.md +0 -128
- package/docs/FEATURES.md +0 -166
- package/docs/FONTS.md +0 -147
- package/docs/INSTALL.md +0 -119
- package/docs/KEYS.md +0 -40
- package/docs/KEY_ROTATION.md +0 -219
- package/docs/LEGACY_ROADMAP.md +0 -142
- package/docs/NEOVIM_IDE_GUIDE.md +0 -52
- package/docs/README.md +0 -269
- package/docs/REPO_AUDIT.md +0 -23
- package/docs/SCREENSHOTS.md +0 -116
- package/docs/SECRETS.md +0 -76
- package/docs/SECURITY.md +0 -30
- package/docs/TESTING.md +0 -190
- package/docs/TOOLS.md +0 -146
- package/docs/TROUBLESHOOTING.md +0 -112
- package/docs/UTILS.md +0 -105
- package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
- package/docs/adr/ADR-002-shell-performance.md +0 -121
- package/docs/adr/ADR-003-security-first.md +0 -140
- package/docs/adr/ADR-004-cli-architecture.md +0 -157
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
- package/docs/adr/ADR-006-shell-selection.md +0 -115
- package/docs/adr/README.md +0 -33
- package/docs/themes/README.md +0 -20
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
- package/dot_config/ansible/ansible.cfg.tmpl +0 -11
- package/dot_config/atuin/config.toml +0 -23
- package/dot_config/bat/config +0 -8
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -49
- package/dot_config/clippy.toml +0 -55
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json.tmpl +0 -15
- package/dot_config/dotfiles/boot/README.md +0 -11
- package/dot_config/dotfiles/grub/README.md +0 -11
- package/dot_config/dotfiles/lock/README.md +0 -11
- package/dot_config/dotfiles/versions.env.tmpl +0 -19
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -661
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/config.tmpl +0 -77
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
- package/dot_config/go/aliases.sh +0 -61
- package/dot_config/go/env.sh +0 -24
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/ice/README.md +0 -13
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
- package/dot_config/just/justfile +0 -104
- package/dot_config/k9s/config.yaml.tmpl +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -517
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -23
- package/dot_config/lsd/config.yaml +0 -19
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -41
- package/dot_config/mongosh/mongoshrc.js +0 -67
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/nvim/init.lua +0 -4
- package/dot_config/nvim/lazy-lock.json +0 -27
- package/dot_config/nvim/lua/config/autocmds.lua +0 -63
- package/dot_config/nvim/lua/config/keymaps.lua +0 -87
- package/dot_config/nvim/lua/config/lazy.lua +0 -34
- package/dot_config/nvim/lua/config/options.lua +0 -48
- package/dot_config/nvim/lua/plugins/coding.lua +0 -234
- package/dot_config/nvim/lua/plugins/dap.lua +0 -201
- package/dot_config/nvim/lua/plugins/editor.lua +0 -59
- package/dot_config/nvim/lua/plugins/git.lua +0 -9
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
- package/dot_config/nvim/lua/plugins/rust.lua +0 -33
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
- package/dot_config/nvim/lua/plugins/ui.lua +0 -537
- package/dot_config/nvim/snippets/all.lua +0 -9
- package/dot_config/nvim/snippets/python.lua +0 -16
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/pypoetry/config.toml.tmpl +0 -6
- package/dot_config/pyrightconfig.json.tmpl +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/shell/00-container-detect.sh +0 -53
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
- package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
- package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -10
- package/dot_config/shell/90-theme-switch.sh +0 -70
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -119
- package/dot_config/shell/README.md +0 -267
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -124
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl.tmpl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -181
- package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -123
- package/dot_config/waybar/style.css +0 -8
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zellij/config.kdl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -13
- package/dot_config/zsh/dot_zshenv +0 -6
- package/dot_config/zsh/dot_zshrc.tmpl +0 -199
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
- package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
- package/dot_local/bin/executable_ai_core +0 -130
- package/dot_local/bin/executable_b64 +0 -59
- package/dot_local/bin/executable_dot +0 -178
- package/dot_local/bin/executable_dot_completion +0 -55
- package/dot_local/bin/executable_epoch +0 -62
- package/dot_local/bin/executable_extract +0 -108
- package/dot_local/bin/executable_git-ai-commit +0 -160
- package/dot_local/bin/executable_git-ai-diff +0 -154
- package/dot_local/bin/executable_hash +0 -123
- package/dot_local/bin/executable_hex +0 -79
- package/dot_local/bin/executable_ip +0 -37
- package/dot_local/bin/executable_jsonv +0 -54
- package/dot_local/bin/executable_jwt +0 -78
- package/dot_local/bin/executable_kill-port +0 -59
- package/dot_local/bin/executable_lorem +0 -103
- package/dot_local/bin/executable_regex +0 -96
- package/dot_local/bin/executable_tmux-sessionizer +0 -187
- package/dot_local/bin/executable_tour +0 -137
- package/dot_local/bin/executable_update +0 -108
- package/dot_local/bin/executable_uuid +0 -57
- package/dot_local/bin/executable_yamlv +0 -39
- package/dot_local/bin/executable_zig-install +0 -89
- package/dot_local/bin/voice_ops +0 -7
- package/dot_local/share/bash-completion/completions/dot +0 -54
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/install.sh +0 -255
- package/scripts/ci/validate-ci-config.sh +0 -222
- package/scripts/demo/record.sh +0 -41
- package/scripts/diagnostics/benchmark.sh +0 -201
- package/scripts/diagnostics/doctor.sh +0 -115
- package/scripts/diagnostics/drift-dashboard.sh +0 -26
- package/scripts/diagnostics/health.sh +0 -356
- package/scripts/diagnostics/history-analysis.sh +0 -77
- package/scripts/diagnostics/security-score.sh +0 -392
- package/scripts/dot/commands/appearance.sh +0 -63
- package/scripts/dot/commands/core.sh +0 -130
- package/scripts/dot/commands/diagnostics.sh +0 -100
- package/scripts/dot/commands/meta.sh +0 -117
- package/scripts/dot/commands/restore.sh +0 -209
- package/scripts/dot/commands/secrets.sh +0 -81
- package/scripts/dot/commands/security.sh +0 -73
- package/scripts/dot/commands/tools.sh +0 -228
- package/scripts/dot/lib/utils.sh +0 -72
- package/scripts/fonts/install-nerd-fonts.sh +0 -59
- package/scripts/fonts/patch-fonts.sh +0 -34
- package/scripts/ops/chezmoi-apply.sh +0 -42
- package/scripts/ops/chezmoi-diff.sh +0 -14
- package/scripts/ops/chezmoi-remove.sh +0 -43
- package/scripts/ops/chezmoi-update.sh +0 -16
- package/scripts/ops/heal.sh +0 -466
- package/scripts/ops/health-check.sh +0 -380
- package/scripts/ops/rollback.sh +0 -531
- package/scripts/ops/teleport.sh +0 -32
- package/scripts/secrets/age-init.sh +0 -69
- package/scripts/secrets/create-secrets-file.sh +0 -44
- package/scripts/secrets/encrypt-ssh-key.sh +0 -42
- package/scripts/security/backup.sh +0 -17
- package/scripts/security/dns-doh.sh +0 -29
- package/scripts/security/encryption-check.sh +0 -39
- package/scripts/security/enforce-policies.sh +0 -339
- package/scripts/security/firewall.sh +0 -34
- package/scripts/security/lock-configs.sh +0 -57
- package/scripts/security/lock-screen.sh +0 -33
- package/scripts/security/manage-secrets.sh +0 -415
- package/scripts/security/telemetry-kill.sh +0 -28
- package/scripts/security/usb-safety.sh +0 -29
- package/scripts/tests/README.md +0 -241
- package/scripts/tests/benchmark.sh +0 -91
- package/scripts/tests/framework/assertions.sh +0 -283
- package/scripts/tests/framework/mocks.sh +0 -201
- package/scripts/tests/framework/test_runner.sh +0 -189
- package/scripts/tests/integration/test_install.sh +0 -237
- package/scripts/tests/performance/benchmark_runner.sh +0 -156
- package/scripts/tests/performance/regression_check.sh +0 -73
- package/scripts/tests/performance/stress_test.sh +0 -65
- package/scripts/tests/test-docker.sh +0 -48
- package/scripts/tests/unit/test_ai_aliases.sh +0 -158
- package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
- package/scripts/tests/unit/test_backup.sh +0 -227
- package/scripts/tests/unit/test_case_functions.sh +0 -238
- package/scripts/tests/unit/test_cd_aliases.sh +0 -367
- package/scripts/tests/unit/test_dot_cli.sh +0 -217
- package/scripts/tests/unit/test_encode64.sh +0 -67
- package/scripts/tests/unit/test_environment.sh +0 -78
- package/scripts/tests/unit/test_extract.sh +0 -163
- package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
- package/scripts/tests/unit/test_genpass.sh +0 -298
- package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
- package/scripts/tests/unit/test_installers.sh +0 -172
- package/scripts/tests/unit/test_keygen.sh +0 -68
- package/scripts/tests/unit/test_logging.sh +0 -96
- package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
- package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
- package/scripts/tests/unit/test_prependpath.sh +0 -66
- package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
- package/scripts/tests/unit/test_rd.sh +0 -230
- package/scripts/tests/unit/test_security_fixes.sh +0 -130
- package/scripts/tests/unit/test_security_scripts.sh +0 -87
- package/scripts/tests/unit/test_template_validation.sh +0 -238
- package/scripts/tests/unit/test_utility_functions.sh +0 -144
- package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
- package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
- package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
- package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
- package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
- package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
- package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
- package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
- package/scripts/tests/unit/test_zipf.sh +0 -76
- package/scripts/theme/apply-gnome-theme.sh +0 -297
- package/scripts/theme/install-boot-logo.sh +0 -61
- package/scripts/theme/install-catppuccin-themes.sh +0 -346
- package/scripts/theme/install-cursors.sh +0 -24
- package/scripts/theme/install-file-icons.sh +0 -25
- package/scripts/theme/install-grub-theme.sh +0 -51
- package/scripts/theme/install-lock-icon.sh +0 -29
- package/scripts/theme/switch.sh +0 -250
- package/scripts/theme/wallpaper-rotate.sh +0 -82
- package/scripts/theme/wallpaper-sync.sh +0 -42
- package/scripts/tools/cmatrix.sh +0 -20
- package/scripts/tools/emoji-picker.sh +0 -45
- package/scripts/tools/figlet-banner.sh +0 -17
- package/scripts/tools/log-rotate.sh +0 -29
- package/scripts/tools/lolcat-wrap.sh +0 -18
- package/scripts/tools/pipes.sh +0 -47
- package/scripts/tuning/linux.sh +0 -175
- package/scripts/tuning/macos.sh +0 -46
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034
|
|
3
|
-
# Unit tests for case conversion functions:
|
|
4
|
-
# snakecase, kebabcase, uppercase, lowercase, titlecase, sentencecase
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
9
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
10
|
-
source "$SCRIPT_DIR/../framework/mocks.sh"
|
|
11
|
-
|
|
12
|
-
FUNCS_DIR="$REPO_ROOT/.chezmoitemplates/functions"
|
|
13
|
-
|
|
14
|
-
# Source all case functions
|
|
15
|
-
for func_file in snakecase.sh kebabcase.sh uppercase.sh lowercase.sh titlecase.sh sentencecase.sh; do
|
|
16
|
-
if [[ -f "$FUNCS_DIR/$func_file" ]]; then
|
|
17
|
-
source "$FUNCS_DIR/$func_file"
|
|
18
|
-
else
|
|
19
|
-
echo "SKIP: $func_file not found at $FUNCS_DIR/$func_file"
|
|
20
|
-
fi
|
|
21
|
-
done
|
|
22
|
-
|
|
23
|
-
echo "Testing case conversion functions..."
|
|
24
|
-
|
|
25
|
-
# ============ snakecase ============
|
|
26
|
-
|
|
27
|
-
test_start "snakecase_function_exists"
|
|
28
|
-
assert_true "type snakecase &>/dev/null" "snakecase function should exist"
|
|
29
|
-
|
|
30
|
-
test_start "snakecase_no_args"
|
|
31
|
-
set +e
|
|
32
|
-
output=$(snakecase 2>&1)
|
|
33
|
-
ec=$?
|
|
34
|
-
set -e
|
|
35
|
-
assert_equals "1" "$ec" "snakecase exit code should be 1 for no args"
|
|
36
|
-
|
|
37
|
-
test_start "snakecase_nonexistent_file"
|
|
38
|
-
set +e
|
|
39
|
-
output=$(snakecase "/nonexistent/file_12345.txt" 2>&1)
|
|
40
|
-
set -e
|
|
41
|
-
if [[ "$output" == *"ERROR"* ]]; then
|
|
42
|
-
((TESTS_PASSED++))
|
|
43
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: reports error for nonexistent file"
|
|
44
|
-
else
|
|
45
|
-
((TESTS_FAILED++))
|
|
46
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should report error for nonexistent file"
|
|
47
|
-
fi
|
|
48
|
-
|
|
49
|
-
test_start "snakecase_already_snake"
|
|
50
|
-
test_dir=$(mock_dir "case_test")
|
|
51
|
-
touch "$test_dir/already_snake.txt"
|
|
52
|
-
output=$(snakecase "$test_dir/already_snake.txt" 2>&1)
|
|
53
|
-
if [[ "$output" == *"already"* ]]; then
|
|
54
|
-
((TESTS_PASSED++))
|
|
55
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: skips already snake_case file"
|
|
56
|
-
else
|
|
57
|
-
((TESTS_FAILED++))
|
|
58
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should skip already snake_case file"
|
|
59
|
-
fi
|
|
60
|
-
rm -rf "$test_dir"
|
|
61
|
-
|
|
62
|
-
test_start "snakecase_converts"
|
|
63
|
-
test_dir=$(mock_dir "case_test")
|
|
64
|
-
touch "$test_dir/Hello World.txt"
|
|
65
|
-
snakecase "$test_dir/Hello World.txt" >/dev/null 2>&1
|
|
66
|
-
if [[ -f "$test_dir/hello_world.txt" ]]; then
|
|
67
|
-
((TESTS_PASSED++))
|
|
68
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: converts 'Hello World.txt' to 'hello_world.txt'"
|
|
69
|
-
else
|
|
70
|
-
((TESTS_FAILED++))
|
|
71
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should convert to snake_case"
|
|
72
|
-
fi
|
|
73
|
-
rm -rf "$test_dir"
|
|
74
|
-
|
|
75
|
-
# ============ kebabcase ============
|
|
76
|
-
|
|
77
|
-
test_start "kebabcase_function_exists"
|
|
78
|
-
assert_true "type kebabcase &>/dev/null" "kebabcase function should exist"
|
|
79
|
-
|
|
80
|
-
test_start "kebabcase_no_args"
|
|
81
|
-
set +e
|
|
82
|
-
output=$(kebabcase 2>&1)
|
|
83
|
-
ec=$?
|
|
84
|
-
set -e
|
|
85
|
-
assert_equals "1" "$ec" "kebabcase exit code should be 1 for no args"
|
|
86
|
-
|
|
87
|
-
test_start "kebabcase_converts"
|
|
88
|
-
test_dir=$(mock_dir "case_test")
|
|
89
|
-
touch "$test_dir/Hello World.txt"
|
|
90
|
-
kebabcase "$test_dir/Hello World.txt" >/dev/null 2>&1
|
|
91
|
-
if [[ -f "$test_dir/hello-world.txt" ]]; then
|
|
92
|
-
((TESTS_PASSED++))
|
|
93
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: converts 'Hello World.txt' to 'hello-world.txt'"
|
|
94
|
-
else
|
|
95
|
-
((TESTS_FAILED++))
|
|
96
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should convert to kebab-case"
|
|
97
|
-
fi
|
|
98
|
-
rm -rf "$test_dir"
|
|
99
|
-
|
|
100
|
-
# ============ uppercase ============
|
|
101
|
-
|
|
102
|
-
test_start "uppercase_function_exists"
|
|
103
|
-
assert_true "type uppercase &>/dev/null" "uppercase function should exist"
|
|
104
|
-
|
|
105
|
-
test_start "uppercase_no_args"
|
|
106
|
-
set +e
|
|
107
|
-
output=$(uppercase 2>&1)
|
|
108
|
-
ec=$?
|
|
109
|
-
set -e
|
|
110
|
-
assert_equals "1" "$ec" "uppercase exit code should be 1 for no args"
|
|
111
|
-
|
|
112
|
-
test_start "uppercase_converts"
|
|
113
|
-
test_dir=$(mock_dir "case_test")
|
|
114
|
-
touch "$test_dir/hello.txt"
|
|
115
|
-
uppercase "$test_dir/hello.txt" >/dev/null 2>&1
|
|
116
|
-
if [[ -f "$test_dir/HELLO.TXT" ]]; then
|
|
117
|
-
((TESTS_PASSED++))
|
|
118
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: converts 'hello.txt' to 'HELLO.TXT'"
|
|
119
|
-
else
|
|
120
|
-
((TESTS_FAILED++))
|
|
121
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should convert to uppercase"
|
|
122
|
-
fi
|
|
123
|
-
rm -rf "$test_dir"
|
|
124
|
-
|
|
125
|
-
test_start "uppercase_already_upper"
|
|
126
|
-
test_dir=$(mock_dir "case_test")
|
|
127
|
-
touch "$test_dir/HELLO.TXT"
|
|
128
|
-
output=$(uppercase "$test_dir/HELLO.TXT" 2>&1)
|
|
129
|
-
if [[ "$output" == *"already"* ]]; then
|
|
130
|
-
((TESTS_PASSED++))
|
|
131
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: skips already uppercase file"
|
|
132
|
-
else
|
|
133
|
-
((TESTS_FAILED++))
|
|
134
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should skip already uppercase file"
|
|
135
|
-
fi
|
|
136
|
-
rm -rf "$test_dir"
|
|
137
|
-
|
|
138
|
-
# ============ lowercase ============
|
|
139
|
-
|
|
140
|
-
test_start "lowercase_function_exists"
|
|
141
|
-
assert_true "type lowercase &>/dev/null" "lowercase function should exist"
|
|
142
|
-
|
|
143
|
-
test_start "lowercase_no_args"
|
|
144
|
-
set +e
|
|
145
|
-
output=$(lowercase 2>&1)
|
|
146
|
-
ec=$?
|
|
147
|
-
set -e
|
|
148
|
-
assert_equals "1" "$ec" "lowercase exit code should be 1 for no args"
|
|
149
|
-
|
|
150
|
-
test_start "lowercase_converts"
|
|
151
|
-
test_dir=$(mock_dir "case_test")
|
|
152
|
-
touch "$test_dir/HELLO.TXT"
|
|
153
|
-
lowercase "$test_dir/HELLO.TXT" >/dev/null 2>&1
|
|
154
|
-
if [[ -f "$test_dir/hello.txt" ]]; then
|
|
155
|
-
((TESTS_PASSED++))
|
|
156
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: converts 'HELLO.TXT' to 'hello.txt'"
|
|
157
|
-
else
|
|
158
|
-
((TESTS_FAILED++))
|
|
159
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should convert to lowercase"
|
|
160
|
-
fi
|
|
161
|
-
rm -rf "$test_dir"
|
|
162
|
-
|
|
163
|
-
# ============ titlecase ============
|
|
164
|
-
|
|
165
|
-
test_start "titlecase_function_exists"
|
|
166
|
-
assert_true "type titlecase &>/dev/null" "titlecase function should exist"
|
|
167
|
-
|
|
168
|
-
test_start "titlecase_no_args"
|
|
169
|
-
set +e
|
|
170
|
-
output=$(titlecase 2>&1)
|
|
171
|
-
ec=$?
|
|
172
|
-
set -e
|
|
173
|
-
assert_equals "1" "$ec" "titlecase exit code should be 1 for no args"
|
|
174
|
-
|
|
175
|
-
test_start "titlecase_converts"
|
|
176
|
-
test_dir=$(mock_dir "case_test")
|
|
177
|
-
touch "$test_dir/hello.txt"
|
|
178
|
-
titlecase "$test_dir/hello.txt" >/dev/null 2>&1
|
|
179
|
-
if [[ -f "$test_dir/Hello.txt" ]]; then
|
|
180
|
-
((TESTS_PASSED++))
|
|
181
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: converts 'hello.txt' to 'Hello.txt'"
|
|
182
|
-
else
|
|
183
|
-
((TESTS_FAILED++))
|
|
184
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should convert to title case"
|
|
185
|
-
fi
|
|
186
|
-
rm -rf "$test_dir"
|
|
187
|
-
|
|
188
|
-
# ============ sentencecase ============
|
|
189
|
-
|
|
190
|
-
test_start "sentencecase_function_exists"
|
|
191
|
-
assert_true "type sentencecase &>/dev/null" "sentencecase function should exist"
|
|
192
|
-
|
|
193
|
-
test_start "sentencecase_no_args"
|
|
194
|
-
set +e
|
|
195
|
-
output=$(sentencecase 2>&1)
|
|
196
|
-
ec=$?
|
|
197
|
-
set -e
|
|
198
|
-
assert_equals "1" "$ec" "sentencecase exit code should be 1 for no args"
|
|
199
|
-
|
|
200
|
-
test_start "sentencecase_converts"
|
|
201
|
-
test_dir=$(mock_dir "case_test")
|
|
202
|
-
touch "$test_dir/hELLO.txt"
|
|
203
|
-
sentencecase "$test_dir/hELLO.txt" >/dev/null 2>&1
|
|
204
|
-
if [[ -f "$test_dir/Hello.txt" ]]; then
|
|
205
|
-
((TESTS_PASSED++))
|
|
206
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: converts 'hELLO.txt' to 'Hello.txt'"
|
|
207
|
-
else
|
|
208
|
-
((TESTS_FAILED++))
|
|
209
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should convert to sentence case"
|
|
210
|
-
fi
|
|
211
|
-
rm -rf "$test_dir"
|
|
212
|
-
|
|
213
|
-
# ============ Cross-cutting: nonexistent file handling ============
|
|
214
|
-
|
|
215
|
-
test_start "case_funcs_handle_nonexistent"
|
|
216
|
-
all_ok=true
|
|
217
|
-
for func in snakecase kebabcase uppercase lowercase titlecase sentencecase; do
|
|
218
|
-
if type "$func" &>/dev/null; then
|
|
219
|
-
set +e
|
|
220
|
-
output=$("$func" "/no/such/file_99999.txt" 2>&1)
|
|
221
|
-
set -e
|
|
222
|
-
if [[ "$output" != *"ERROR"* ]]; then
|
|
223
|
-
all_ok=false
|
|
224
|
-
echo " $func did not report ERROR for nonexistent file"
|
|
225
|
-
fi
|
|
226
|
-
fi
|
|
227
|
-
done
|
|
228
|
-
if [[ "$all_ok" == true ]]; then
|
|
229
|
-
((TESTS_PASSED++))
|
|
230
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: all case functions report error for nonexistent files"
|
|
231
|
-
else
|
|
232
|
-
((TESTS_FAILED++))
|
|
233
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: some case functions did not report error"
|
|
234
|
-
fi
|
|
235
|
-
|
|
236
|
-
echo ""
|
|
237
|
-
echo "Case conversion function tests completed."
|
|
238
|
-
print_summary
|
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034
|
|
3
|
-
# Unit tests for cd aliases and navigation functions
|
|
4
|
-
# Tests directory navigation, bookmarks, and helper functions
|
|
5
|
-
|
|
6
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
-
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
8
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
9
|
-
source "$SCRIPT_DIR/../framework/mocks.sh"
|
|
10
|
-
|
|
11
|
-
# Source the aliases file being tested
|
|
12
|
-
ALIAS_FILE="$REPO_ROOT/.chezmoitemplates/aliases/cd/cd.aliases.sh"
|
|
13
|
-
if [[ -f "$ALIAS_FILE" ]]; then
|
|
14
|
-
# Reset some variables to avoid side effects
|
|
15
|
-
RESTORE_LAST_DIR=false
|
|
16
|
-
AUTO_LIST_AFTER_CD=false
|
|
17
|
-
source "$ALIAS_FILE"
|
|
18
|
-
else
|
|
19
|
-
echo "Warning: cd.aliases.sh not found at $ALIAS_FILE"
|
|
20
|
-
fi
|
|
21
|
-
|
|
22
|
-
# Test: safe_write_file function exists
|
|
23
|
-
test_start "safe_write_file_exists"
|
|
24
|
-
if declare -f safe_write_file >/dev/null 2>&1; then
|
|
25
|
-
((TESTS_PASSED++))
|
|
26
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: safe_write_file function exists"
|
|
27
|
-
else
|
|
28
|
-
((TESTS_FAILED++))
|
|
29
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: safe_write_file function should exist"
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
# Test: safe_write_file creates file
|
|
33
|
-
test_start "safe_write_file_creates"
|
|
34
|
-
if declare -f safe_write_file >/dev/null 2>&1; then
|
|
35
|
-
test_dir=$(mock_dir "cd_test")
|
|
36
|
-
test_file="$test_dir/test_file.txt"
|
|
37
|
-
safe_write_file "$test_file" "test content"
|
|
38
|
-
|
|
39
|
-
if [[ -f "$test_file" ]]; then
|
|
40
|
-
((TESTS_PASSED++))
|
|
41
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: safe_write_file creates file"
|
|
42
|
-
else
|
|
43
|
-
((TESTS_FAILED++))
|
|
44
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: file should be created"
|
|
45
|
-
fi
|
|
46
|
-
rm -rf "$test_dir"
|
|
47
|
-
else
|
|
48
|
-
((TESTS_PASSED++))
|
|
49
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
# Test: safe_write_file writes content
|
|
53
|
-
test_start "safe_write_file_content"
|
|
54
|
-
if declare -f safe_write_file >/dev/null 2>&1; then
|
|
55
|
-
test_dir=$(mock_dir "cd_test")
|
|
56
|
-
test_file="$test_dir/test_file.txt"
|
|
57
|
-
safe_write_file "$test_file" "expected content"
|
|
58
|
-
|
|
59
|
-
content=$(cat "$test_file" 2>/dev/null)
|
|
60
|
-
if [[ "$content" == "expected content" ]]; then
|
|
61
|
-
((TESTS_PASSED++))
|
|
62
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: correct content written"
|
|
63
|
-
else
|
|
64
|
-
((TESTS_FAILED++))
|
|
65
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: content should match"
|
|
66
|
-
fi
|
|
67
|
-
rm -rf "$test_dir"
|
|
68
|
-
else
|
|
69
|
-
((TESTS_PASSED++))
|
|
70
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
|
-
# Test: safe_write_file append mode
|
|
74
|
-
test_start "safe_write_file_append"
|
|
75
|
-
if declare -f safe_write_file >/dev/null 2>&1; then
|
|
76
|
-
test_dir=$(mock_dir "cd_test")
|
|
77
|
-
test_file="$test_dir/test_file.txt"
|
|
78
|
-
safe_write_file "$test_file" "line1"
|
|
79
|
-
safe_write_file "$test_file" "line2" "a"
|
|
80
|
-
|
|
81
|
-
line_count=$(wc -l <"$test_file" | tr -d ' ')
|
|
82
|
-
if [[ "$line_count" -eq 2 ]]; then
|
|
83
|
-
((TESTS_PASSED++))
|
|
84
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: append mode works"
|
|
85
|
-
else
|
|
86
|
-
((TESTS_FAILED++))
|
|
87
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should have 2 lines"
|
|
88
|
-
fi
|
|
89
|
-
rm -rf "$test_dir"
|
|
90
|
-
else
|
|
91
|
-
((TESTS_PASSED++))
|
|
92
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
93
|
-
fi
|
|
94
|
-
|
|
95
|
-
# Test: count_dir_items function exists
|
|
96
|
-
test_start "count_dir_items_exists"
|
|
97
|
-
if declare -f count_dir_items >/dev/null 2>&1; then
|
|
98
|
-
((TESTS_PASSED++))
|
|
99
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: count_dir_items function exists"
|
|
100
|
-
else
|
|
101
|
-
((TESTS_FAILED++))
|
|
102
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: count_dir_items function should exist"
|
|
103
|
-
fi
|
|
104
|
-
|
|
105
|
-
# Test: count_dir_items counts correctly
|
|
106
|
-
test_start "count_dir_items_count"
|
|
107
|
-
if declare -f count_dir_items >/dev/null 2>&1; then
|
|
108
|
-
test_dir=$(mock_dir "cd_test")
|
|
109
|
-
touch "$test_dir/file1.txt"
|
|
110
|
-
touch "$test_dir/file2.txt"
|
|
111
|
-
touch "$test_dir/file3.txt"
|
|
112
|
-
|
|
113
|
-
count=$(count_dir_items "$test_dir")
|
|
114
|
-
if [[ "$count" -eq 3 ]]; then
|
|
115
|
-
((TESTS_PASSED++))
|
|
116
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: counts 3 items correctly"
|
|
117
|
-
else
|
|
118
|
-
((TESTS_FAILED++))
|
|
119
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should count 3, got $count"
|
|
120
|
-
fi
|
|
121
|
-
rm -rf "$test_dir"
|
|
122
|
-
else
|
|
123
|
-
((TESTS_PASSED++))
|
|
124
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
125
|
-
fi
|
|
126
|
-
|
|
127
|
-
# Test: mkcd function exists
|
|
128
|
-
test_start "mkcd_exists"
|
|
129
|
-
if declare -f mkcd >/dev/null 2>&1; then
|
|
130
|
-
((TESTS_PASSED++))
|
|
131
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: mkcd function exists"
|
|
132
|
-
else
|
|
133
|
-
((TESTS_FAILED++))
|
|
134
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: mkcd function should exist"
|
|
135
|
-
fi
|
|
136
|
-
|
|
137
|
-
# Test: mkcd with no arguments shows error
|
|
138
|
-
test_start "mkcd_no_args"
|
|
139
|
-
if declare -f mkcd >/dev/null 2>&1; then
|
|
140
|
-
output=$(mkcd 2>&1)
|
|
141
|
-
exit_code=$?
|
|
142
|
-
if [[ "$exit_code" -eq 1 ]] || [[ "$output" == *"Usage"* ]]; then
|
|
143
|
-
((TESTS_PASSED++))
|
|
144
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: mkcd shows usage with no args"
|
|
145
|
-
else
|
|
146
|
-
((TESTS_FAILED++))
|
|
147
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show usage"
|
|
148
|
-
fi
|
|
149
|
-
else
|
|
150
|
-
((TESTS_PASSED++))
|
|
151
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
152
|
-
fi
|
|
153
|
-
|
|
154
|
-
# Test: mkcd creates directory
|
|
155
|
-
test_start "mkcd_creates_dir"
|
|
156
|
-
if declare -f mkcd >/dev/null 2>&1; then
|
|
157
|
-
test_dir=$(mock_dir "cd_test")
|
|
158
|
-
new_dir="$test_dir/new_directory"
|
|
159
|
-
|
|
160
|
-
(mkcd "$new_dir" >/dev/null 2>&1)
|
|
161
|
-
|
|
162
|
-
if [[ -d "$new_dir" ]]; then
|
|
163
|
-
((TESTS_PASSED++))
|
|
164
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: mkcd creates directory"
|
|
165
|
-
else
|
|
166
|
-
((TESTS_FAILED++))
|
|
167
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: directory should be created"
|
|
168
|
-
fi
|
|
169
|
-
rm -rf "$test_dir"
|
|
170
|
-
else
|
|
171
|
-
((TESTS_PASSED++))
|
|
172
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
173
|
-
fi
|
|
174
|
-
|
|
175
|
-
# Test: bookmark function exists
|
|
176
|
-
test_start "bookmark_exists"
|
|
177
|
-
if declare -f bookmark >/dev/null 2>&1; then
|
|
178
|
-
((TESTS_PASSED++))
|
|
179
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: bookmark function exists"
|
|
180
|
-
else
|
|
181
|
-
((TESTS_FAILED++))
|
|
182
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: bookmark function should exist"
|
|
183
|
-
fi
|
|
184
|
-
|
|
185
|
-
# Test: bookmark with no args shows list/usage
|
|
186
|
-
test_start "bookmark_no_args"
|
|
187
|
-
if declare -f bookmark >/dev/null 2>&1; then
|
|
188
|
-
output=$(
|
|
189
|
-
set +u
|
|
190
|
-
bookmark 2>&1
|
|
191
|
-
)
|
|
192
|
-
if [[ "$output" == *"Usage"* ]] || [[ "$output" == *"bookmark"* ]] || [[ "$output" == *"No bookmarks"* ]]; then
|
|
193
|
-
((TESTS_PASSED++))
|
|
194
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: bookmark shows usage/list"
|
|
195
|
-
else
|
|
196
|
-
((TESTS_FAILED++))
|
|
197
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show usage or list"
|
|
198
|
-
echo -e " Output: $output"
|
|
199
|
-
fi
|
|
200
|
-
else
|
|
201
|
-
((TESTS_PASSED++))
|
|
202
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
203
|
-
fi
|
|
204
|
-
|
|
205
|
-
# Test: bookmark rejects invalid names
|
|
206
|
-
test_start "bookmark_invalid_name"
|
|
207
|
-
if declare -f bookmark >/dev/null 2>&1; then
|
|
208
|
-
output=$(bookmark "invalid name with spaces" 2>&1)
|
|
209
|
-
exit_code=$?
|
|
210
|
-
if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"Error"* ]]; then
|
|
211
|
-
((TESTS_PASSED++))
|
|
212
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: rejects invalid bookmark names"
|
|
213
|
-
else
|
|
214
|
-
((TESTS_FAILED++))
|
|
215
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should reject invalid names"
|
|
216
|
-
fi
|
|
217
|
-
else
|
|
218
|
-
((TESTS_PASSED++))
|
|
219
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
220
|
-
fi
|
|
221
|
-
|
|
222
|
-
# Test: goto function exists
|
|
223
|
-
test_start "goto_exists"
|
|
224
|
-
if declare -f goto >/dev/null 2>&1; then
|
|
225
|
-
((TESTS_PASSED++))
|
|
226
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: goto function exists"
|
|
227
|
-
else
|
|
228
|
-
((TESTS_FAILED++))
|
|
229
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: goto function should exist"
|
|
230
|
-
fi
|
|
231
|
-
|
|
232
|
-
# Test: goto with no args shows usage
|
|
233
|
-
test_start "goto_no_args"
|
|
234
|
-
if declare -f goto >/dev/null 2>&1; then
|
|
235
|
-
output=$(goto 2>&1)
|
|
236
|
-
exit_code=$?
|
|
237
|
-
if [[ "$exit_code" -eq 1 ]] || [[ "$output" == *"Usage"* ]]; then
|
|
238
|
-
((TESTS_PASSED++))
|
|
239
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: goto shows usage with no args"
|
|
240
|
-
else
|
|
241
|
-
((TESTS_FAILED++))
|
|
242
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show usage"
|
|
243
|
-
fi
|
|
244
|
-
else
|
|
245
|
-
((TESTS_PASSED++))
|
|
246
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
247
|
-
fi
|
|
248
|
-
|
|
249
|
-
# Test: goto with nonexistent bookmark shows error
|
|
250
|
-
test_start "goto_nonexistent"
|
|
251
|
-
if declare -f goto >/dev/null 2>&1; then
|
|
252
|
-
output=$(goto "nonexistent_bookmark_12345" 2>&1)
|
|
253
|
-
exit_code=$?
|
|
254
|
-
if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"not found"* ]] || [[ "$output" == *"No bookmarks"* ]]; then
|
|
255
|
-
((TESTS_PASSED++))
|
|
256
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: goto handles nonexistent bookmark"
|
|
257
|
-
else
|
|
258
|
-
((TESTS_FAILED++))
|
|
259
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should handle nonexistent bookmark"
|
|
260
|
-
fi
|
|
261
|
-
else
|
|
262
|
-
((TESTS_PASSED++))
|
|
263
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
264
|
-
fi
|
|
265
|
-
|
|
266
|
-
# Test: proj function exists
|
|
267
|
-
test_start "proj_exists"
|
|
268
|
-
if declare -f proj >/dev/null 2>&1; then
|
|
269
|
-
((TESTS_PASSED++))
|
|
270
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: proj function exists"
|
|
271
|
-
else
|
|
272
|
-
((TESTS_FAILED++))
|
|
273
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: proj function should exist"
|
|
274
|
-
fi
|
|
275
|
-
|
|
276
|
-
# Test: cd_with_history validates directory
|
|
277
|
-
test_start "cd_with_history_validates"
|
|
278
|
-
if declare -f cd_with_history >/dev/null 2>&1; then
|
|
279
|
-
output=$(cd_with_history "/nonexistent/directory" 2>&1)
|
|
280
|
-
exit_code=$?
|
|
281
|
-
if [[ "$exit_code" -ne 0 ]] || [[ "$output" == *"Error"* ]] || [[ "$output" == *"not found"* ]]; then
|
|
282
|
-
((TESTS_PASSED++))
|
|
283
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: validates directory exists"
|
|
284
|
-
else
|
|
285
|
-
((TESTS_FAILED++))
|
|
286
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should validate directory"
|
|
287
|
-
fi
|
|
288
|
-
else
|
|
289
|
-
((TESTS_PASSED++))
|
|
290
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
291
|
-
fi
|
|
292
|
-
|
|
293
|
-
# Test: cd_aliases_help function exists
|
|
294
|
-
test_start "cd_aliases_help_exists"
|
|
295
|
-
if declare -f cd_aliases_help >/dev/null 2>&1; then
|
|
296
|
-
((TESTS_PASSED++))
|
|
297
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: cd_aliases_help function exists"
|
|
298
|
-
else
|
|
299
|
-
((TESTS_FAILED++))
|
|
300
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: cd_aliases_help function should exist"
|
|
301
|
-
fi
|
|
302
|
-
|
|
303
|
-
# Test: cd_aliases_help shows documentation
|
|
304
|
-
test_start "cd_aliases_help_output"
|
|
305
|
-
if declare -f cd_aliases_help >/dev/null 2>&1; then
|
|
306
|
-
output=$(cd_aliases_help 2>&1)
|
|
307
|
-
if [[ "$output" == *"NAVIGATION"* ]] || [[ "$output" == *"BOOKMARK"* ]]; then
|
|
308
|
-
((TESTS_PASSED++))
|
|
309
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: help shows documentation"
|
|
310
|
-
else
|
|
311
|
-
((TESTS_FAILED++))
|
|
312
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show documentation"
|
|
313
|
-
fi
|
|
314
|
-
else
|
|
315
|
-
((TESTS_PASSED++))
|
|
316
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
317
|
-
fi
|
|
318
|
-
|
|
319
|
-
# Test: cd_aliases_version function exists
|
|
320
|
-
test_start "cd_aliases_version_exists"
|
|
321
|
-
if declare -f cd_aliases_version >/dev/null 2>&1; then
|
|
322
|
-
((TESTS_PASSED++))
|
|
323
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: cd_aliases_version function exists"
|
|
324
|
-
else
|
|
325
|
-
((TESTS_FAILED++))
|
|
326
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: cd_aliases_version function should exist"
|
|
327
|
-
fi
|
|
328
|
-
|
|
329
|
-
# Test: cd_aliases_version shows version
|
|
330
|
-
test_start "cd_aliases_version_output"
|
|
331
|
-
if declare -f cd_aliases_version >/dev/null 2>&1; then
|
|
332
|
-
output=$(cd_aliases_version 2>&1)
|
|
333
|
-
if [[ "$output" == *"v"* ]] || [[ "$output" =~ [0-9]+\.[0-9]+ ]]; then
|
|
334
|
-
((TESTS_PASSED++))
|
|
335
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: version shows version number"
|
|
336
|
-
else
|
|
337
|
-
((TESTS_FAILED++))
|
|
338
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: should show version"
|
|
339
|
-
fi
|
|
340
|
-
else
|
|
341
|
-
((TESTS_PASSED++))
|
|
342
|
-
echo -e " ${YELLOW}~${NC} $CURRENT_TEST: skipped (function not available)"
|
|
343
|
-
fi
|
|
344
|
-
|
|
345
|
-
# Test: DOTFILES_VERSION is set
|
|
346
|
-
test_start "dotfiles_version_set"
|
|
347
|
-
if [[ -n "${DOTFILES_VERSION:-}" ]]; then
|
|
348
|
-
((TESTS_PASSED++))
|
|
349
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: DOTFILES_VERSION is set ($DOTFILES_VERSION)"
|
|
350
|
-
else
|
|
351
|
-
((TESTS_FAILED++))
|
|
352
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: DOTFILES_VERSION should be set"
|
|
353
|
-
fi
|
|
354
|
-
|
|
355
|
-
# Test: OS detection works
|
|
356
|
-
test_start "os_detection"
|
|
357
|
-
if [[ -n "${DOTFILES_OS:-}" ]]; then
|
|
358
|
-
((TESTS_PASSED++))
|
|
359
|
-
echo -e " ${GREEN}✓${NC} $CURRENT_TEST: OS detected ($DOTFILES_OS)"
|
|
360
|
-
else
|
|
361
|
-
((TESTS_FAILED++))
|
|
362
|
-
echo -e " ${RED}✗${NC} $CURRENT_TEST: DOTFILES_OS should be set"
|
|
363
|
-
fi
|
|
364
|
-
|
|
365
|
-
echo ""
|
|
366
|
-
echo "CD aliases tests completed."
|
|
367
|
-
echo "RESULTS:$TESTS_RUN:$TESTS_PASSED:$TESTS_FAILED"
|