@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,68 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091,SC2034
3
- # Unit tests for keygen function
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
7
- source "$SCRIPT_DIR/../framework/assertions.sh"
8
-
9
- # Source the function
10
- FUNC_FILE="$REPO_ROOT/.chezmoitemplates/functions/keygen.sh"
11
- if [[ -f "$FUNC_FILE" ]]; then
12
- source "$FUNC_FILE"
13
- else
14
- echo "SKIP: keygen.sh not found at $FUNC_FILE"
15
- echo "RESULTS:0:0:0"
16
- exit 0
17
- fi
18
-
19
- echo "Testing keygen function..."
20
-
21
- # Test function exists
22
- test_start "keygen_function_exists"
23
- assert_true "type keygen &>/dev/null" "keygen function should exist"
24
-
25
- # Test no arguments shows usage
26
- test_start "keygen_no_args"
27
- if type keygen &>/dev/null; then
28
- output=$(keygen 2>&1 || true)
29
- # Should show usage or error - use direct check to avoid eval issues
30
- if [[ -n "$output" ]]; then
31
- ((TESTS_PASSED++)) || true
32
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: no args should produce output"
33
- else
34
- ((TESTS_FAILED++)) || true
35
- echo -e " ${RED}✗${NC} $CURRENT_TEST: no args should produce output"
36
- fi
37
- fi
38
-
39
- # Test help flag
40
- test_start "keygen_help_flag"
41
- if type keygen &>/dev/null; then
42
- output=$(keygen --help 2>&1 || keygen -h 2>&1 || echo "usage")
43
- assert_true "true" "help flag check completed"
44
- fi
45
-
46
- # Test invalid key type
47
- test_start "keygen_invalid_type"
48
- if type keygen &>/dev/null; then
49
- result=$(keygen --type invalid_type test_key 2>&1 || echo "error")
50
- # Check for error messages (case insensitive)
51
- if echo "$result" | grep -iqE "(error|invalid|unknown|usage)"; then
52
- ((TESTS_PASSED++))
53
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: invalid type shows error message"
54
- else
55
- ((TESTS_FAILED++))
56
- echo -e " ${RED}✗${NC} $CURRENT_TEST: should show error for invalid type"
57
- fi
58
- fi
59
-
60
- # Test output format (without actually creating keys)
61
- test_start "keygen_dry_run"
62
- if type keygen &>/dev/null; then
63
- # Just verify it doesn't crash with common args
64
- keygen --help 2>/dev/null || true
65
- assert_true "true" "keygen help does not crash"
66
- fi
67
-
68
- print_summary
@@ -1,96 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC1090,SC1091
3
- # Unit tests for install/lib/logging.sh
4
-
5
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
7
- source "$SCRIPT_DIR/../framework/assertions.sh"
8
-
9
- LOGGING_FILE="$REPO_ROOT/install/lib/logging.sh"
10
-
11
- echo "Testing logging library..."
12
-
13
- # Test: logging.sh exists
14
- test_start "logging_file_exists"
15
- assert_file_exists "$LOGGING_FILE" "logging.sh should exist"
16
-
17
- # Test: logging.sh has valid syntax
18
- test_start "logging_syntax"
19
- assert_exit_code 0 "bash -n '$LOGGING_FILE'"
20
-
21
- # Test: logging.sh has shebang
22
- test_start "logging_shebang"
23
- assert_file_contains "$LOGGING_FILE" "#!/usr/bin/env bash" "should have bash shebang"
24
-
25
- # Test: logging.sh has double-source guard
26
- test_start "logging_guard"
27
- assert_file_contains "$LOGGING_FILE" "_DOTFILES_LOGGING_LOADED" "should have double-source guard"
28
-
29
- # Test: log_info outputs to stdout with INFO prefix
30
- test_start "log_info_output"
31
- output=$(bash -c 'source "'"$LOGGING_FILE"'"; log_info "test message"' 2>&1)
32
- if [[ "$output" == *"[INFO]"* && "$output" == *"test message"* ]]; then
33
- ((TESTS_PASSED++)) || true
34
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: log_info shows INFO prefix"
35
- else
36
- ((TESTS_FAILED++)) || true
37
- echo -e " ${RED}✗${NC} $CURRENT_TEST: log_info should show INFO prefix"
38
- echo -e " Output: $output"
39
- fi
40
-
41
- # Test: log_warn outputs with WARN prefix to stderr
42
- test_start "log_warn_output"
43
- output=$(bash -c 'source "'"$LOGGING_FILE"'"; log_warn "warn msg"' 2>&1)
44
- if [[ "$output" == *"[WARN]"* && "$output" == *"warn msg"* ]]; then
45
- ((TESTS_PASSED++)) || true
46
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: log_warn shows WARN prefix"
47
- else
48
- ((TESTS_FAILED++)) || true
49
- echo -e " ${RED}✗${NC} $CURRENT_TEST: log_warn should show WARN prefix"
50
- echo -e " Output: $output"
51
- fi
52
-
53
- # Test: log_error outputs with ERROR prefix to stderr
54
- test_start "log_error_output"
55
- output=$(bash -c 'source "'"$LOGGING_FILE"'"; log_error "err msg"' 2>&1)
56
- if [[ "$output" == *"[ERROR]"* && "$output" == *"err msg"* ]]; then
57
- ((TESTS_PASSED++)) || true
58
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: log_error shows ERROR prefix"
59
- else
60
- ((TESTS_FAILED++)) || true
61
- echo -e " ${RED}✗${NC} $CURRENT_TEST: log_error should show ERROR prefix"
62
- echo -e " Output: $output"
63
- fi
64
-
65
- # Test: die exits with code 1
66
- test_start "die_exit_code"
67
- assert_exit_code 1 "bash -c 'source \"$LOGGING_FILE\"; die \"fatal\"'"
68
-
69
- # Test: die shows ERROR prefix
70
- test_start "die_error_output"
71
- output=$(bash -c 'source "'"$LOGGING_FILE"'"; die "fatal error"' 2>&1) || true
72
- if [[ "$output" == *"[ERROR]"* && "$output" == *"fatal error"* ]]; then
73
- ((TESTS_PASSED++)) || true
74
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: die shows ERROR prefix"
75
- else
76
- ((TESTS_FAILED++)) || true
77
- echo -e " ${RED}✗${NC} $CURRENT_TEST: die should show ERROR prefix"
78
- echo -e " Output: $output"
79
- fi
80
-
81
- # Test: double-sourcing is idempotent
82
- test_start "logging_idempotent"
83
- output=$(bash -c '
84
- source "'"$LOGGING_FILE"'"
85
- source "'"$LOGGING_FILE"'"
86
- log_info "still works"
87
- ' 2>&1)
88
- if [[ "$output" == *"still works"* ]]; then
89
- ((TESTS_PASSED++)) || true
90
- echo -e " ${GREEN}✓${NC} $CURRENT_TEST: double-sourcing is safe"
91
- else
92
- ((TESTS_FAILED++)) || true
93
- echo -e " ${RED}✗${NC} $CURRENT_TEST: double-sourcing should be safe"
94
- fi
95
-
96
- print_summary
@@ -1,388 +0,0 @@
1
- #!/usr/bin/env bash
2
- # shellcheck disable=SC2016
3
- # SC2016: Single quotes are intentional for mock data containing literal $variables
4
- # Comprehensive OS Detection Tests
5
- # Achieves 100% line and branch coverage for os_detection.sh
6
-
7
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
- source "$SCRIPT_DIR/../framework/assertions.sh"
9
- source "$SCRIPT_DIR/../framework/mocks.sh"
10
-
11
- # Source the function being tested
12
- source "$REPO_ROOT/install/lib/os_detection.sh"
13
-
14
- echo "Testing OS detection comprehensive coverage..."
15
-
16
- # Test Darwin/macOS detection
17
- test_start "detect_os_macos"
18
- mock_init
19
- mock_command "uname" "Darwin" 0
20
- mock_env "OS" ""
21
- mock_env "ARCH" ""
22
- mock_env "target_os" ""
23
- detect_os
24
- assert_equals "macos" "$target_os" "should detect macOS"
25
- assert_equals "Darwin" "$OS" "should set OS to Darwin"
26
- mock_cleanup
27
-
28
- # Test Linux with Microsoft/WSL detection via /proc/version
29
- test_start "detect_os_wsl2_microsoft"
30
- mock_init
31
- mock_command "uname" "Linux" 0
32
- mock_file "microsoft linux subsystem" "/proc/version"
33
- mock_env "OS" ""
34
- mock_env "ARCH" ""
35
- mock_env "target_os" ""
36
- detect_os
37
- assert_equals "wsl2" "$target_os" "should detect WSL2 with Microsoft"
38
- mock_cleanup
39
-
40
- # Test Linux with WSL detection via /proc/version
41
- test_start "detect_os_wsl2_wsl_keyword"
42
- mock_init
43
- mock_command "uname" "Linux" 0
44
- mock_file "WSL2 kernel" "/proc/version"
45
- mock_env "OS" ""
46
- mock_env "ARCH" ""
47
- mock_env "target_os" ""
48
- detect_os
49
- assert_equals "wsl2" "$target_os" "should detect WSL2 with WSL keyword"
50
- mock_cleanup
51
-
52
- # Test Ubuntu detection via os-release
53
- test_start "detect_os_ubuntu"
54
- mock_init
55
- mock_command "uname" "Linux" 0
56
- mock_file "regular linux kernel" "/proc/version"
57
- mock_file 'ID=ubuntu
58
- NAME="Ubuntu"' "/etc/os-release"
59
- mock_env "OS" ""
60
- mock_env "ARCH" ""
61
- mock_env "target_os" ""
62
- detect_os
63
- assert_equals "debian" "$target_os" "should detect Ubuntu as debian"
64
- mock_cleanup
65
-
66
- # Test Debian detection via os-release
67
- test_start "detect_os_debian"
68
- mock_init
69
- mock_command "uname" "Linux" 0
70
- mock_file "regular linux kernel" "/proc/version"
71
- mock_file 'ID=debian
72
- NAME="Debian"' "/etc/os-release"
73
- mock_env "OS" ""
74
- mock_env "ARCH" ""
75
- mock_env "target_os" ""
76
- detect_os
77
- assert_equals "debian" "$target_os" "should detect Debian"
78
- mock_cleanup
79
-
80
- # Test Pop!_OS detection via os-release
81
- test_start "detect_os_pop"
82
- mock_init
83
- mock_command "uname" "Linux" 0
84
- mock_file "regular linux kernel" "/proc/version"
85
- mock_file 'ID=pop
86
- NAME="Pop!_OS"' "/etc/os-release"
87
- mock_env "OS" ""
88
- mock_env "ARCH" ""
89
- mock_env "target_os" ""
90
- detect_os
91
- assert_equals "debian" "$target_os" "should detect Pop!_OS as debian"
92
- mock_cleanup
93
-
94
- # Test Linux Mint detection via os-release
95
- test_start "detect_os_linuxmint"
96
- mock_init
97
- mock_command "uname" "Linux" 0
98
- mock_file "regular linux kernel" "/proc/version"
99
- mock_file 'ID=linuxmint
100
- NAME="Linux Mint"' "/etc/os-release"
101
- mock_env "OS" ""
102
- mock_env "ARCH" ""
103
- mock_env "target_os" ""
104
- detect_os
105
- assert_equals "debian" "$target_os" "should detect Linux Mint as debian"
106
- mock_cleanup
107
-
108
- # Test Elementary OS detection via os-release
109
- test_start "detect_os_elementary"
110
- mock_init
111
- mock_command "uname" "Linux" 0
112
- mock_file "regular linux kernel" "/proc/version"
113
- mock_file 'ID=elementary
114
- NAME="elementary OS"' "/etc/os-release"
115
- mock_env "OS" ""
116
- mock_env "ARCH" ""
117
- mock_env "target_os" ""
118
- detect_os
119
- assert_equals "debian" "$target_os" "should detect Elementary as debian"
120
- mock_cleanup
121
-
122
- # Test Fedora detection via os-release
123
- test_start "detect_os_fedora"
124
- mock_init
125
- mock_command "uname" "Linux" 0
126
- mock_file "regular linux kernel" "/proc/version"
127
- mock_file 'ID=fedora
128
- NAME="Fedora"' "/etc/os-release"
129
- mock_env "OS" ""
130
- mock_env "ARCH" ""
131
- mock_env "target_os" ""
132
- detect_os
133
- assert_equals "fedora" "$target_os" "should detect Fedora"
134
- mock_cleanup
135
-
136
- # Test RHEL detection via os-release
137
- test_start "detect_os_rhel"
138
- mock_init
139
- mock_command "uname" "Linux" 0
140
- mock_file "regular linux kernel" "/proc/version"
141
- mock_file 'ID=rhel
142
- NAME="Red Hat Enterprise Linux"' "/etc/os-release"
143
- mock_env "OS" ""
144
- mock_env "ARCH" ""
145
- mock_env "target_os" ""
146
- detect_os
147
- assert_equals "fedora" "$target_os" "should detect RHEL as fedora"
148
- mock_cleanup
149
-
150
- # Test CentOS detection via os-release
151
- test_start "detect_os_centos"
152
- mock_init
153
- mock_command "uname" "Linux" 0
154
- mock_file "regular linux kernel" "/proc/version"
155
- mock_file 'ID=centos
156
- NAME="CentOS"' "/etc/os-release"
157
- mock_env "OS" ""
158
- mock_env "ARCH" ""
159
- mock_env "target_os" ""
160
- detect_os
161
- assert_equals "fedora" "$target_os" "should detect CentOS as fedora"
162
- mock_cleanup
163
-
164
- # Test Rocky Linux detection via os-release
165
- test_start "detect_os_rocky"
166
- mock_init
167
- mock_command "uname" "Linux" 0
168
- mock_file "regular linux kernel" "/proc/version"
169
- mock_file 'ID=rocky
170
- NAME="Rocky Linux"' "/etc/os-release"
171
- mock_env "OS" ""
172
- mock_env "ARCH" ""
173
- mock_env "target_os" ""
174
- detect_os
175
- assert_equals "fedora" "$target_os" "should detect Rocky as fedora"
176
- mock_cleanup
177
-
178
- # Test AlmaLinux detection via os-release
179
- test_start "detect_os_alma"
180
- mock_init
181
- mock_command "uname" "Linux" 0
182
- mock_file "regular linux kernel" "/proc/version"
183
- mock_file 'ID=alma
184
- NAME="AlmaLinux"' "/etc/os-release"
185
- mock_env "OS" ""
186
- mock_env "ARCH" ""
187
- mock_env "target_os" ""
188
- detect_os
189
- assert_equals "fedora" "$target_os" "should detect AlmaLinux as fedora"
190
- mock_cleanup
191
-
192
- # Test Arch Linux detection via os-release
193
- test_start "detect_os_arch"
194
- mock_init
195
- mock_command "uname" "Linux" 0
196
- mock_file "regular linux kernel" "/proc/version"
197
- mock_file 'ID=arch
198
- NAME="Arch Linux"' "/etc/os-release"
199
- mock_env "OS" ""
200
- mock_env "ARCH" ""
201
- mock_env "target_os" ""
202
- detect_os
203
- assert_equals "arch" "$target_os" "should detect Arch Linux"
204
- mock_cleanup
205
-
206
- # Test Manjaro detection via os-release
207
- test_start "detect_os_manjaro"
208
- mock_init
209
- mock_command "uname" "Linux" 0
210
- mock_file "regular linux kernel" "/proc/version"
211
- mock_file 'ID=manjaro
212
- NAME="Manjaro"' "/etc/os-release"
213
- mock_env "OS" ""
214
- mock_env "ARCH" ""
215
- mock_env "target_os" ""
216
- detect_os
217
- assert_equals "arch" "$target_os" "should detect Manjaro as arch"
218
- mock_cleanup
219
-
220
- # Test EndeavourOS detection via os-release
221
- test_start "detect_os_endeavouros"
222
- mock_init
223
- mock_command "uname" "Linux" 0
224
- mock_file "regular linux kernel" "/proc/version"
225
- mock_file 'ID=endeavouros
226
- NAME="EndeavourOS"' "/etc/os-release"
227
- mock_env "OS" ""
228
- mock_env "ARCH" ""
229
- mock_env "target_os" ""
230
- detect_os
231
- assert_equals "arch" "$target_os" "should detect EndeavourOS as arch"
232
- mock_cleanup
233
-
234
- # Test unknown Linux distribution via os-release
235
- test_start "detect_os_unknown_linux_distro"
236
- mock_init
237
- mock_command "uname" "Linux" 0
238
- mock_file "regular linux kernel" "/proc/version"
239
- mock_file 'ID=unknown-distro
240
- NAME="Unknown Distribution"' "/etc/os-release"
241
- mock_env "OS" ""
242
- mock_env "ARCH" ""
243
- mock_env "target_os" ""
244
- detect_os
245
- assert_equals "linux" "$target_os" "should detect unknown distro as linux"
246
- mock_cleanup
247
-
248
- # Test Linux without os-release file
249
- test_start "detect_os_linux_no_os_release"
250
- mock_init
251
- mock_command "uname" "Linux" 0
252
- mock_file "regular linux kernel" "/proc/version"
253
- # Don't create /etc/os-release file
254
- mock_env "OS" ""
255
- mock_env "ARCH" ""
256
- mock_env "target_os" ""
257
- detect_os
258
- assert_equals "linux" "$target_os" "should detect linux without os-release"
259
- mock_cleanup
260
-
261
- # Test empty ID field in os-release
262
- test_start "detect_os_empty_id_in_os_release"
263
- mock_init
264
- mock_command "uname" "Linux" 0
265
- mock_file "regular linux kernel" "/proc/version"
266
- mock_file 'NAME="Some Distribution"' "/etc/os-release"
267
- mock_env "OS" ""
268
- mock_env "ARCH" ""
269
- mock_env "target_os" ""
270
- detect_os
271
- assert_equals "linux" "$target_os" "should default to linux with empty ID"
272
- mock_cleanup
273
-
274
- # Test unknown operating system (not Darwin or Linux)
275
- test_start "detect_os_unknown_os"
276
- mock_init
277
- mock_command "uname" "FreeBSD" 0
278
- mock_env "OS" ""
279
- mock_env "ARCH" ""
280
- mock_env "target_os" ""
281
- detect_os
282
- assert_equals "unknown" "$target_os" "should detect unknown OS"
283
- assert_equals "FreeBSD" "$OS" "should set OS to FreeBSD"
284
- mock_cleanup
285
-
286
- # Test architecture detection
287
- test_start "detect_os_sets_arch"
288
- mock_init
289
- mock_command "uname" -e 'if [ "$1" = "-s" ]; then echo "Linux"; elif [ "$1" = "-m" ]; then echo "x86_64"; fi' 0
290
- mock_file "regular linux kernel" "/proc/version"
291
- mock_file 'ID=ubuntu' "/etc/os-release"
292
- mock_env "OS" ""
293
- mock_env "ARCH" ""
294
- mock_env "target_os" ""
295
- detect_os
296
- assert_equals "x86_64" "$ARCH" "should set ARCH variable"
297
- mock_cleanup
298
-
299
- # Test is_macos function when target_os is macos
300
- test_start "is_macos_true"
301
- target_os="macos"
302
- assert_true "is_macos" "should return true when target_os is macos"
303
-
304
- # Test is_macos function when target_os is not macos
305
- test_start "is_macos_false"
306
- target_os="linux"
307
- assert_false "is_macos" "should return false when target_os is not macos"
308
-
309
- # Test is_linux function when OS is Linux
310
- test_start "is_linux_true"
311
- OS="Linux"
312
- assert_true "is_linux" "should return true when OS is Linux"
313
-
314
- # Test is_linux function when OS is not Linux
315
- test_start "is_linux_false"
316
- OS="Darwin"
317
- assert_false "is_linux" "should return false when OS is not Linux"
318
-
319
- # Test is_wsl function when target_os is wsl2
320
- test_start "is_wsl_true"
321
- target_os="wsl2"
322
- assert_true "is_wsl" "should return true when target_os is wsl2"
323
-
324
- # Test is_wsl function when target_os is not wsl2
325
- test_start "is_wsl_false"
326
- target_os="linux"
327
- assert_false "is_wsl" "should return false when target_os is not wsl2"
328
-
329
- # Test is_debian function when target_os is debian
330
- test_start "is_debian_true_debian"
331
- target_os="debian"
332
- assert_true "is_debian" "should return true when target_os is debian"
333
-
334
- # Test is_debian function when target_os is wsl2 (also considered debian)
335
- test_start "is_debian_true_wsl2"
336
- target_os="wsl2"
337
- assert_true "is_debian" "should return true when target_os is wsl2"
338
-
339
- # Test is_debian function when target_os is not debian or wsl2
340
- test_start "is_debian_false"
341
- target_os="fedora"
342
- assert_false "is_debian" "should return false when target_os is fedora"
343
-
344
- # Test is_fedora function when target_os is fedora
345
- test_start "is_fedora_true"
346
- target_os="fedora"
347
- assert_true "is_fedora" "should return true when target_os is fedora"
348
-
349
- # Test is_fedora function when target_os is not fedora
350
- test_start "is_fedora_false"
351
- target_os="debian"
352
- assert_false "is_fedora" "should return false when target_os is not fedora"
353
-
354
- # Test is_arch function when target_os is arch
355
- test_start "is_arch_true"
356
- target_os="arch"
357
- assert_true "is_arch" "should return true when target_os is arch"
358
-
359
- # Test is_arch function when target_os is not arch
360
- test_start "is_arch_false"
361
- target_os="debian"
362
- assert_false "is_arch" "should return false when target_os is not arch"
363
-
364
- # Test print_os_info function
365
- test_start "print_os_info_output"
366
- OS="Linux"
367
- ARCH="x86_64"
368
- target_os="debian"
369
- output=$(print_os_info)
370
- assert_output_contains "OS: Linux" "echo '$output'"
371
- assert_output_contains "Arch: x86_64" "echo '$output'"
372
- assert_output_contains "Target: debian" "echo '$output'"
373
-
374
- # Test variable export
375
- test_start "detect_os_exports_variables"
376
- mock_init
377
- mock_command "uname" "Linux" 0
378
- mock_file "regular linux kernel" "/proc/version"
379
- mock_file 'ID=ubuntu' "/etc/os-release"
380
- unset OS ARCH target_os
381
- detect_os
382
- # These should be set and exported after detect_os
383
- assert_not_empty "$OS" "OS should be set"
384
- assert_not_empty "$ARCH" "ARCH should be set"
385
- assert_not_empty "$target_os" "target_os should be set"
386
- mock_cleanup
387
-
388
- echo "OS detection comprehensive coverage tests completed."