@@ -196,6 +196,82 @@ assert_eq "default cmd count" "CHROOT_CMD_COUNT=2" "$(echo "$_out" | grep '^CHRO
196196assert_eq " default cmd[0]" " CHROOT_CMD_0=/usr/bin/pacman" " $( echo " $_out " | grep ' ^CHROOT_CMD_0=' ) "
197197assert_eq " default cmd[1]" " CHROOT_CMD_1=-Syu" " $( echo " $_out " | grep ' ^CHROOT_CMD_1=' ) "
198198
199+ # ── Word splitting limitation: args with spaces ────────────
200+
201+ section " Word splitting limitation (space in args)"
202+
203+ CONFIG_FILE=" ${TESTDIR} /word_split.conf"
204+ cat > " $CONFIG_FILE " << 'EOF '
205+ COMMAND=/usr/bin/pacman -S nvidia driver
206+ EOF
207+
208+ _TEST_SCRIPT_WS=" ${TESTDIR} /atomic-upgrade-word-split"
209+ sed \
210+ -e ' s|^\(export ATOMIC_UPGRADE=1\)$|\1\nCONFIG_FILE="${CONFIG_FILE:-/etc/atomic.conf}"|' \
211+ -e ' s/^\(\[\[ \$EUID -eq 0 \]\]\)/# \1/' \
212+ -e ' /^# Verify required variables are set$/i\
213+ if [[ "${ATOMIC_EXIT_AFTER_PARSE:-}" == "1" ]]; then\
214+ echo "PARSE_OK"\
215+ echo "CHROOT_CMD_COUNT=${#CHROOT_CMD[@]}"\
216+ for i in "${!CHROOT_CMD[@]}"; do\
217+ echo "CHROOT_CMD_${i}=${CHROOT_CMD[$i]}"\
218+ done\
219+ exit 0\
220+ fi\
221+ ' \
222+ " $SCRIPT " > " $_TEST_SCRIPT_WS "
223+ chmod +x " $_TEST_SCRIPT_WS "
224+
225+ run_cmd env CONFIG_FILE=" $CONFIG_FILE " ATOMIC_EXIT_AFTER_PARSE=1 bash " $_TEST_SCRIPT_WS "
226+ assert_eq " word split: PARSE_OK" " 0" " $_rc "
227+ assert_eq " word split: count is 4" " CHROOT_CMD_COUNT=4" " $( echo " $_out " | grep ' ^CHROOT_CMD_COUNT=' ) "
228+ assert_eq " word split: arg[2]" " CHROOT_CMD_2=nvidia" " $( echo " $_out " | grep ' ^CHROOT_CMD_2=' ) "
229+ assert_eq " word split: arg[3]" " CHROOT_CMD_3=driver" " $( echo " $_out " | grep ' ^CHROOT_CMD_3=' ) "
230+
231+ rm -f " $_TEST_SCRIPT_WS "
232+
233+ # ── CLI -- COMMAND priority over config COMMAND= ────────────
234+
235+ section " CLI -- COMMAND priority over config COMMAND="
236+
237+ CONFIG_FILE=" ${TESTDIR} /cli_priority.conf"
238+ cat > " $CONFIG_FILE " << 'EOF '
239+ COMMAND=/usr/bin/pacman -Syu
240+ EOF
241+
242+ _TEST_SCRIPT_CLI=" ${TESTDIR} /atomic-upgrade-cli-priority"
243+ sed \
244+ -e ' s|^\(export ATOMIC_UPGRADE=1\)$|\1\nCONFIG_FILE="${CONFIG_FILE:-/etc/atomic.conf}"|' \
245+ -e ' s/^\(\[\[ \$EUID -eq 0 \]\]\)/# \1/' \
246+ -e ' /^# Verify required variables are set$/i\
247+ if [[ "${ATOMIC_EXIT_AFTER_PARSE:-}" == "1" ]]; then\
248+ echo "PARSE_OK"\
249+ echo "DRY_RUN=${DRY_RUN}"\
250+ echo "CUSTOM_TAG=${CUSTOM_TAG}"\
251+ echo "NO_GC=${NO_GC}"\
252+ echo "SEPARATE_HOME=${SEPARATE_HOME}"\
253+ echo "COPY_FILES=${COPY_FILES}"\
254+ echo "CHROOT_CMD_COUNT=${#CHROOT_CMD[@]}"\
255+ for i in "${!CHROOT_CMD[@]}"; do\
256+ echo "CHROOT_CMD_${i}=${CHROOT_CMD[$i]}"\
257+ done\
258+ echo "COMMAND_FROM_CONFIG=${COMMAND:-}"\
259+ exit 0\
260+ fi\
261+ ' \
262+ " $SCRIPT " > " $_TEST_SCRIPT_CLI "
263+ chmod +x " $_TEST_SCRIPT_CLI "
264+
265+ run_cmd env CONFIG_FILE=" $CONFIG_FILE " ATOMIC_EXIT_AFTER_PARSE=1 bash " $_TEST_SCRIPT_CLI " -- /usr/bin/pacman -S nvidia
266+ assert_eq " CLI priority: PARSE_OK" " 0" " $_rc "
267+ assert_contains " CLI priority: uses CLI args" " CHROOT_CMD_0=/usr/bin/pacman" " $_out "
268+ assert_contains " CLI priority: CLI arg[1]" " CHROOT_CMD_1=-S" " $_out "
269+ assert_contains " CLI priority: CLI arg[2]" " CHROOT_CMD_2=nvidia" " $_out "
270+ assert_eq " CLI priority: count is 3" " CHROOT_CMD_COUNT=3" " $( echo " $_out " | grep ' ^CHROOT_CMD_COUNT=' ) "
271+ assert_contains " CLI priority: COMMAND loaded from config" " COMMAND_FROM_CONFIG=/usr/bin/pacman -Syu" " $_out "
272+
273+ rm -f " $_TEST_SCRIPT_CLI "
274+
199275# ── GEN_ID format validation ────────────────────────────────
200276
201277section " GEN_ID format validation"
0 commit comments