| 
									
										
										
										
											2024-05-04 00:49:27 +09:00
										 |  |  | #!/bin/sh
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for i in $@; do :; done | 
					
						
							|  |  |  | script="$i" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-15 23:48:07 +09:00
										 |  |  | escape_regex() { | 
					
						
							|  |  |  | 	local str="$1" | 
					
						
							|  |  |  | 	## escape [, ], {, (, \, $, *, . ^, ), } | 
					
						
							|  |  |  | 	printf '%s\n' "$str" | sed -r -e 's/[][{(\$*.^)}]/\\&/g' | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-04 00:49:27 +09:00
										 |  |  | run_partfile() { | 
					
						
							|  |  |  | 	l_cmd=""; | 
					
						
							|  |  |  | 	l_nargs=$# | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	while [ $# -gt 3 ] | 
					
						
							|  |  |  | 	do | 
					
						
							|  |  |  | 		l_cmd="$l_cmd $1" | 
					
						
							|  |  |  | 		shift | 
					
						
							|  |  |  | 	done | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	l_script="$1" | 
					
						
							|  |  |  | 	shift ## skip the original script. | 
					
						
							|  |  |  | 	l_partno="$1" | 
					
						
							|  |  |  | 	shift ## partno | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	l_partfile="$1" | 
					
						
							|  |  |  | 	l_cmd="$l_cmd $l_partfile" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-15 23:48:07 +09:00
										 |  |  |         ## old greps don't support -o. use sed to mimic it. | 
					
						
							|  |  |  | 	##l_expected_errinfo=$(grep -n -o -E "##ERROR: .+" "$l_partfile" 2>/dev/null) | 
					
						
							|  |  |  |         l_expected_errinfo=$(grep -n -E "##ERROR: .+" "$l_partfile" 2>/dev/null | sed -r -n 's/^([0-9]*):.*(##ERROR: .*)/\1:\2/p') | 
					
						
							| 
									
										
										
										
											2024-05-04 00:49:27 +09:00
										 |  |  | 	[ -z "$l_expected_errinfo" ] && { | 
					
						
							|  |  |  | 		echo "ERROR: INVALID TESTER - $l_script($l_partno) contains no ERROR information" | 
					
						
							|  |  |  | 		return 1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	l_expected_errline=$(echo $l_expected_errinfo | cut -d: -f1) | 
					
						
							|  |  |  | 	l_xlen=$(echo $l_expected_errline | wc -c) | 
					
						
							|  |  |  | 	l_xlen=$(expr $l_xlen + 10) | 
					
						
							|  |  |  | 	l_expected_errmsg=$(echo $l_expected_errinfo | cut -c${l_xlen}-) | 
					
						
							|  |  |  | 	l_output=`$l_cmd 2>&1` | 
					
						
							|  |  |  | 	## the regular expression is not escaped properly. the error information must not | 
					
						
							| 
									
										
										
										
											2025-07-15 23:48:07 +09:00
										 |  |  | 	## include special regex characters to avoid problems. | 
					
						
							|  |  |  | 	l_expected_errmsg_esc=$(escape_regex "${l_expected_errmsg}") | 
					
						
							|  |  |  | 	echo "$l_output" | grep -E "ERROR: .+ LINE ${l_expected_errline} .+ FILE ${l_partfile} - ${l_expected_errmsg_esc}" >/dev/null 2>&1 || { | 
					
						
							| 
									
										
										
										
											2024-05-04 00:49:27 +09:00
										 |  |  | 		echo "ERROR: error not raised at line $l_expected_errline - $l_script($l_partno) - $l_output" | 
					
						
							|  |  |  | 		return 1 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	echo "OK" | 
					
						
							|  |  |  | 	return 0 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ever_failed=0 | 
					
						
							| 
									
										
										
										
											2025-07-15 23:48:07 +09:00
										 |  |  | ## [NOTE] | 
					
						
							|  |  |  | ##   some old mktemp(e.g mktemp 1.5 on rhel 2.1) always required the template.  | 
					
						
							|  |  |  | ##   these days, newer ones don't need it. | 
					
						
							|  |  |  | partfile=`mktemp tmp.XXXXXXXXXX` | 
					
						
							| 
									
										
										
										
											2024-05-04 00:49:27 +09:00
										 |  |  | partno=0 | 
					
						
							|  |  |  | partlines=0 | 
					
						
							|  |  |  | > "$partfile" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## dash behaves differently for read -r. | 
					
						
							|  |  |  | ## while \n is read in literally by bash or other shells, dash converts it to a new-line | 
					
						
							|  |  |  | while IFS= read -r line | 
					
						
							|  |  |  | do | 
					
						
							|  |  |  | 	if [ "$line" = "---" ] | 
					
						
							|  |  |  | 	then | 
					
						
							|  |  |  | 		[ $partlines -gt 0 ] && { | 
					
						
							|  |  |  | 			run_partfile "$@" "$partno" "$partfile" || ever_failed=1 | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		partno=`expr $partno + 1` | 
					
						
							|  |  |  | 		partlines=0 | 
					
						
							|  |  |  | 		> "$partfile" | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		echo "$line" >> "$partfile" | 
					
						
							|  |  |  | 		partlines=`expr $partlines + 1` | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | done < "$script" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ $partlines -gt 0 ] && { | 
					
						
							|  |  |  | 	run_partfile "$@" "$partno" "$partfile" || ever_failed=1 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rm -f "$partfile" | 
					
						
							|  |  |  | exit $ever_failed | 
					
						
							|  |  |  | 
 |