# Tests that can only run against the live server,
# because they depend on production resources.

GET https://go.dev/s/go2design
code == 302
body ~ proposal.*Found
body !contains UA-

GET https://golang.org/s/go2design
code == 301
redirect == https://go.dev/s/go2design

# playground API endpoints do not redirect from golang.org,
# in case there are clients that can't handle the redirects.

POST https://golang.org/compile
postquery
	body=package main; func main() { print(6*7); }
body == {"compile_errors":"","output":"42"}

POST https://go.dev/_/compile
postquery
	body=package main; func main() { print(6*7); }
body == {"compile_errors":"","output":"42"}

POST https://golang.org/compile
postquery
	body=//empty
body contains expected 'package', found 'EOF'
body !contains UA-

POST https://go.dev/_/compile
postquery
	body=//empty
body contains expected 'package', found 'EOF'
body !contains UA-

POST https://golang.org/compile
postquery
	version=2
	body=package main; import ("fmt"; "time"); func main() {fmt.Print("A"); time.Sleep(time.Second); fmt.Print("B")}
body == {"Errors":"","Events":[{"Message":"A","Kind":"stdout","Delay":0},{"Message":"B","Kind":"stdout","Delay":1000000000}],"VetErrors":""}

POST https://go.dev/_/compile
postquery
	version=2
	body=package main; import ("fmt"; "time"); func main() {fmt.Print("A"); time.Sleep(time.Second); fmt.Print("B")}
body == {"Errors":"","Events":[{"Message":"A","Kind":"stdout","Delay":0},{"Message":"B","Kind":"stdout","Delay":1000000000}],"VetErrors":""}

# Assertions below are commented out due to
# golang/go#65081: snippets fail due to a GCP bug.

# POST https://golang.org/share
# postbody
# 	package main
# body !contains UA-

# POST https://go.dev/_/share
# postbody
# 	package main
# body !contains UA-

# GET https://go.dev/play/p/MAohLsrz7JQ.go
# header Content-Type == text/plain; charset=utf-8
# body !contains The Go Playground
# body !contains About the Playground
# body contains Hello, 世界

GET https://go.dev/wiki/Comments
body contains Go Wiki: Comments
body contains <i>This content is part of the <a href="/wiki/">Go Wiki</a>.</i>

GET https://go.dev/wiki/CommonMistakes
body contains Go Wiki: Common Mistakes
body contains <i>This content is part of the <a href="/wiki/">Go Wiki</a>.</i>
