@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.
Files changed (317) hide show
  1. package/docs/ARCHITECTURE.md +29 -196
  2. package/docs/COMPLIANCE.md +10 -10
  3. package/docs/COPYRIGHT +3 -4
  4. package/docs/OPERATIONS.md +38 -65
  5. package/docs/PLAN.md +3 -3
  6. package/docs/PR_DESCRIPTION.md +85 -84
  7. package/docs/ROADMAP.md +11 -11
  8. package/docs/ROADMAP_legacy.md +556 -0
  9. package/docs/SECURITY_CHECKLIST.md +1 -1
  10. package/docs/TASK.md +4 -4
  11. package/docs/WALKTHROUGH.md +33 -152
  12. package/package.json +17 -5
  13. package/scripts/backup.sh +142 -0
  14. package/scripts/banner.sh +20 -0
  15. package/scripts/benchmark.sh +20 -0
  16. package/scripts/build.sh +41 -0
  17. package/scripts/clean.sh +31 -0
  18. package/scripts/compile.sh +54 -0
  19. package/scripts/copy.sh +108 -0
  20. package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
  21. package/scripts/doctor.sh +79 -0
  22. package/scripts/dotfiles.sh +63 -0
  23. package/scripts/download.sh +35 -0
  24. package/scripts/help.sh +57 -0
  25. package/scripts/lock-configs.sh +57 -0
  26. package/scripts/package.sh +46 -0
  27. package/scripts/ssh.sh +55 -0
  28. package/scripts/teleport.sh +23 -0
  29. package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
  30. package/scripts/test_smoke.sh +88 -0
  31. package/scripts/unpack.sh +28 -0
  32. package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
  33. package/templates/projects/go/README.md +0 -4
  34. package/templates/projects/node/README.md +0 -4
  35. package/templates/projects/python/README.md +0 -4
  36. package/templates/projects/python/pyproject.toml +0 -15
  37. package/CHANGELOG.md +0 -285
  38. package/LICENSE +0 -1283
  39. package/README.md +0 -315
  40. package/docs/ALIASES.md +0 -128
  41. package/docs/FEATURES.md +0 -166
  42. package/docs/FONTS.md +0 -147
  43. package/docs/INSTALL.md +0 -119
  44. package/docs/KEYS.md +0 -40
  45. package/docs/KEY_ROTATION.md +0 -219
  46. package/docs/LEGACY_ROADMAP.md +0 -142
  47. package/docs/NEOVIM_IDE_GUIDE.md +0 -52
  48. package/docs/README.md +0 -269
  49. package/docs/REPO_AUDIT.md +0 -23
  50. package/docs/SCREENSHOTS.md +0 -116
  51. package/docs/SECRETS.md +0 -76
  52. package/docs/SECURITY.md +0 -30
  53. package/docs/TESTING.md +0 -190
  54. package/docs/TOOLS.md +0 -146
  55. package/docs/TROUBLESHOOTING.md +0 -112
  56. package/docs/UTILS.md +0 -105
  57. package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
  58. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
  59. package/docs/adr/ADR-002-shell-performance.md +0 -121
  60. package/docs/adr/ADR-003-security-first.md +0 -140
  61. package/docs/adr/ADR-004-cli-architecture.md +0 -157
  62. package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
  63. package/docs/adr/ADR-006-shell-selection.md +0 -115
  64. package/docs/adr/README.md +0 -33
  65. package/docs/themes/README.md +0 -20
  66. package/dot_config/aider/aider.conf.yml +0 -32
  67. package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
  68. package/dot_config/ansible/ansible.cfg.tmpl +0 -11
  69. package/dot_config/atuin/config.toml +0 -23
  70. package/dot_config/bat/config +0 -8
  71. package/dot_config/brave-flags.conf.tmpl +0 -7
  72. package/dot_config/btop/btop.conf +0 -16
  73. package/dot_config/btop/themes/tokyonight.theme +0 -34
  74. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  75. package/dot_config/claude/mcp_servers.json +0 -49
  76. package/dot_config/clippy.toml +0 -55
  77. package/dot_config/containers/containers.conf +0 -14
  78. package/dot_config/curl/dot_curlrc +0 -18
  79. package/dot_config/dlv/config.yml +0 -39
  80. package/dot_config/docker/config.json.tmpl +0 -15
  81. package/dot_config/dotfiles/boot/README.md +0 -11
  82. package/dot_config/dotfiles/grub/README.md +0 -11
  83. package/dot_config/dotfiles/lock/README.md +0 -11
  84. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  85. package/dot_config/duf/duf.conf +0 -6
  86. package/dot_config/duti/defaults.duti +0 -5
  87. package/dot_config/emoji/emoji.txt +0 -34
  88. package/dot_config/fastfetch/config.jsonc +0 -28
  89. package/dot_config/firefox/user.js +0 -8
  90. package/dot_config/flatpak/flatpak.list +0 -4
  91. package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
  92. package/dot_config/gem/gemrc +0 -9
  93. package/dot_config/gh/config.yml +0 -12
  94. package/dot_config/ghostty/config.tmpl +0 -661
  95. package/dot_config/git/attributes +0 -12
  96. package/dot_config/git/config.tmpl +0 -77
  97. package/dot_config/git/ignore +0 -27
  98. package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
  99. package/dot_config/go/aliases.sh +0 -61
  100. package/dot_config/go/env.sh +0 -24
  101. package/dot_config/go/golangci.yml +0 -118
  102. package/dot_config/go/gopls.json +0 -30
  103. package/dot_config/goose/config.yaml +0 -29
  104. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
  105. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
  106. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
  107. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
  108. package/dot_config/htop/htoprc +0 -20
  109. package/dot_config/ice/README.md +0 -13
  110. package/dot_config/inputrc +0 -2
  111. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  112. package/dot_config/just/justfile +0 -104
  113. package/dot_config/k9s/config.yaml.tmpl +0 -65
  114. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  115. package/dot_config/karabiner/karabiner.json +0 -14
  116. package/dot_config/kitty/kitty.conf.tmpl +0 -517
  117. package/dot_config/lazydocker/config.yml +0 -186
  118. package/dot_config/lazygit/config.yml +0 -23
  119. package/dot_config/lsd/config.yaml +0 -19
  120. package/dot_config/mas/masapps.txt +0 -5
  121. package/dot_config/minikube/config.json +0 -13
  122. package/dot_config/mise/config.toml +0 -41
  123. package/dot_config/mongosh/mongoshrc.js +0 -67
  124. package/dot_config/mycli/myclirc +0 -67
  125. package/dot_config/nano/nanorc +0 -28
  126. package/dot_config/ncdu/config +0 -12
  127. package/dot_config/nvim/init.lua +0 -4
  128. package/dot_config/nvim/lazy-lock.json +0 -27
  129. package/dot_config/nvim/lua/config/autocmds.lua +0 -63
  130. package/dot_config/nvim/lua/config/keymaps.lua +0 -87
  131. package/dot_config/nvim/lua/config/lazy.lua +0 -34
  132. package/dot_config/nvim/lua/config/options.lua +0 -48
  133. package/dot_config/nvim/lua/plugins/coding.lua +0 -234
  134. package/dot_config/nvim/lua/plugins/dap.lua +0 -201
  135. package/dot_config/nvim/lua/plugins/editor.lua +0 -59
  136. package/dot_config/nvim/lua/plugins/git.lua +0 -9
  137. package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
  138. package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
  139. package/dot_config/nvim/lua/plugins/rust.lua +0 -33
  140. package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
  141. package/dot_config/nvim/lua/plugins/ui.lua +0 -537
  142. package/dot_config/nvim/snippets/all.lua +0 -9
  143. package/dot_config/nvim/snippets/python.lua +0 -16
  144. package/dot_config/pip/pip.conf.tmpl +0 -32
  145. package/dot_config/pypoetry/config.toml.tmpl +0 -6
  146. package/dot_config/pyrightconfig.json.tmpl +0 -5
  147. package/dot_config/raycast/README.md +0 -13
  148. package/dot_config/redis/redisclirc +0 -41
  149. package/dot_config/shell/00-container-detect.sh +0 -53
  150. package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
  151. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  152. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  153. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -10
  154. package/dot_config/shell/90-theme-switch.sh +0 -70
  155. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
  156. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
  157. package/dot_config/shell/Brewfile +0 -207
  158. package/dot_config/shell/Brewfile.cask +0 -92
  159. package/dot_config/shell/Brewfile.cli +0 -119
  160. package/dot_config/shell/README.md +0 -267
  161. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  162. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  163. package/dot_config/sops/dot_sops.yaml +0 -23
  164. package/dot_config/starship.toml.tmpl +0 -124
  165. package/dot_config/task/Taskfile.yml +0 -86
  166. package/dot_config/tflint/tflint.hcl.tmpl +0 -9
  167. package/dot_config/tmux/tmux.conf.tmpl +0 -181
  168. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  169. package/dot_config/vscode/extensions.txt +0 -11
  170. package/dot_config/vscode/settings.json.tmpl +0 -123
  171. package/dot_config/waybar/style.css +0 -8
  172. package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
  173. package/dot_config/wget/wgetrc +0 -12
  174. package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
  175. package/dot_config/yazi/yazi.toml +0 -40
  176. package/dot_config/zellij/config.kdl +0 -79
  177. package/dot_config/zsh/dot_zprofile +0 -13
  178. package/dot_config/zsh/dot_zshenv +0 -6
  179. package/dot_config/zsh/dot_zshrc.tmpl +0 -199
  180. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
  181. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  182. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  183. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
  184. package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
  185. package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
  186. package/dot_local/bin/executable_ai_core +0 -130
  187. package/dot_local/bin/executable_b64 +0 -59
  188. package/dot_local/bin/executable_dot +0 -178
  189. package/dot_local/bin/executable_dot_completion +0 -55
  190. package/dot_local/bin/executable_epoch +0 -62
  191. package/dot_local/bin/executable_extract +0 -108
  192. package/dot_local/bin/executable_git-ai-commit +0 -160
  193. package/dot_local/bin/executable_git-ai-diff +0 -154
  194. package/dot_local/bin/executable_hash +0 -123
  195. package/dot_local/bin/executable_hex +0 -79
  196. package/dot_local/bin/executable_ip +0 -37
  197. package/dot_local/bin/executable_jsonv +0 -54
  198. package/dot_local/bin/executable_jwt +0 -78
  199. package/dot_local/bin/executable_kill-port +0 -59
  200. package/dot_local/bin/executable_lorem +0 -103
  201. package/dot_local/bin/executable_regex +0 -96
  202. package/dot_local/bin/executable_tmux-sessionizer +0 -187
  203. package/dot_local/bin/executable_tour +0 -137
  204. package/dot_local/bin/executable_update +0 -108
  205. package/dot_local/bin/executable_uuid +0 -57
  206. package/dot_local/bin/executable_yamlv +0 -39
  207. package/dot_local/bin/executable_zig-install +0 -89
  208. package/dot_local/bin/voice_ops +0 -7
  209. package/dot_local/share/bash-completion/completions/dot +0 -54
  210. package/dot_local/share/zsh/completions/.keep +0 -0
  211. package/install.sh +0 -255
  212. package/scripts/ci/validate-ci-config.sh +0 -222
  213. package/scripts/demo/record.sh +0 -41
  214. package/scripts/diagnostics/benchmark.sh +0 -201
  215. package/scripts/diagnostics/doctor.sh +0 -115
  216. package/scripts/diagnostics/drift-dashboard.sh +0 -26
  217. package/scripts/diagnostics/health.sh +0 -356
  218. package/scripts/diagnostics/history-analysis.sh +0 -77
  219. package/scripts/diagnostics/security-score.sh +0 -392
  220. package/scripts/dot/commands/appearance.sh +0 -63
  221. package/scripts/dot/commands/core.sh +0 -130
  222. package/scripts/dot/commands/diagnostics.sh +0 -100
  223. package/scripts/dot/commands/meta.sh +0 -117
  224. package/scripts/dot/commands/restore.sh +0 -209
  225. package/scripts/dot/commands/secrets.sh +0 -81
  226. package/scripts/dot/commands/security.sh +0 -73
  227. package/scripts/dot/commands/tools.sh +0 -228
  228. package/scripts/dot/lib/utils.sh +0 -72
  229. package/scripts/fonts/install-nerd-fonts.sh +0 -59
  230. package/scripts/fonts/patch-fonts.sh +0 -34
  231. package/scripts/ops/chezmoi-apply.sh +0 -42
  232. package/scripts/ops/chezmoi-diff.sh +0 -14
  233. package/scripts/ops/chezmoi-remove.sh +0 -43
  234. package/scripts/ops/chezmoi-update.sh +0 -16
  235. package/scripts/ops/heal.sh +0 -466
  236. package/scripts/ops/health-check.sh +0 -380
  237. package/scripts/ops/rollback.sh +0 -531
  238. package/scripts/ops/teleport.sh +0 -32
  239. package/scripts/secrets/age-init.sh +0 -69
  240. package/scripts/secrets/create-secrets-file.sh +0 -44
  241. package/scripts/secrets/encrypt-ssh-key.sh +0 -42
  242. package/scripts/security/backup.sh +0 -17
  243. package/scripts/security/dns-doh.sh +0 -29
  244. package/scripts/security/encryption-check.sh +0 -39
  245. package/scripts/security/enforce-policies.sh +0 -339
  246. package/scripts/security/firewall.sh +0 -34
  247. package/scripts/security/lock-configs.sh +0 -57
  248. package/scripts/security/lock-screen.sh +0 -33
  249. package/scripts/security/manage-secrets.sh +0 -415
  250. package/scripts/security/telemetry-kill.sh +0 -28
  251. package/scripts/security/usb-safety.sh +0 -29
  252. package/scripts/tests/README.md +0 -241
  253. package/scripts/tests/benchmark.sh +0 -91
  254. package/scripts/tests/framework/assertions.sh +0 -283
  255. package/scripts/tests/framework/mocks.sh +0 -201
  256. package/scripts/tests/framework/test_runner.sh +0 -189
  257. package/scripts/tests/integration/test_install.sh +0 -237
  258. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  259. package/scripts/tests/performance/regression_check.sh +0 -73
  260. package/scripts/tests/performance/stress_test.sh +0 -65
  261. package/scripts/tests/test-docker.sh +0 -48
  262. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  263. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  264. package/scripts/tests/unit/test_backup.sh +0 -227
  265. package/scripts/tests/unit/test_case_functions.sh +0 -238
  266. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  267. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  268. package/scripts/tests/unit/test_encode64.sh +0 -67
  269. package/scripts/tests/unit/test_environment.sh +0 -78
  270. package/scripts/tests/unit/test_extract.sh +0 -163
  271. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  272. package/scripts/tests/unit/test_genpass.sh +0 -298
  273. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  274. package/scripts/tests/unit/test_installers.sh +0 -172
  275. package/scripts/tests/unit/test_keygen.sh +0 -68
  276. package/scripts/tests/unit/test_logging.sh +0 -96
  277. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  278. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  279. package/scripts/tests/unit/test_prependpath.sh +0 -66
  280. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  281. package/scripts/tests/unit/test_rd.sh +0 -230
  282. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  283. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  284. package/scripts/tests/unit/test_template_validation.sh +0 -238
  285. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  286. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  287. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  288. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  289. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  290. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  291. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  292. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  293. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  294. package/scripts/tests/unit/test_zipf.sh +0 -76
  295. package/scripts/theme/apply-gnome-theme.sh +0 -297
  296. package/scripts/theme/install-boot-logo.sh +0 -61
  297. package/scripts/theme/install-catppuccin-themes.sh +0 -346
  298. package/scripts/theme/install-cursors.sh +0 -24
  299. package/scripts/theme/install-file-icons.sh +0 -25
  300. package/scripts/theme/install-grub-theme.sh +0 -51
  301. package/scripts/theme/install-lock-icon.sh +0 -29
  302. package/scripts/theme/switch.sh +0 -250
  303. package/scripts/theme/wallpaper-rotate.sh +0 -82
  304. package/scripts/theme/wallpaper-sync.sh +0 -42
  305. package/scripts/tools/cmatrix.sh +0 -20
  306. package/scripts/tools/emoji-picker.sh +0 -45
  307. package/scripts/tools/figlet-banner.sh +0 -17
  308. package/scripts/tools/log-rotate.sh +0 -29
  309. package/scripts/tools/lolcat-wrap.sh +0 -18
  310. package/scripts/tools/pipes.sh +0 -47
  311. package/scripts/tuning/linux.sh +0 -175
  312. package/scripts/tuning/macos.sh +0 -46
  313. package/templates/projects/molecule/README.md +0 -7
  314. package/templates/projects/molecule/converge.yml +0 -7
  315. package/templates/projects/molecule/molecule.yml +0 -16
  316. package/templates/projects/packer/README.md +0 -15
  317. 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"