| [short] skip |
| |
| # Install an echo command because Windows doesn't have it. |
| env GOBIN=$WORK/tmp/bin |
| go install echo.go |
| env PATH=$GOBIN${:}$PATH |
| |
| # Test go generate for directory with no go files |
| go generate ./nogo |
| ! stdout 'Fail' |
| |
| # Test go generate for package where all .go files are excluded by build |
| # constraints |
| go generate -v ./excluded |
| ! stdout 'Fail' |
| ! stderr 'go' # -v shouldn't list any files |
| |
| # Test go generate for "package" with no package clause in any file |
| go generate ./nopkg |
| stdout 'Success a' |
| ! stdout 'Fail' |
| |
| # Test go generate for package with inconsistent package clauses |
| # $GOPACKAGE should depend on each file's package clause |
| go generate ./inconsistent |
| stdout 'Success a' |
| stdout 'Success b' |
| stdout -count=2 'Success c' |
| ! stdout 'Fail' |
| |
| # Test go generate for syntax errors before and after package clauses |
| go generate ./syntax |
| stdout 'Success a' |
| stdout 'Success b' |
| ! stdout 'Fail' |
| |
| # Test go generate for files importing non-existent packages |
| go generate ./importerr |
| stdout 'Success a' |
| stdout 'Success b' |
| stdout 'Success c' |
| |
| -- echo.go -- |
| package main |
| |
| import ( |
| "fmt" |
| "os" |
| "strings" |
| ) |
| |
| func main() { |
| fmt.Println(strings.Join(os.Args[1:], " ")) |
| fmt.Println() |
| } |
| |
| -- go.mod -- |
| module m |
| |
| go 1.16 |
| -- nogo/foo.txt -- |
| Text file in a directory without go files. |
| Go generate should ignore this directory. |
| //go:generate echo Fail nogo |
| |
| -- excluded/a.go -- |
| // Include a build tag that go generate should exclude. |
| // Go generate should ignore this file. |
| |
| // +build a |
| |
| //go:generate echo Fail a |
| |
| package excluded |
| |
| -- excluded/b.go -- |
| // Include a build tag that go generate should exclude. |
| // Go generate should ignore this file. |
| |
| //go:generate echo Fail b |
| |
| // +build b |
| |
| package excluded |
| |
| |
| -- nopkg/a.go -- |
| // Go file with package clause after comment. |
| // Go generate should process this file. |
| |
| /* Pre-comment */ package nopkg |
| //go:generate echo Success a |
| |
| -- nopkg/b.go -- |
| // Go file with commented package clause. |
| // Go generate should ignore this file. |
| |
| //package nopkg |
| |
| //go:generate echo Fail b |
| |
| -- nopkg/c.go -- |
| // Go file with package clause inside multiline comment. |
| // Go generate should ignore this file. |
| |
| /* |
| package nopkg |
| */ |
| |
| //go:generate echo Fail c |
| |
| -- nopkg/d.go -- |
| // Go file with package clause inside raw string literal. |
| // Go generate should ignore this file. |
| |
| const foo = ` |
| package nopkg |
| ` |
| //go:generate echo Fail d |
| |
| -- nopkg/e.go -- |
| // Go file without package clause. |
| // Go generate should ignore this file. |
| |
| //go:generate echo Fail e |
| |
| -- inconsistent/a.go -- |
| // Valid go file with inconsistent package name. |
| // Go generate should process this file with GOPACKAGE=a |
| |
| package a |
| //go:generate echo Success $GOPACKAGE |
| |
| -- inconsistent/b.go -- |
| // Valid go file with inconsistent package name. |
| // Go generate should process this file with GOPACKAGE=b |
| |
| //go:generate echo Success $GOPACKAGE |
| package b |
| |
| -- inconsistent/c.go -- |
| // Go file with two package clauses. |
| // Go generate should process this file with GOPACKAGE=c |
| |
| //go:generate echo Success $GOPACKAGE |
| package c |
| // Invalid package clause, should be ignored: |
| package cinvalid |
| //go:generate echo Success $GOPACKAGE |
| |
| -- inconsistent/d.go -- |
| // Go file with invalid package name. |
| // Go generate should ignore this file. |
| |
| package +d+ |
| //go:generate echo Fail $GOPACKAGE |
| |
| -- syntax/a.go -- |
| // Go file with syntax error after package clause. |
| // Go generate should process this file. |
| |
| package syntax |
| 123 |
| //go:generate echo Success a |
| |
| -- syntax/b.go -- |
| // Go file with syntax error after package clause. |
| // Go generate should process this file. |
| |
| package syntax; 123 |
| //go:generate echo Success b |
| |
| -- syntax/c.go -- |
| // Go file with syntax error before package clause. |
| // Go generate should ignore this file. |
| |
| foo |
| package syntax |
| //go:generate echo Fail c |
| |
| -- importerr/a.go -- |
| // Go file which imports non-existing package. |
| // Go generate should process this file. |
| |
| package importerr |
| //go:generate echo Success a |
| import "foo" |
| |
| -- importerr/b.go -- |
| // Go file which imports non-existing package. |
| // Go generate should process this file. |
| |
| //go:generate echo Success b |
| package importerr |
| import "bar" |
| |
| -- importerr/c.go -- |
| // Go file which imports non-existing package. |
| // Go generate should process this file. |
| |
| package importerr |
| import "moo" |
| //go:generate echo Success c |