summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/testdata/script/mod_internal.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/testdata/script/mod_internal.txt')
-rw-r--r--src/cmd/go/testdata/script/mod_internal.txt96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/cmd/go/testdata/script/mod_internal.txt b/src/cmd/go/testdata/script/mod_internal.txt
new file mode 100644
index 0000000..687269d
--- /dev/null
+++ b/src/cmd/go/testdata/script/mod_internal.txt
@@ -0,0 +1,96 @@
+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!