| env GO111MODULE=on |
| [short] skip |
| |
| # golang.org/x/internal should be importable from other golang.org/x modules. |
| go mod edit -module=golang.org/x/anything |
| go get -d . |
| |
| # ...and their tests... |
| go test |
| stdout PASS |
| |
| # ...but that should not leak into other modules. |
| go get -d ./baddep |
| ! go build ./baddep |
| stderr golang.org[/\\]notx[/\\]useinternal |
| stderr 'use of internal package golang.org/x/.* not allowed' |
| |
| # Internal packages in the standard library should not leak into modules. |
| go get -d ./fromstd |
| ! go build ./fromstd |
| stderr 'use of internal package internal/testenv not allowed' |
| |
| # Dependencies should be able to use their own internal modules... |
| go mod edit -module=golang.org/notx |
| go get -d ./throughdep |
| |
| # ... but other modules should not, even if they have transitive dependencies. |
| go get -d . |
| ! go build . |
| stderr 'use of internal package golang.org/x/.* not allowed' |
| |
| # And transitive dependencies still should not leak. |
| go get -d ./baddep |
| ! go build ./baddep |
| stderr golang.org[/\\]notx[/\\]useinternal |
| stderr 'use of internal package golang.org/x/.* not allowed' |
| |
| # Replacing an internal module should keep it internal to the same paths. |
| go mod edit -module=golang.org/notx |
| go mod edit -replace golang.org/x/internal=./replace/golang.org/notx/internal |
| go get -d ./throughdep |
| |
| go get -d ./baddep |
| ! go build ./baddep |
| stderr golang.org[/\\]notx[/\\]useinternal |
| stderr 'use of internal package golang.org/x/.* not allowed' |
| |
| go mod edit -replace golang.org/x/internal=./vendor/golang.org/x/internal |
| go get -d ./throughdep |
| |
| go get -d ./baddep |
| ! go build ./baddep |
| stderr golang.org[/\\]notx[/\\]useinternal |
| stderr 'use of internal package golang.org/x/.* not allowed' |
| |
| -- go.mod -- |
| module TBD |
| go 1.12 |
| -- useinternal.go -- |
| package useinternal |
| import _ "golang.org/x/internal/subtle" |
| |
| -- useinternal_test.go -- |
| package useinternal_test |
| import ( |
| "testing" |
| _ "golang.org/x/internal/subtle" |
| ) |
| |
| func Test(*testing.T) {} |
| |
| -- throughdep/useinternal.go -- |
| package throughdep |
| import _ "golang.org/x/useinternal" |
| |
| -- baddep/useinternal.go -- |
| package baddep |
| import _ "golang.org/notx/useinternal" |
| |
| -- fromstd/useinternal.go -- |
| package fromstd |
| import _ "internal/testenv" |
| |
| -- replace/golang.org/notx/internal/go.mod -- |
| module golang.org/x/internal |
| |
| -- replace/golang.org/notx/internal/subtle/subtle.go -- |
| package subtle |
| // Ha ha! Nothing here! |
| |
| -- vendor/golang.org/x/internal/go.mod -- |
| module golang.org/x/internal |
| |
| -- vendor/golang.org/x/internal/subtle/subtle.go -- |
| package subtle |
| // Ha ha! Nothing here! |