From 9d3db4b62ef1ac60070853abf1ae5d3f759c04ad Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 3 Feb 2011 14:54:01 -0500 Subject: [PATCH] gotest: enable unit tests for cmd directories R=r CC=golang-dev https://golang.org/cl/4001056 --- src/Make.cmd | 19 ++++++++++++++++++ src/cmd/gotest/gotest | 46 ++++++++++++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/Make.cmd b/src/Make.cmd index 34f5663bc8..2b9aba4a5a 100644 --- a/src/Make.cmd +++ b/src/Make.cmd @@ -27,3 +27,22 @@ CLEANFILES+=$(TARG) nuke: clean rm -f $(QUOTED_GOBIN)/$(TARG) + +# for gotest +testpackage: _test/main.a + +testpackage-clean: + rm -f _test/main.a _gotest_.$O + +testpackage: _test/main.a + +_test/main.a: _gotest_.$O + @mkdir -p _test + rm -f $@ + gopack grc $@ _gotest_.$O + +_gotest_.$O: $(GOFILES) $(GOTESTFILES) + $(GC) -o $@ $(GOFILES) $(GOTESTFILES) + +importpath: + echo main diff --git a/src/cmd/gotest/gotest b/src/cmd/gotest/gotest index 87c6800893..69eaae730e 100755 --- a/src/cmd/gotest/gotest +++ b/src/cmd/gotest/gotest @@ -119,6 +119,12 @@ nmgrep() { done } +localname() { + # The package main has been renamed to __main__ when imported. + # Adjust its uses. + echo $1 | sed 's/^main\./__main__./' +} + importpath=$(gomake -s importpath) { # test functions are named TestFoo @@ -139,9 +145,20 @@ importpath=$(gomake -s importpath) echo # imports if echo "$tests" | egrep -v '_test\.' >/dev/null; then - if [ "$importpath" != "testing" ]; then + case "$importpath" in + testing) + ;; + main) + # Import path main is reserved, so import with + # explicit reference to ./_test/main instead. + # Also, the file we are writing defines a function named main, + # so rename this import to __main__ to avoid name conflict. + echo 'import __main__ "./_test/main"' + ;; + *) echo 'import "'$importpath'"' - fi + ;; + esac fi if $havex; then echo 'import "./_xtest_"' @@ -153,23 +170,20 @@ importpath=$(gomake -s importpath) echo 'var tests = []testing.InternalTest{' for i in $tests do - echo ' {"'$i'", '$i'},' + j=$(localname $i) + echo ' {"'$i'", '$j'},' done echo '}' # benchmark array - if [ "$benchmarks" = "" ] - then - # keep the empty array gofmt-safe. - # (not an issue for the test array, which is never empty.) - echo 'var benchmarks = []testing.InternalBenchmark{}' - else - echo 'var benchmarks = []testing.InternalBenchmark{' - for i in $benchmarks - do - echo ' {"'$i'", '$i'},' - done - echo '}' - fi + # The comment makes the multiline declaration + # gofmt-safe even when there are no benchmarks. + echo 'var benchmarks = []testing.InternalBenchmark{ //' + for i in $benchmarks + do + j=$(localname $i) + echo ' {"'$i'", '$j'},' + done + echo '}' # body echo echo 'func main() {' -- 2.50.0