blob: 6ad42e9cd18c3894931eeb25c47bba17fde519b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# 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
|