| # 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$' |
| |
| -- 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.txt -- |
| hello |
| |
| -- y.txt -- |
| -- z.txt -- |
| -- x.txt2 -- |
| not hello |
| |
| -- use/use.go -- |
| package use |
| |
| import _ "m" |
| -- go.mod -- |
| module m |
| |
| go 1.16 |