blob: 5f7f6edd77e7f9a4d8fee9c8b26ee278a4d04e8a [file] [log] [blame]
# go list shows patterns and files
go list -f '{{.EmbedPatterns}}'
stdout '\[x\*t\*t\]'
go list -f '{{.EmbedFiles}}'
stdout '\[x.txt\]'
go list -test -f '{{.TestEmbedPatterns}}'
stdout '\[y\*t\*t\]'
go list -test -f '{{.TestEmbedFiles}}'
stdout '\[y.txt\]'
go list -test -f '{{.XTestEmbedPatterns}}'
stdout '\[z\*t\*t\]'
go list -test -f '{{.XTestEmbedFiles}}'
stdout '\[z.txt\]'
# build embeds x.txt
go build -x
stderr 'x.txt'
# build uses cache correctly
go build -x
! stderr 'x.txt'
cp x.txt2 x.txt
go build -x
stderr 'x.txt'
# build rejects invalid names
cp x.go2 x.go
go build -x
cp x.txt .git
! go build -x
stderr '^x.go:5:12: pattern [*]t: cannot embed file [.]git: invalid name [.]git$'
rm .git
# build rejects symlinks
[symlink] symlink x.tzt -> x.txt
[symlink] ! go build -x
[symlink] stderr 'pattern [*]t: cannot embed irregular file x.tzt'
[symlink] rm x.tzt
# build rejects empty directories
mkdir t
! go build -x
stderr '^x.go:5:12: pattern [*]t: cannot embed directory t: contains no embeddable files$'
# build ignores symlinks and invalid names in directories
cp x.txt t/.git
! go build -x
stderr '^x.go:5:12: pattern [*]t: cannot embed directory t: contains no embeddable files$'
go list -e -f '{{.Incomplete}}'
stdout 'true'
[symlink] symlink t/x.link -> ../x.txt
[symlink] ! go build -x
[symlink] stderr '^x.go:5:12: pattern [*]t: cannot embed directory t: contains no embeddable files$'
cp x.txt t/x.txt
go build -x
# build reports errors with positions in imported packages
rm t/x.txt
! go build m/use
stderr '^x.go:5:12: pattern [*]t: cannot embed directory t: contains no embeddable files$'
# all still ignores .git and symlinks
cp x.go3 x.go
! go build -x
stderr '^x.go:5:12: pattern all:t: cannot embed directory t: contains no embeddable files$'
# all finds dot files and underscore files
cp x.txt t/.x.txt
go build -x
rm t/.x.txt
cp x.txt t/_x.txt
go build -x
-- x.go --
package p
import "embed"
//go:embed x*t*t
var X embed.FS
-- x_test.go --
package p
import "embed"
//go:embed y*t*t
var Y string
-- x_x_test.go --
package p_test
import "embed"
//go:embed z*t*t
var Z string
-- x.go2 --
package p
import "embed"
//go:embed *t
var X embed.FS
-- x.go3 --
package p
import "embed"
//go:embed all:t
var X embed.FS
-- x.txt --
hello
-- y.txt --
-- z.txt --
-- x.txt2 --
not hello
-- use/use.go --
package use
import _ "m"
-- go.mod --
module m
go 1.16