继续按 align-linuxcnc 约束:补 reader 裸项错误源码覆盖,测试通过

This commit is contained in:
cnc
2026-06-02 18:43:54 +08:00
parent 318220b766
commit 3435c3556a
12 changed files with 55 additions and 14 deletions

View File

@@ -564,6 +564,7 @@ fi
# read_real_value() requires a real value after '='.
parameter_setting_error_cases=(
"linuxcnc_parameter_missing_equal_error|Equal sign missing in parameter setting"
"linuxcnc_midline_parameter_missing_equal_error|Equal sign missing in parameter setting"
"linuxcnc_parameter_missing_value_error|No characters found in reading real value"
)
for case in "${parameter_setting_error_cases[@]}"; do
@@ -575,7 +576,7 @@ for case in "${parameter_setting_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_parameter(), read_parameter_setting(), read_integer_value(),
@@ -598,7 +599,7 @@ for case in "${parameter_reader_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
if CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_negative_sqrt_error.ngc \
@@ -670,6 +671,8 @@ unary_unknown_word_error_cases=(
"linuxcnc_unary_unknown_s_word_error|Unknown word starting with s"
"linuxcnc_unary_unknown_t_word_error|Unknown word starting with t"
"linuxcnc_unary_unknown_default_word_error|Unknown word where unary operation could be"
"linuxcnc_top_level_bare_unary_error|Unknown word where unary operation could be"
"linuxcnc_midline_bare_unary_error|Unknown word where unary operation could be"
)
for case in "${unary_unknown_word_error_cases[@]}"; do
fixture=${case%%|*}
@@ -680,7 +683,7 @@ for case in "${unary_unknown_word_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_operation() rejects unknown binary operation names by prefix,
@@ -707,7 +710,7 @@ for case in "${binary_operation_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_f()/read_g()/read_h()/read_l()/read_m()/read_s()/read_t()
@@ -730,7 +733,7 @@ for case in "${negative_word_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_g()/read_m() validate numeric range, known code tables from
@@ -752,7 +755,7 @@ for case in "${gm_reader_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc
# read_dollar() rejects repeated spindle-choice words while filling a block.
@@ -768,12 +771,20 @@ grep -Fq "Multiple spindle choice (\$) words on one line" \
# read_items() only consumes a leading N word before item dispatch;
# read_one_item() then uses the default reader table from interp_array.cc
# and rejects unknown item-start characters, including middle-of-line or
# comment-prefixed N/O words.
# comment-prefixed N/O words, bracket expressions, naked numbers, and
# non-leading ATAN argument slashes.
bad_character_error_cases=(
"linuxcnc_bad_character_bang_error|Bad character '!' used"
"linuxcnc_bad_character_middle_n_word_error|Bad character 'n' used"
"linuxcnc_comment_prefixed_n_word_error|Bad character 'n' used"
"linuxcnc_comment_prefixed_oword_error|Bad character 'o' used"
"linuxcnc_bad_character_top_left_bracket_error|Bad character '[' used"
"linuxcnc_bad_character_top_right_bracket_error|Bad character ']' used"
"linuxcnc_bad_character_midline_left_bracket_error|Bad character '[' used"
"linuxcnc_bad_character_midline_right_bracket_error|Bad character ']' used"
"linuxcnc_bad_character_top_number_error|Bad character '1' used"
"linuxcnc_top_level_bare_atan_error|Bad character '/' used"
"linuxcnc_midline_bare_atan_error|Bad character '/' used"
)
for case in "${bad_character_error_cases[@]}"; do
fixture=${case%%|*}
@@ -784,7 +795,7 @@ for case in "${bad_character_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_check.cc
# check_m_codes() rejects blocks with more than MAX_EMS M-codes.
@@ -832,7 +843,7 @@ for case in "${multiple_word_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
"$build_dir/linuxcnc_rs274_source_dump" tests/gcode/linuxcnc_value_returned.ngc \
@@ -898,7 +909,7 @@ for case in "${oword_reader_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_o_word.cc
# convert_control_functions() rejects unmatched, duplicate, and
@@ -932,7 +943,7 @@ for case in "${oword_execution_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_read.cc read_text()
# rejects EOF without the matching percent/program end and overlong file
@@ -952,7 +963,7 @@ for case in "${read_text_error_cases[@]}"; do
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -q "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_source_$fixture.err"
done
long_line_fixture="$output_dir/linuxcnc_command_too_long_error.ngc"
printf 'G1 X' > "$long_line_fixture"