playground: improve error message when package != 'main'
Change-Id: I4f221516a7b684aab593edfdef3b6bfdcc87a0a7
Reviewed-on: https://go-review.googlesource.com/7923
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/sandbox/sandbox.go b/sandbox/sandbox.go
index 037c97d..7ea6bef 100644
--- a/sandbox/sandbox.go
+++ b/sandbox/sandbox.go
@@ -14,6 +14,8 @@
"encoding/json"
"errors"
"fmt"
+ "go/parser"
+ "go/token"
"io/ioutil"
"log"
"net/http"
@@ -73,6 +75,14 @@
if err := ioutil.WriteFile(in, []byte(req.Body), 0400); err != nil {
return nil, fmt.Errorf("error creating temp file %q: %v", in, err)
}
+
+ fset := token.NewFileSet()
+
+ f, err := parser.ParseFile(fset, in, nil, parser.PackageClauseOnly)
+ if err == nil && f.Name.Name != "main" {
+ return &Response{Errors: "package name must be main"}, nil
+ }
+
exe := filepath.Join(tmpDir, "a.out")
cmd := exec.Command("go", "build", "-o", exe, in)
cmd.Env = []string{"GOOS=nacl", "GOARCH=amd64p32", "GOPATH=" + os.Getenv("GOPATH")}
@@ -171,6 +181,12 @@
if err != nil {
log.Fatal(err)
}
+ if t.errors != "" {
+ if resp.Errors != t.errors {
+ log.Fatalf("resp.Errors = %q, want %q", resp.Errors, t.errors)
+ }
+ continue
+ }
if resp.Errors != "" {
log.Fatal(resp.Errors)
}
@@ -182,9 +198,9 @@
}
var tests = []struct {
- prog, want string
+ prog, want, errors string
}{
- {`
+ {prog: `
package main
import "time"
@@ -196,9 +212,9 @@
}
println(loc.String())
}
- `, "America/New_York"},
+`, want: "America/New_York"},
- {`
+ {prog: `
package main
import (
@@ -209,9 +225,9 @@
func main() {
fmt.Println(time.Now())
}
- `, "2009-11-10 23:00:00 +0000 UTC"},
+`, want: "2009-11-10 23:00:00 +0000 UTC"},
- {`
+ {prog: `
package main
import (
@@ -246,9 +262,9 @@
got = append(got, c)
}
}
- `, "timers fired as expected"},
+`, want: "timers fired as expected"},
- {`
+ {prog: `
package main
import (
@@ -268,5 +284,12 @@
func main() {
println("ok")
}
- `, "ok"},
+`, want: "ok"},
+ {prog: `
+package test
+
+func main() {
+ println("test")
+}
+`, want: "", errors: "package name must be main"},
}