1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
package main
import (
"os"
"os/exec"
"path/filepath"
"runtime"
"testing"
)
const name = "rsrc_windows_amd64.syso"
func TestBuildSucceeds(t *testing.T) {
tests := []struct {
comment string
args []string
}{{
comment: "icon",
args: []string{"-ico", "akavel.ico"},
}, {
comment: "unaligned icon (?) - issue #26",
args: []string{"-ico", "syncthing.ico"},
}, {
comment: "manifest",
args: []string{"-manifest", "manifest.xml"},
}, {
comment: "manifest & icon",
args: []string{"-manifest", "manifest.xml", "-ico", "akavel.ico"},
}}
for _, tt := range tests {
t.Run(tt.comment, func(t *testing.T) {
dir, err := os.Getwd()
if err != nil {
t.Fatal(err)
}
dir = filepath.Join(dir, "testdata")
// Compile icon/manifest in testdata/ dir
os.Stdout.Write([]byte("-- compiling resource(s)...\n"))
defer os.Remove(filepath.Join(dir, name))
cmd := exec.Command("go", "run", "../rsrc.go", "-arch", "amd64")
cmd.Args = append(cmd.Args, tt.args...)
cmd.Dir = dir
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Fatal(err)
}
// Verify if a .syso file with default name was created
_, err = os.Stat(filepath.Join(dir, name))
if err != nil {
t.Fatal(err)
}
defer os.Setenv("GOOS", os.Getenv("GOOS"))
defer os.Setenv("GOARCH", os.Getenv("GOARCH"))
os.Setenv("GOOS", "windows")
os.Setenv("GOARCH", "amd64")
// Compile sample app in testdata/ dir, trying to link the icon
// compiled above
os.Stdout.Write([]byte("-- compiling app...\n"))
cmd = exec.Command("go", "build")
cmd.Dir = dir
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Fatal(err)
}
// Try running UPX on the executable, if the tool is found in PATH
cmd = exec.Command("upx", "testdata.exe")
if cmd.Path != "upx" {
os.Stdout.Write([]byte("-- running upx...\n"))
cmd.Dir = dir
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
if err != nil {
t.Fatal(err)
}
} else {
os.Stdout.Write([]byte("-- (upx not found)\n"))
}
// If on Windows, check that the compiled app can exec
if runtime.GOOS == "windows" && runtime.GOARCH == "amd64" {
os.Stdout.Write([]byte("-- running app...\n"))
cmd = &exec.Cmd{
Path: "testdata.exe",
Dir: dir,
}
out, err := cmd.CombinedOutput()
if err != nil {
os.Stderr.Write(out)
os.Stderr.Write([]byte("\n"))
t.Fatal(err)
}
if string(out) != "hello world\n" {
t.Fatalf("got unexpected output:\n%s", string(out))
}
}
// TODO: test that we can extract icon/manifest from compiled app,
// and that it is our icon/manifest
})
}
}
|