64 lines
2.3 KiB
Go
64 lines
2.3 KiB
Go
package check
|
|
|
|
import (
|
|
"slices"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/delivery"
|
|
)
|
|
|
|
func TestAChangeWhoseFetchReportsProgramsFailsNamingEachFile(t *testing.T) { // 1577
|
|
prog := func(p ...string) *[]ProgramFile {
|
|
out := []ProgramFile{}
|
|
for _, f := range p {
|
|
path, commit, _ := strings.Cut(f, "@") // `path@commit`: added by a commit of the branch and removed later
|
|
out = append(out, ProgramFile{Path: path, Kind: "ELF", Commit: commit})
|
|
}
|
|
return &out
|
|
}
|
|
for _, c := range []struct {
|
|
name string
|
|
programs *[]ProgramFile
|
|
fail []string // paths named; none passes
|
|
warned bool // the build module reported no programs field
|
|
}{
|
|
{"none found", prog(), nil, false},
|
|
{"one program", prog("modules/m/m"), []string{"modules/m/m"}, false},
|
|
{"two programs", prog("a/x", "b/y"), []string{"a/x", "b/y"}, false},
|
|
{"added and removed in the branch", prog("gone/prog@0123456789abcdef0123"), []string{"gone/prog: a compiled program added in 0123456789ab and removed later: it stays in history; squash the branch (issue 1577)"}, false},
|
|
{"an older build module reports nothing", nil, nil, true},
|
|
} {
|
|
b := newBench(t)
|
|
b.fetch.Merge, b.fetch.Programs = "mmmm", c.programs
|
|
cs := caseOf(t, pullOf(repoA, 7, head1))
|
|
v := b.judge(t, cs).Verdict
|
|
if got := slices.ContainsFunc(cs.Notes(), func(n string) bool { return strings.Contains(n, NoProgramsReported) }); got != c.warned {
|
|
t.Errorf("%s: warned = %v, want %v (%v)", c.name, got, c.warned, cs.Notes())
|
|
}
|
|
line := Line(v, cs, cs.Pulls[0], nil, nil, nil)
|
|
if got := strings.Contains(line, "a compiled program is not refused: mesh-build-go reported no programs"); got != c.warned {
|
|
t.Errorf("%s: the status line holds the warning = %v, want %v: %s", c.name, got, c.warned, line)
|
|
}
|
|
if len(c.fail) == 0 {
|
|
if v.State != delivery.VerdictPass {
|
|
t.Errorf("%s: verdict = %+v", c.name, v)
|
|
}
|
|
continue
|
|
}
|
|
if v.State != delivery.VerdictFail {
|
|
t.Errorf("%s: verdict = %+v, want a failure", c.name, v)
|
|
continue
|
|
}
|
|
for _, p := range c.fail {
|
|
want := p
|
|
if !strings.Contains(p, " added in ") {
|
|
want = p + ": a compiled program is build output: remove it and add it to .gitignore (issue 1577)"
|
|
}
|
|
if !strings.Contains(v.Failed.Words, want) {
|
|
t.Errorf("%s: words %q do not name %s", c.name, v.Failed.Words, p)
|
|
}
|
|
}
|
|
}
|
|
}
|