mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
binutils/testsuite/
* lib/binutils-common.exp (regexp_diff): New procedure. * lib/utils-lib.exp (regexp_diff): Delete. gas/testsuite/ * lib/gas-defs.exp (regexp_diff): Delete. (run_dump_test): Remove final "" argument in call to regexp_diff. (run_list_test): Likewise. (run_list_test_stdin): Likewise. * gas/all/gas.exp (test_cond): Likewise. * gas/elf/elf.exp (run_elf_list_test): Likewise. * gas/m68k/all.exp: Likewise. * gas/mep/complex-relocs.exp (regexp_test): Likewise. * gas/mt/relocs.exp (regexp_test): Likewise. * gas/symver/symver.exp (run_error_test): Likewise. ld/testsuite/ * lib/ld-lib.exp (regexp_diff, simple_diff): Delete.
This commit is contained in:
parent
f3097f3364
commit
eb22018c4c
@ -1,3 +1,8 @@
|
||||
2010-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lib/binutils-common.exp (regexp_diff): New procedure.
|
||||
* lib/utils-lib.exp (regexp_diff): Delete.
|
||||
|
||||
2010-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lib/binutils-common.exp: New file.
|
||||
|
@ -149,3 +149,157 @@ proc is_elf64 { binary_file } {
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Compare two files line-by-line. FILE_1 is the actual output and FILE_2
|
||||
# is the expected output. Ignore blank lines in either file.
|
||||
#
|
||||
# FILE_2 is a series of regexps, comments and # directives. The directives
|
||||
# are:
|
||||
#
|
||||
# #pass
|
||||
# Treat the test as a PASS if everything up till this point has
|
||||
# matched. Ignore any remaining lines in either FILE_1 or FILE_2.
|
||||
#
|
||||
# #failif
|
||||
# Reverse the sense of the test: expect differences to exist.
|
||||
#
|
||||
# #...
|
||||
# REGEXP
|
||||
# Skip all lines in FILE_1 until the first that matches REGEXP.
|
||||
#
|
||||
# Other # lines are comments. Skip empty lines in both files.
|
||||
#
|
||||
# The first optional argument is a list of regexp substitutions of the form:
|
||||
#
|
||||
# EXP1 SUBSPEC1 EXP2 SUBSPEC2 ...
|
||||
#
|
||||
# This tells the function to apply each regexp substitution EXPi->SUBSPECi
|
||||
# in order to every line of FILE_2.
|
||||
#
|
||||
# Return nonzero if differences exist.
|
||||
proc regexp_diff { file_1 file_2 args } {
|
||||
set eof -1
|
||||
set end_1 0
|
||||
set end_2 0
|
||||
set differences 0
|
||||
set diff_pass 0
|
||||
set fail_if_match 0
|
||||
set ref_subst ""
|
||||
if { [llength $args] > 0 } {
|
||||
set ref_subst [lindex $args 0]
|
||||
}
|
||||
if { [llength $args] > 1 } {
|
||||
perror "Too many arguments to regexp_diff"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [file exists $file_1] then {
|
||||
set file_a [open $file_1 r]
|
||||
} else {
|
||||
perror "$file_1 doesn't exist"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [file exists $file_2] then {
|
||||
set file_b [open $file_2 r]
|
||||
} else {
|
||||
perror "$file_2 doesn't exist"
|
||||
close $file_a
|
||||
return 1
|
||||
}
|
||||
|
||||
verbose " Regexp-diff'ing: $file_1 $file_2" 2
|
||||
|
||||
while { 1 } {
|
||||
set line_a ""
|
||||
set line_b ""
|
||||
while { [string length $line_a] == 0 } {
|
||||
# Ignore blank line in FILE_1.
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
while { [string length $line_b] == 0 || [string match "#*" $line_b] } {
|
||||
if { [string match "#pass" $line_b] } {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
} elseif { [string match "#failif" $line_b] } {
|
||||
send_log "fail if no difference\n"
|
||||
verbose "fail if no difference" 3
|
||||
set fail_if_match 1
|
||||
} elseif { [string match "#..." $line_b] } {
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
}
|
||||
# Substitute on the reference.
|
||||
foreach {name value} $ref_subst {
|
||||
regsub -- $name $line_b $value line_b
|
||||
}
|
||||
verbose "looking for \"^$line_b$\"" 3
|
||||
while { ![regexp "^$line_b$" "$line_a"] } {
|
||||
verbose "skipping \"$line_a\"" 3
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if { $diff_pass } {
|
||||
break
|
||||
} elseif { $end_1 && $end_2 } {
|
||||
break
|
||||
} elseif { $end_1 } {
|
||||
send_log "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1\n"
|
||||
verbose "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1" 3
|
||||
set differences 1
|
||||
break
|
||||
} elseif { $end_2 } {
|
||||
send_log "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n"
|
||||
verbose "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n" 3
|
||||
set differences 1
|
||||
break
|
||||
} else {
|
||||
# Substitute on the reference.
|
||||
foreach {name value} $ref_subst {
|
||||
regsub -- $name $line_b $value line_b
|
||||
}
|
||||
verbose "regexp \"^$line_b$\"\nline \"$line_a\"" 3
|
||||
if { ![regexp "^$line_b$" "$line_a"] } {
|
||||
send_log "regexp_diff match failure\n"
|
||||
send_log "regexp \"^$line_b$\"\nline \"$line_a\"\n"
|
||||
verbose "regexp_diff match failure\n" 3
|
||||
set differences 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if { $differences == 0 && !$diff_pass && [eof $file_a] != [eof $file_b] } {
|
||||
send_log "$file_1 and $file_2 are different lengths\n"
|
||||
verbose "$file_1 and $file_2 are different lengths" 3
|
||||
set differences 1
|
||||
}
|
||||
|
||||
if { $fail_if_match } {
|
||||
if { $differences == 0 } {
|
||||
set differences 1
|
||||
} else {
|
||||
set differences 0
|
||||
}
|
||||
}
|
||||
|
||||
close $file_a
|
||||
close $file_b
|
||||
|
||||
return $differences
|
||||
}
|
||||
|
@ -242,8 +242,8 @@ proc exe_ext {} {
|
||||
#
|
||||
# After the option lines come regexp lines. `run_dump_test' calls
|
||||
# `regexp_diff' to compare the output of the dumping tool against the
|
||||
# regexps in FILE.d. `regexp_diff' is defined later in this file; see
|
||||
# further comments there.
|
||||
# regexps in FILE.d. `regexp_diff' is defined in binutils-common.exp;
|
||||
# see further comments there.
|
||||
|
||||
proc run_dump_test { name {extra_options {}} } {
|
||||
global subdir srcdir
|
||||
@ -538,110 +538,6 @@ proc slurp_options { file } {
|
||||
return $opt_array
|
||||
}
|
||||
|
||||
# regexp_diff, based on simple_diff taken from ld test suite
|
||||
# compares two files line-by-line
|
||||
# file1 contains strings, file2 contains regexps and #-comments
|
||||
# blank lines are ignored in either file
|
||||
# returns non-zero if differences exist
|
||||
#
|
||||
proc regexp_diff { file_1 file_2 } {
|
||||
|
||||
set eof -1
|
||||
set end_1 0
|
||||
set end_2 0
|
||||
set differences 0
|
||||
set diff_pass 0
|
||||
|
||||
if [file exists $file_1] then {
|
||||
set file_a [open $file_1 r]
|
||||
} else {
|
||||
perror "$file_1 doesn't exist"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [file exists $file_2] then {
|
||||
set file_b [open $file_2 r]
|
||||
} else {
|
||||
perror "$file_2 doesn't exist"
|
||||
close $file_a
|
||||
return 1
|
||||
}
|
||||
|
||||
verbose " Regexp-diff'ing: $file_1 $file_2" 2
|
||||
|
||||
while { 1 } {
|
||||
set line_a ""
|
||||
set line_b ""
|
||||
while { [string length $line_a] == 0 } {
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
while { [string length $line_b] == 0 || [string match "#*" $line_b] } {
|
||||
if [ string match "#pass" $line_b ] {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
} elseif [ string match "#..." $line_b ] {
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
}
|
||||
verbose "looking for \"^$line_b$\"" 3
|
||||
while { ![regexp "^$line_b$" "$line_a"] } {
|
||||
verbose "skipping \"$line_a\"" 3
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if { $diff_pass } {
|
||||
break
|
||||
} elseif { $end_1 && $end_2 } {
|
||||
break
|
||||
} elseif { $end_1 } {
|
||||
send_log "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1\n"
|
||||
verbose "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1" 3
|
||||
set differences 1
|
||||
break
|
||||
} elseif { $end_2 } {
|
||||
send_log "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n"
|
||||
verbose "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n" 3
|
||||
set differences 1
|
||||
break
|
||||
} else {
|
||||
verbose "regexp \"^$line_b$\"\nline \"$line_a\"" 3
|
||||
if ![regexp "^$line_b$" "$line_a"] {
|
||||
send_log "regexp_diff match failure\n"
|
||||
send_log "regexp \"^$line_b$\"\nline \"$line_a\"\n"
|
||||
verbose "regexp_diff match failure\n" 3
|
||||
set differences 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if { $differences == 0 && !$diff_pass && [eof $file_a] != [eof $file_b] } {
|
||||
send_log "$file_1 and $file_2 are different lengths\n"
|
||||
verbose "$file_1 and $file_2 are different lengths" 3
|
||||
set differences 1
|
||||
}
|
||||
|
||||
close $file_a
|
||||
close $file_b
|
||||
|
||||
return $differences
|
||||
}
|
||||
|
||||
proc file_contents { filename } {
|
||||
set file [open $filename r]
|
||||
set contents [read $file]
|
||||
|
@ -1,3 +1,16 @@
|
||||
2010-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lib/gas-defs.exp (regexp_diff): Delete.
|
||||
(run_dump_test): Remove final "" argument in call to regexp_diff.
|
||||
(run_list_test): Likewise.
|
||||
(run_list_test_stdin): Likewise.
|
||||
* gas/all/gas.exp (test_cond): Likewise.
|
||||
* gas/elf/elf.exp (run_elf_list_test): Likewise.
|
||||
* gas/m68k/all.exp: Likewise.
|
||||
* gas/mep/complex-relocs.exp (regexp_test): Likewise.
|
||||
* gas/mt/relocs.exp (regexp_test): Likewise.
|
||||
* gas/symver/symver.exp (run_error_test): Likewise.
|
||||
|
||||
2010-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lib/gas-defs.exp (load_common_lib): New function. Load
|
||||
|
@ -308,7 +308,7 @@ proc test_cond {} {
|
||||
send_log "$comp_output\n"
|
||||
fail $testname
|
||||
} else {
|
||||
if { [regexp_diff dump.out $srcdir/$subdir/cond.l ""] } {
|
||||
if { [regexp_diff dump.out $srcdir/$subdir/cond.l] } {
|
||||
fail $testname
|
||||
} else {
|
||||
pass $testname
|
||||
|
@ -9,7 +9,7 @@ proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } {
|
||||
set file $srcdir/$subdir/$name
|
||||
gas_run ${name}.s "$opts -o dump.o" ">&dump.out"
|
||||
if { ![string match "" $opts]
|
||||
&& [regexp_diff "dump.out" "${file}.l" ""] } then {
|
||||
&& [regexp_diff "dump.out" "${file}.l"] } then {
|
||||
fail $testname
|
||||
verbose "output is [file_contents "dump.out"]" 2
|
||||
return
|
||||
@ -28,7 +28,7 @@ proc run_elf_list_test { name suffix opts readelf_opts readelf_pipe } {
|
||||
return
|
||||
}
|
||||
verbose_eval {[file_contents "dump.out"]} 3
|
||||
if { [regexp_diff "dump.out" "${file}.e${suffix}" ""] } then {
|
||||
if { [regexp_diff "dump.out" "${file}.e${suffix}"] } then {
|
||||
fail $testname
|
||||
verbose "output is [file_contents "dump.out"]" 2
|
||||
return
|
||||
|
@ -83,7 +83,7 @@ if { [istarget m68*-*-*] || [istarget fido*-*-*] } then {
|
||||
verbose "$comp_output" 3
|
||||
fail $testname
|
||||
} else {
|
||||
if [regexp_diff "err.out" "$srcdir/$subdir/op68000.d" ""] then {
|
||||
if [regexp_diff "err.out" "$srcdir/$subdir/op68000.d"] then {
|
||||
fail $testname
|
||||
} else {
|
||||
pass $testname
|
||||
|
@ -18,7 +18,7 @@ proc objdump_test { exec flags dest test } {
|
||||
}
|
||||
|
||||
proc regexp_test { file1 file2 test } {
|
||||
if [regexp_diff $file1 $file2 ""] then { fail $test } else { pass $test }
|
||||
if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
|
||||
}
|
||||
|
||||
|
||||
|
@ -15,7 +15,7 @@ proc objdump_test { exec flags dest test } {
|
||||
}
|
||||
|
||||
proc regexp_test { file1 file2 test } {
|
||||
if [regexp_diff $file1 $file2 ""] then { fail $test } else { pass $test }
|
||||
if [regexp_diff $file1 $file2] then { fail $test } else { pass $test }
|
||||
}
|
||||
|
||||
|
||||
|
@ -6,7 +6,7 @@ proc run_error_test { name opts } {
|
||||
set testname "symver $name"
|
||||
set file $srcdir/$subdir/$name
|
||||
gas_run ${name}.s $opts ">&dump.out"
|
||||
if { [regexp_diff "dump.out" "${file}.l" ""] } then {
|
||||
if { [regexp_diff "dump.out" "${file}.l"] } then {
|
||||
fail $testname
|
||||
verbose "output is [file_contents "dump.out"]" 2
|
||||
return
|
||||
|
@ -427,8 +427,8 @@ proc run_dump_tests { testcases {extra_options {}} } {
|
||||
#
|
||||
# After the option lines come regexp lines. `run_dump_test' calls
|
||||
# `regexp_diff' to compare the output of the dumping tool against the
|
||||
# regexps in FILE.d. `regexp_diff' is defined later in this file; see
|
||||
# further comments there.
|
||||
# regexps in FILE.d. `regexp_diff' is defined in binutils-common.exp;
|
||||
# see further comments there.
|
||||
|
||||
proc run_dump_test { name {extra_options {}} } {
|
||||
global subdir srcdir
|
||||
@ -679,7 +679,7 @@ proc run_dump_test { name {extra_options {}} } {
|
||||
}
|
||||
set stderrfile $srcdir/$subdir/$opts(stderr)
|
||||
verbose "wrote pruned stderr to dump.stderr" 3
|
||||
if { [regexp_diff "dump.stderr" "$stderrfile" ""] } then {
|
||||
if { [regexp_diff "dump.stderr" "$stderrfile"] } then {
|
||||
if { $opts(error) != "" } {
|
||||
verbose -log "$exitstat with: <$comp_output>, expected: <$opts(error)>"
|
||||
if [regexp $opts(error) $comp_output] {
|
||||
@ -839,120 +839,6 @@ expect_after -i {
|
||||
eof { perror "eof" }
|
||||
}
|
||||
|
||||
# regexp_diff, based on simple_diff taken from ld test suite.
|
||||
# Compares two files line-by-line.
|
||||
# FILE_1 contains strings, FILE_2 contains regexps and #-comments
|
||||
# Blank lines are ignored in either file.
|
||||
# Subsitutions in REF_SUBST are applied on FILE_2 lines.
|
||||
# Returns non-zero if differences exist.
|
||||
#
|
||||
proc regexp_diff { file_1 file_2 ref_subst} {
|
||||
|
||||
set eof -1
|
||||
set end_1 0
|
||||
set end_2 0
|
||||
set differences 0
|
||||
set diff_pass 0
|
||||
|
||||
if [file exists $file_1] then {
|
||||
set file_a [open $file_1 r]
|
||||
} else {
|
||||
perror "$file_1 doesn't exist"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [file exists $file_2] then {
|
||||
set file_b [open $file_2 r]
|
||||
} else {
|
||||
perror "$file_2 doesn't exist"
|
||||
close $file_a
|
||||
return 1
|
||||
}
|
||||
|
||||
verbose " Regexp-diff'ing: $file_1 $file_2" 2
|
||||
|
||||
while { 1 } {
|
||||
set line_a ""
|
||||
set line_b ""
|
||||
while { [string length $line_a] == 0 } {
|
||||
# Ignore blank line in FILE_1.
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
while { [string length $line_b] == 0 || [string match "#*" $line_b] } {
|
||||
if [ string match "#pass" $line_b ] {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
} elseif [ string match "#..." $line_b ] {
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
}
|
||||
# Substitute on the reference.
|
||||
foreach {name value} $ref_subst {
|
||||
regsub -- $name $line_b $value line_b
|
||||
}
|
||||
verbose "looking for \"^$line_b$\"" 3
|
||||
while { ![regexp "^$line_b$" "$line_a"] } {
|
||||
verbose "skipping \"$line_a\"" 3
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if { $diff_pass } {
|
||||
break
|
||||
} elseif { $end_1 && $end_2 } {
|
||||
break
|
||||
} elseif { $end_1 } {
|
||||
send_log "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1\n"
|
||||
verbose "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1" 3
|
||||
set differences 1
|
||||
break
|
||||
} elseif { $end_2 } {
|
||||
send_log "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n"
|
||||
verbose "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n" 3
|
||||
set differences 1
|
||||
break
|
||||
} else {
|
||||
# Substitute on the reference.
|
||||
foreach {name value} $ref_subst {
|
||||
regsub -- $name $line_b $value line_b
|
||||
}
|
||||
verbose "regexp \"^$line_b$\"\nline \"$line_a\"" 3
|
||||
if ![regexp "^$line_b$" "$line_a"] {
|
||||
send_log "regexp_diff match failure\n"
|
||||
send_log "regexp \"^$line_b$\"\nline \"$line_a\"\n"
|
||||
verbose "regexp_diff match failure\n" 3
|
||||
set differences 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if { $differences == 0 && !$diff_pass && [eof $file_a] != [eof $file_b] } {
|
||||
send_log "$file_1 and $file_2 are different lengths\n"
|
||||
verbose "$file_1 and $file_2 are different lengths" 3
|
||||
set differences 1
|
||||
}
|
||||
|
||||
close $file_a
|
||||
close $file_b
|
||||
|
||||
return $differences
|
||||
}
|
||||
|
||||
proc file_contents { filename } {
|
||||
set file [open $filename r]
|
||||
set contents [read $file]
|
||||
@ -1008,7 +894,7 @@ proc run_list_test { name {opts {}} {testname {}} } {
|
||||
}
|
||||
set file $srcdir/$subdir/$name
|
||||
gas_run ${name}.s $opts ">&dump.out"
|
||||
if { [regexp_diff "dump.out" "${file}.l" ""] } then {
|
||||
if { [regexp_diff "dump.out" "${file}.l"] } then {
|
||||
fail $testname
|
||||
verbose "output is [file_contents "dump.out"]" 2
|
||||
return
|
||||
@ -1027,7 +913,7 @@ proc run_list_test_stdin { name {opts {}} {testname {}} } {
|
||||
}
|
||||
set file $srcdir/$subdir/$name
|
||||
gas_run_stdin ${name}.s $opts ">&dump.out"
|
||||
if { [regexp_diff "dump.out" "${file}.l" ""] } then {
|
||||
if { [regexp_diff "dump.out" "${file}.l"] } then {
|
||||
fail $testname
|
||||
verbose "output is [file_contents "dump.out"]" 2
|
||||
return
|
||||
|
@ -1,3 +1,7 @@
|
||||
2010-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lib/ld-lib.exp (regexp_diff, simple_diff): Delete.
|
||||
|
||||
2010-11-20 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* lib/ld-lib.exp (load_common_lib): New function. Load
|
||||
|
@ -408,75 +408,6 @@ proc ld_simple_link_defsyms {} {
|
||||
return $flags
|
||||
}
|
||||
|
||||
# Compares two files line-by-line.
|
||||
# Returns differences if exist.
|
||||
# Returns null if file(s) cannot be opened.
|
||||
#
|
||||
proc simple_diff { file_1 file_2 } {
|
||||
global target
|
||||
|
||||
set eof -1
|
||||
set differences 0
|
||||
|
||||
if [file exists $file_1] then {
|
||||
set file_a [open $file_1 r]
|
||||
} else {
|
||||
warning "$file_1 doesn't exist"
|
||||
return
|
||||
}
|
||||
|
||||
if [file exists $file_2] then {
|
||||
set file_b [open $file_2 r]
|
||||
} else {
|
||||
fail "$file_2 doesn't exist"
|
||||
return
|
||||
}
|
||||
|
||||
verbose "# Diff'ing: $file_1 $file_2\n" 2
|
||||
|
||||
while { [gets $file_a line] != $eof } {
|
||||
if [regexp "^#.*$" $line] then {
|
||||
continue
|
||||
} else {
|
||||
lappend list_a $line
|
||||
}
|
||||
}
|
||||
close $file_a
|
||||
|
||||
while { [gets $file_b line] != $eof } {
|
||||
if [regexp "^#.*$" $line] then {
|
||||
continue
|
||||
} else {
|
||||
lappend list_b $line
|
||||
}
|
||||
}
|
||||
close $file_b
|
||||
|
||||
for { set i 0 } { $i < [llength $list_a] } { incr i } {
|
||||
set line_a [lindex $list_a $i]
|
||||
set line_b [lindex $list_b $i]
|
||||
|
||||
verbose "\t$file_1: $i: $line_a\n" 3
|
||||
verbose "\t$file_2: $i: $line_b\n" 3
|
||||
if [string compare $line_a $line_b] then {
|
||||
verbose -log "\t$file_1: $i: $line_a\n"
|
||||
verbose -log "\t$file_2: $i: $line_b\n"
|
||||
|
||||
fail "Test: $target"
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if { [llength $list_a] != [llength $list_b] } {
|
||||
fail "Test: $target"
|
||||
return
|
||||
}
|
||||
|
||||
if $differences<1 then {
|
||||
pass "Test: $target"
|
||||
}
|
||||
}
|
||||
|
||||
# run_dump_test FILE
|
||||
# Copied from gas testsuite, tweaked and further extended.
|
||||
#
|
||||
@ -577,8 +508,8 @@ proc simple_diff { file_1 file_2 } {
|
||||
#
|
||||
# After the option lines come regexp lines. `run_dump_test' calls
|
||||
# `regexp_diff' to compare the output of the dumping tool against the
|
||||
# regexps in FILE.d. `regexp_diff' is defined later in this file; see
|
||||
# further comments there.
|
||||
# regexps in FILE.d. `regexp_diff' is defined in binutils-common.exp;
|
||||
# see further comments there.
|
||||
#
|
||||
proc run_dump_test { name } {
|
||||
global subdir srcdir
|
||||
@ -943,123 +874,6 @@ proc slurp_options { file } {
|
||||
return $opt_array
|
||||
}
|
||||
|
||||
# regexp_diff, copied from gas, based on simple_diff above.
|
||||
# compares two files line-by-line
|
||||
# file1 contains strings, file2 contains regexps and #-comments
|
||||
# blank lines are ignored in either file
|
||||
# returns non-zero if differences exist
|
||||
#
|
||||
proc regexp_diff { file_1 file_2 } {
|
||||
|
||||
set eof -1
|
||||
set end_1 0
|
||||
set end_2 0
|
||||
set differences 0
|
||||
set diff_pass 0
|
||||
set fail_if_match 0
|
||||
|
||||
if [file exists $file_1] then {
|
||||
set file_a [open $file_1 r]
|
||||
} else {
|
||||
warning "$file_1 doesn't exist"
|
||||
return 1
|
||||
}
|
||||
|
||||
if [file exists $file_2] then {
|
||||
set file_b [open $file_2 r]
|
||||
} else {
|
||||
fail "$file_2 doesn't exist"
|
||||
close $file_a
|
||||
return 1
|
||||
}
|
||||
|
||||
verbose " Regexp-diff'ing: $file_1 $file_2" 2
|
||||
|
||||
while { 1 } {
|
||||
set line_a ""
|
||||
set line_b ""
|
||||
while { [string length $line_a] == 0 } {
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
while { [string length $line_b] == 0 || [string match "#*" $line_b] } {
|
||||
if [ string match "#pass" $line_b ] {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
} elseif [ string match "#failif" $line_b ] {
|
||||
send_log "fail if no difference\n"
|
||||
verbose "fail if no difference" 3
|
||||
set fail_if_match 1
|
||||
} elseif [ string match "#..." $line_b ] {
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
set diff_pass 1
|
||||
break
|
||||
}
|
||||
verbose "looking for \"^$line_b$\"" 3
|
||||
while { ![regexp "^$line_b$" "$line_a"] } {
|
||||
verbose "skipping \"$line_a\"" 3
|
||||
if { [gets $file_a line_a] == $eof } {
|
||||
set end_1 1
|
||||
break
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
if { [gets $file_b line_b] == $eof } {
|
||||
set end_2 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if { $diff_pass } {
|
||||
break
|
||||
} elseif { $end_1 && $end_2 } {
|
||||
break
|
||||
} elseif { $end_1 } {
|
||||
send_log "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1\n"
|
||||
verbose "extra regexps in $file_2 starting with \"^$line_b$\"\nEOF from $file_1" 3
|
||||
set differences 1
|
||||
break
|
||||
} elseif { $end_2 } {
|
||||
send_log "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n"
|
||||
verbose "extra lines in $file_1 starting with \"^$line_a$\"\nEOF from $file_2\n" 3
|
||||
set differences 1
|
||||
break
|
||||
} else {
|
||||
verbose "regexp \"^$line_b$\"\nline \"$line_a\"" 3
|
||||
if ![regexp "^$line_b$" "$line_a"] {
|
||||
verbose "regexp_diff match failure\n" 3
|
||||
send_log "regexp_diff match failure\n"
|
||||
send_log "regexp \"^$line_b$\"\nline \"$line_a\"\n"
|
||||
set differences 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if { $differences == 0 && !$diff_pass && [eof $file_a] != [eof $file_b] } {
|
||||
send_log "$file_1 and $file_2 are different lengths\n"
|
||||
verbose "$file_1 and $file_2 are different lengths" 3
|
||||
set differences 1
|
||||
}
|
||||
|
||||
if { $fail_if_match } {
|
||||
if { $differences == 0 } {
|
||||
set differences 1
|
||||
} else {
|
||||
set differences 0
|
||||
}
|
||||
}
|
||||
|
||||
close $file_a
|
||||
close $file_b
|
||||
|
||||
return $differences
|
||||
}
|
||||
|
||||
proc file_contents { filename } {
|
||||
set file [open $filename r]
|
||||
set contents [read $file]
|
||||
|
Loading…
Reference in New Issue
Block a user