blob: e18e62ccf34fa8877beac479f1998b0916438637 [file] [log] [blame]
[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