go mod vendor
cmp vendor/example.com/a/samedir_embed.txt a/samedir_embed.txt
cmp vendor/example.com/a/subdir/embed.txt a/subdir/embed.txt
cmp vendor/example.com/a/subdir/test/embed.txt a/subdir/test/embed.txt
cmp vendor/example.com/a/subdir/test/xtest/embed.txt a/subdir/test/xtest/embed.txt

cd broken_no_matching_files
! go mod vendor
stderr 'go: pattern foo.txt: no matching files found'

cd ../broken_bad_pattern
! go mod vendor
stderr 'go: pattern ../foo.txt: invalid pattern syntax'

cd ../embed_go122
go mod vendor
cmp vendor/example.com/a/samedir_embed.txt ../a/samedir_embed.txt
cmp vendor/example.com/a/subdir/embed.txt ../a/subdir/embed.txt
! exists vendor/example.com/a/subdir/test/embed.txt
! exists vendor/example.com/a/subdir/test/xtest/embed.txt
-- embed_go122/go.mod --
module example.com/foo
go 1.22

require (
	example.com/a v0.1.0
)

replace (
	example.com/a v0.1.0 => ../a
)
-- embed_go122/foo.go --
package main

import (
	"fmt"

	"example.com/a"
)

func main() {
    fmt.Println(a.Str())
}

# matchPotentialSourceFile prunes out tests and unbuilt code.
# Make sure that they are vendored if they are embedded files.
cd ../embed_unbuilt
go mod vendor
cmp vendor/example.com/dep/unbuilt.go dep/unbuilt.go
cmp vendor/example.com/dep/dep_test.go dep/dep_test.go
! exists vendor/example.com/dep/not_embedded_unbuilt.go
! exists vendor/example.com/dep/not_embedded_dep_test.go
-- go.mod --
module example.com/foo
go 1.16

require (
	example.com/a v0.1.0
)

replace (
	example.com/a v0.1.0 => ./a
)
-- foo.go --
package main

import (
	"fmt"

	"example.com/a"
)

func main() {
    fmt.Println(a.Str())
}
-- a/go.mod --
module example.com/a
-- a/a.go --
package a

import _ "embed"

//go:embed samedir_embed.txt
var sameDir string

//go:embed subdir/embed.txt
var subDir string

func Str() string {
	return sameDir + subDir
}
-- a/a_test.go --
package a

import _ "embed"

//go:embed subdir/test/embed.txt
var subderTest string
-- a/a_x_test.go --
package a_test

import _ "embed"

//go:embed subdir/test/xtest/embed.txt
var subdirXtest string
-- a/samedir_embed.txt --
embedded file in same directory as package
-- a/subdir/embed.txt --
embedded file in subdirectory of package
-- a/subdir/test/embed.txt --
embedded file of test in subdirectory of package
-- a/subdir/test/xtest/embed.txt --
embedded file of xtest in subdirectory of package
-- broken_no_matching_files/go.mod --
module example.com/broken
go 1.16

require (
	example.com/brokendep v0.1.0
)

replace (
	example.com/brokendep v0.1.0 => ./brokendep
)
-- broken_no_matching_files/f.go --
package broken

import _ "example.com/brokendep"

func F() {}
-- broken_no_matching_files/brokendep/go.mod --
module example.com/brokendep
go 1.16
-- broken_no_matching_files/brokendep/f.go --
package brokendep

import _ "embed"

//go:embed foo.txt
var foo string
-- broken_bad_pattern/go.mod --
module example.com/broken
go 1.16

require (
	example.com/brokendep v0.1.0
)

replace (
	example.com/brokendep v0.1.0 => ./brokendep
)
-- broken_bad_pattern/f.go --
package broken

import _ "example.com/brokendep"

func F() {}
-- broken_bad_pattern/brokendep/go.mod --
module example.com/brokendep
go 1.16
-- broken_bad_pattern/brokendep/f.go --
package brokendep

import _ "embed"

//go:embed ../foo.txt
var foo string
-- embed_unbuilt/go.mod --
module example.com/foo
go 1.16

require (
	example.com/dep v0.1.0
)

replace (
	example.com/dep v0.1.0 => ./dep
)
-- embed_unbuilt/foo.go --
package a

import _ "example.com/dep"

func F() {}
-- embed_unbuilt/dep/go.mod --
module example.com/dep
go 1.16
-- embed_unbuilt/dep/dep.go --
package dep

import _ "embed"

//go:embed unbuilt.go
var unbuilt string

//go:embed dep_test.go
var depTest string
-- embed_unbuilt/dep/unbuilt.go --
// +build ignore

package dep
-- embed_unbuilt/dep/not_embedded_unbuilt.go --
// +build ignore

package dep
-- embed_unbuilt/dep/dep_test.go --
package dep
-- embed_unbuilt/dep/not_embedded_dep_test.go --
package dep
