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) } } } }