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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
// Copyright 2017-2025 WIT.COM Inc. All rights reserved.
// Use of this source code is governed by the GPL 3.0
package main
import (
"errors"
"strings"
"github.com/go-cmd/cmd"
"go.wit.com/lib/config"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
func doTest() (string, error) {
var s string
var allerr error
initForge()
if argv.Test.Version != nil {
data, err := resources.ReadFile("resources/TESTVERSION")
if err != nil {
s = "open repomap failed"
log.Info(s, err)
return s, err
}
if len(data) == 0 {
s = "resources/repomap is empty"
log.Info(s, err)
return s, config.ErrEmpty
}
for _, line := range strings.Split(string(data), "\n") {
line := strings.TrimSpace(line)
if line == "" {
continue
}
parts := strings.Fields(line)
cmdname := parts[len(parts)-1]
if argv.Test.Copy {
// find cmdname repo
for repo := range me.forge.IterByMode() {
if !strings.HasPrefix(repo.Namespace, "go.wit.com") {
continue
}
if !strings.HasSuffix(repo.Namespace, cmdname) {
continue
}
if cmdname == "forge" {
continue
}
if cmdname == "autogenpb" {
continue
}
cmd := []string{"cp", "-f", "argv.template.go", repo.FullPath + "/"}
shell.RunVerbose(cmd)
}
continue
}
if argv.Test.Version != nil {
// log.Info("LINE=", cmdname)
allerr = errors.Join(allerr, doTestVersion(cmdname))
}
}
if allerr != nil {
log.Printf("ALLERR=(%v)\n", allerr)
return "version tests failed", allerr
}
return "all version tests passed", nil
}
return "nothing tested", nil
}
func versionStderr(cmdname string, r *cmd.Status) error {
stderr := errors.New(cmdname + " version test broken")
for _, line := range r.Stderr {
log.Info("STDERR:", line)
}
for _, line := range r.Stdout {
log.Info("STDOUT:", line)
}
if r.Error != nil {
return errors.Join(stderr, r.Error)
}
if r.Exit == 0 {
return errors.Join(stderr, errors.New("exit -1"))
}
return stderr
}
func doTestVersion(cmdname string) error {
r := shell.Run([]string{cmdname, "--version"})
if r.Exit != 0 {
return versionStderr(cmdname, &r)
}
if r.Error != nil {
return versionStderr(cmdname, &r)
}
if len(r.Stdout) == 0 {
return versionStderr(cmdname, &r)
}
if len(r.Stdout) == 1 {
line := r.Stdout[0]
if !strings.HasPrefix(line, cmdname) {
return versionStderr(cmdname, &r)
}
log.Info(line)
// probably okay
return nil
}
if len(r.Stdout) == 2 {
line := r.Stdout[0]
if !strings.HasPrefix(line, "APPNAME=") {
return versionStderr(cmdname, &r)
}
line = r.Stdout[1]
if !strings.HasPrefix(line, cmdname) {
return versionStderr(cmdname, &r)
}
log.Info(line)
// probably okay
return nil
}
return versionStderr(cmdname, &r)
}
|