re PR go/89168 (FAIL: cmd/go/internal/load)
PR go/89168 libgo: change gotest to run examples with output Change the gotest script to act like "go test" and run examples that have "output" comments. This is not done with full generality, but just enough to run the libgo tests. Other packages should be tested with "go test" as usual. While we're here clean up some old bits of gotest, and only run TestXXX functions that are actually in *_test.go files. The latter change should fix https://gcc.gnu.org/PR89168. Reviewed-on: https://go-review.googlesource.com/c/162139 From-SVN: r268922
This commit is contained in:
parent
b90fff0cc0
commit
c8530c4109
@ -1,4 +1,4 @@
|
||||
c2fc3b83d832725accd4fa5874a5b5ca02dd90dc
|
||||
4a6f2bb2c8d3f00966f001a5b03c57cb4a278265
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -31,7 +31,7 @@ func ExampleFrames() {
|
||||
// To keep this example's output stable
|
||||
// even if there are changes in the testing package,
|
||||
// stop unwinding when we leave package runtime.
|
||||
if !strings.Contains(frame.File, "runtime/") {
|
||||
if !strings.Contains(frame.File, "runtime/") && !strings.Contains(frame.File, "/test/") {
|
||||
break
|
||||
}
|
||||
fmt.Printf("- more:%v | %s\n", more, frame.Function)
|
||||
@ -47,8 +47,8 @@ func ExampleFrames() {
|
||||
a()
|
||||
// Output:
|
||||
// - more:true | runtime.Callers
|
||||
// - more:true | runtime_test.ExampleFrames.func1
|
||||
// - more:true | runtime_test.ExampleFrames.func2
|
||||
// - more:true | runtime_test.ExampleFrames.func3
|
||||
// - more:true | runtime_test.ExampleFrames..func1
|
||||
// - more:true | runtime_test.ExampleFrames..func2
|
||||
// - more:true | runtime_test.ExampleFrames..func3
|
||||
// - more:true | runtime_test.ExampleFrames
|
||||
}
|
||||
|
@ -289,12 +289,6 @@ x)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Some tests expect the _obj directory created by the gc Makefiles.
|
||||
mkdir _obj
|
||||
|
||||
# Some tests expect the _test directory created by the gc Makefiles.
|
||||
mkdir _test
|
||||
|
||||
case "x$gofiles" in
|
||||
x)
|
||||
for f in `ls *_test.go`; do
|
||||
@ -404,14 +398,6 @@ x)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Run any commands given in sources, like
|
||||
# // gotest: $GC foo.go
|
||||
# to build any test-only dependencies.
|
||||
holdGC="$GC"
|
||||
GC="$GC -g -c -I ."
|
||||
sed -n 's/^\/\/ gotest: //p' $gofiles | sh
|
||||
GC="$holdGC"
|
||||
|
||||
case "x$pkgfiles" in
|
||||
x)
|
||||
pkgbasefiles=`ls *.go | grep -v _test.go 2>/dev/null`
|
||||
@ -514,26 +500,29 @@ localname() {
|
||||
#
|
||||
symtogo() {
|
||||
result=""
|
||||
for tp in $*
|
||||
do
|
||||
for tp in $*; do
|
||||
s=$(echo "$tp" | sed -e 's/\.\.z2f/%/g' | sed -e 's/.*%//')
|
||||
# screen out methods (X.Y.Z)
|
||||
# Screen out methods (X.Y.Z).
|
||||
if ! expr "$s" : '^[^.]*\.[^.]*$' >/dev/null 2>&1; then
|
||||
continue
|
||||
fi
|
||||
echo "$s"
|
||||
tname=$(testname $s)
|
||||
# Skip TestMain.
|
||||
if test x$tname = xTestMain; then
|
||||
continue
|
||||
fi
|
||||
# Check that the function is defined in a test file,
|
||||
# not an ordinary non-test file.
|
||||
if grep "^func $tname(" $gofiles $xgofiles >/dev/null 2>&1; then
|
||||
echo "$s"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
{
|
||||
text="T"
|
||||
|
||||
# On systems using PPC64 ELF ABI v1 function symbols show up
|
||||
# as descriptors in the data section. We assume that $goarch
|
||||
# distinguishes v1 (ppc64) from v2 (ppc64le).
|
||||
if test "$goos" != "aix" && test "$goarch" = "ppc64"; then
|
||||
text="[TD]"
|
||||
fi
|
||||
# as descriptors in the data section.
|
||||
text="[TD]"
|
||||
|
||||
# test functions are named TestFoo
|
||||
# the grep -v eliminates methods and other special names
|
||||
@ -575,13 +564,10 @@ symtogo() {
|
||||
# test array
|
||||
echo
|
||||
echo 'var tests = []testing.InternalTest {'
|
||||
for i in $tests
|
||||
do
|
||||
for i in $tests; do
|
||||
n=$(testname $i)
|
||||
if test "$n" != "TestMain"; then
|
||||
j=$(localname $i)
|
||||
echo ' {"'$n'", '$j'},'
|
||||
fi
|
||||
j=$(localname $i)
|
||||
echo ' {"'$n'", '$j'},'
|
||||
done
|
||||
echo '}'
|
||||
|
||||
@ -589,8 +575,7 @@ symtogo() {
|
||||
# The comment makes the multiline declaration
|
||||
# gofmt-safe even when there are no benchmarks.
|
||||
echo 'var benchmarks = []testing.InternalBenchmark{ //'
|
||||
for i in $benchmarks
|
||||
do
|
||||
for i in $benchmarks; do
|
||||
n=$(testname $i)
|
||||
j=$(localname $i)
|
||||
echo ' {"'$n'", '$j'},'
|
||||
@ -599,13 +584,58 @@ symtogo() {
|
||||
|
||||
# examples array
|
||||
echo 'var examples = []testing.InternalExample{ //'
|
||||
# This doesn't work because we don't pick up the output.
|
||||
#for i in $examples
|
||||
#do
|
||||
# n=$(testname $i)
|
||||
# j=$(localname $i)
|
||||
# echo ' {"'$n'", '$j', ""},'
|
||||
#done
|
||||
for i in $examples; do
|
||||
n=$(testname $i)
|
||||
j=$(localname $i)
|
||||
# Look for a //output comment.
|
||||
hasoutput=false
|
||||
unordered=false
|
||||
output=
|
||||
for f in $gofiles $xgofiles; do
|
||||
if ! grep "^func $n(" $f >/dev/null 2>&1; then
|
||||
continue
|
||||
fi
|
||||
# Copy the output comment, if any, into example.txt.
|
||||
# Remove the comment markers.
|
||||
sed -n "/^func $n(/,/^}$/ p" $f |
|
||||
sed -n '\|// \([Uu]nordered \)\?[Oo]utput:|,$ p' |
|
||||
sed -n '\|//| s|[ ]*// \?||p' > example.txt
|
||||
# Check whether we found an output comment.
|
||||
if ! sed -n '1p' < example.txt | grep '[Oo]utput:' >/dev/null 2>&1; then
|
||||
# An example with no output is only compiled, not run,
|
||||
# so don't add it to the examples slice.
|
||||
rm -f example.txt
|
||||
break
|
||||
fi
|
||||
# Check whether the output can be unordered.
|
||||
unordered=false
|
||||
if sed -n '1p' < example.txt | grep -i unordered; then
|
||||
unordered=true
|
||||
fi
|
||||
# Remove the output header.
|
||||
# Quote backslashes.
|
||||
# Quote quotation characters.
|
||||
# Turn tab into \t.
|
||||
# Turn pairs of spaces into " \x20", because $() will
|
||||
# drop duplicate spaces.
|
||||
# Drop trailing spaces, and turn newlines into \n.
|
||||
output="$(sed '1 s/\([Uu]nordered \)\?[Oo]utput:[ ]*//' < example.txt |
|
||||
sed -e 's/\\/\\\\/g' \
|
||||
-e 's/"/\\"/g' \
|
||||
-e 's/ /\\t/g' \
|
||||
-e 's/ / \\x20/g' \
|
||||
-e 's/[ ]*$/\\n/g' |
|
||||
tr -d '\n')"
|
||||
# Remove leading and trailing \n.
|
||||
output="$(echo "$output" | sed -e 's/^\(\\n\)*//' -e 's/\(\\n\)*$//')"
|
||||
hasoutput=true
|
||||
rm -f example.txt
|
||||
break
|
||||
done
|
||||
if test x$hasoutput = xtrue; then
|
||||
echo ' {"'$n'", '$j', "'"$output"'", '$unordered'},'
|
||||
fi
|
||||
done
|
||||
echo '}'
|
||||
|
||||
# body
|
||||
|
Loading…
Reference in New Issue
Block a user