forked from akavel/rsrc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rsrc_test.go
111 lines (101 loc) · 2.7 KB
/
rsrc_test.go
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
})
}
}