File: rsrc_test.go

package info (click to toggle)
golang-github-akavel-rsrc 1%3A0.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 316 kB
  • sloc: xml: 23; makefile: 4
file content (111 lines) | stat: -rw-r--r-- 2,766 bytes parent folder | download
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
		})
	}
}