| // Copyright 2018 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package gc |
| |
| import ( |
| "internal/testenv" |
| "io/ioutil" |
| "os" |
| "os/exec" |
| "path/filepath" |
| "testing" |
| ) |
| |
| const aliasSrc = ` |
| package x |
| |
| type T = int |
| ` |
| |
| func TestInvalidLang(t *testing.T) { |
| t.Parallel() |
| |
| testenv.MustHaveGoBuild(t) |
| |
| dir, err := ioutil.TempDir("", "TestInvalidLang") |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer os.RemoveAll(dir) |
| |
| src := filepath.Join(dir, "alias.go") |
| if err := ioutil.WriteFile(src, []byte(aliasSrc), 0644); err != nil { |
| t.Fatal(err) |
| } |
| |
| outfile := filepath.Join(dir, "alias.o") |
| |
| if testLang(t, "go9.99", src, outfile) == nil { |
| t.Error("compilation with -lang=go9.99 succeeded unexpectedly") |
| } |
| |
| // This test will have to be adjusted if we ever reach 1.99 or 2.0. |
| if testLang(t, "go1.99", src, outfile) == nil { |
| t.Error("compilation with -lang=go1.99 succeeded unexpectedly") |
| } |
| |
| if testLang(t, "go1.8", src, outfile) == nil { |
| t.Error("compilation with -lang=go1.8 succeeded unexpectedly") |
| } |
| |
| if err := testLang(t, "go1.9", src, outfile); err != nil { |
| t.Errorf("compilation with -lang=go1.9 failed unexpectedly: %v", err) |
| } |
| } |
| |
| func testLang(t *testing.T, lang, src, outfile string) error { |
| run := []string{testenv.GoToolPath(t), "tool", "compile", "-lang", lang, "-o", outfile, src} |
| t.Log(run) |
| out, err := exec.Command(run[0], run[1:]...).CombinedOutput() |
| t.Logf("%s", out) |
| return err |
| } |