blob: ca9d31612ac3e482c2698848014c2eb79e3921f9 [file] [log] [blame]
Richard Musiole3c68472018-03-04 12:15:37 +01001// +build !nacl,!js
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -05002// run
3
4// Copyright 2014 The Go Authors. All rights reserved.
5// Use of this source code is governed by a BSD-style
6// license that can be found in the LICENSE file.
7
8// Run the linkx test.
9
10package main
11
12import (
Russ Cox12795c02015-05-21 14:35:02 -040013 "bytes"
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -050014 "fmt"
15 "os"
16 "os/exec"
Russ Cox69f0d4c2015-06-29 13:03:11 -040017 "strings"
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -050018)
19
20func main() {
Russ Cox51b624e2016-01-28 22:50:03 -050021 // test(" ") // old deprecated & removed syntax
Russ Cox12795c02015-05-21 14:35:02 -040022 test("=") // new syntax
23}
24
25func test(sep string) {
Josh Bleecher Snyder8bbd8002014-12-31 13:25:52 -080026 // Successful run
Russ Cox12795c02015-05-21 14:35:02 -040027 cmd := exec.Command("go", "run", "-ldflags=-X main.tbd"+sep+"hello -X main.overwrite"+sep+"trumped -X main.nosuchsymbol"+sep+"neverseen", "linkx.go")
28 var out, errbuf bytes.Buffer
29 cmd.Stdout = &out
30 cmd.Stderr = &errbuf
31 err := cmd.Run()
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -050032 if err != nil {
Russ Cox12795c02015-05-21 14:35:02 -040033 fmt.Println(errbuf.String())
34 fmt.Println(out.String())
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -050035 fmt.Println(err)
36 os.Exit(1)
37 }
38
39 want := "hello\ntrumped\n"
Russ Cox12795c02015-05-21 14:35:02 -040040 got := out.String()
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -050041 if got != want {
42 fmt.Printf("got %q want %q\n", got, want)
43 os.Exit(1)
44 }
Josh Bleecher Snyder8bbd8002014-12-31 13:25:52 -080045
46 // Issue 8810
47 cmd = exec.Command("go", "run", "-ldflags=-X main.tbd", "linkx.go")
48 _, err = cmd.CombinedOutput()
49 if err == nil {
50 fmt.Println("-X linker flag should not accept keys without values")
51 os.Exit(1)
52 }
Russ Cox69f0d4c2015-06-29 13:03:11 -040053
54 // Issue 9621
55 cmd = exec.Command("go", "run", "-ldflags=-X main.b=false -X main.x=42", "linkx.go")
56 outx, err := cmd.CombinedOutput()
57 if err == nil {
58 fmt.Println("-X linker flag should not overwrite non-strings")
59 os.Exit(1)
60 }
61 outstr := string(outx)
62 if !strings.Contains(outstr, "main.b") {
David Crawshaw7acb6422016-04-20 10:29:43 -040063 fmt.Printf("-X linker flag did not diagnose overwrite of main.b:\n%s\n", outstr)
Russ Cox69f0d4c2015-06-29 13:03:11 -040064 os.Exit(1)
65 }
66 if !strings.Contains(outstr, "main.x") {
David Crawshaw7acb6422016-04-20 10:29:43 -040067 fmt.Printf("-X linker flag did not diagnose overwrite of main.x:\n%s\n", outstr)
Russ Cox69f0d4c2015-06-29 13:03:11 -040068 os.Exit(1)
69 }
Josh Bleecher Snyder9b544442014-11-06 15:14:08 -050070}