Each build module parsed its own test runner's output, so a fix in one never reached the others: a failed node --test run was worded by a passing line of its first file. buildstep.Failure names the test, its file, its cause and its own output; ReadGoTest (moved from mesh-build-go) and ReadTAP fill it; package conformance holds every build module to it with runner output captured with the build nodes' own toolchains.
56 lines
2.0 KiB
Go
56 lines
2.0 KiB
Go
package conformance
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/buildstep"
|
|
)
|
|
|
|
// 1901/AC6: the SDK's own parsers keep the contract on every captured case of the kit.
|
|
func TestTheSDKParsersKeepTheFailureContract(t *testing.T) {
|
|
Run(t, GoTest, func(o Output) []buildstep.Failure { return buildstep.ReadGoTest(o.Stdout, ".").Failed })
|
|
Run(t, NodeTest, func(o Output) []buildstep.Failure { return buildstep.ReadTAP(".", "test", o.Dir, o.Report, o.Stdout) })
|
|
Run(t, TypeCheck, func(o Output) []buildstep.Failure {
|
|
return []buildstep.Failure{buildstep.ConsoleFailure(".", "type-check", o.Stdout+o.Stderr)}
|
|
})
|
|
}
|
|
|
|
// The kit refuses what the build modules sent before the contract (issue 1901): node's output cut to its first fifteen
|
|
// lines with no cause, whose first line was a passing test of the first file, and a Go failure keeping its first line.
|
|
func TestTheKitRefusesAFailureThatHidesItsCause(t *testing.T) {
|
|
firstLines := func(s string) string { // mesh-build-node's lines() before the contract
|
|
var keep []string
|
|
for _, l := range strings.Split(s, "\n") {
|
|
if l = strings.TrimSpace(l); l != "" && len(keep) < 15 {
|
|
keep = append(keep, l)
|
|
}
|
|
}
|
|
return strings.Join(keep, "\n")
|
|
}
|
|
for _, c := range []struct {
|
|
runner, name string
|
|
old func(Output) []buildstep.Failure
|
|
}{
|
|
{NodeTest, "two-files", func(o Output) []buildstep.Failure {
|
|
return []buildstep.Failure{{Package: ".", Test: "test", Output: firstLines(o.Report)}}
|
|
}},
|
|
{GoTest, "passfirst", func(o Output) []buildstep.Failure {
|
|
return []buildstep.Failure{{Package: "example.com/passfirst/b", Test: "TestTheSecondPackageFails", Cause: "ok \texample.com/passfirst/a", Output: "--- PASS: TestTheSecondPackagePassesFirst"}}
|
|
}},
|
|
} {
|
|
for _, k := range Cases(c.runner) {
|
|
if k.Name != c.name {
|
|
continue
|
|
}
|
|
out, err := Load(k)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if problems := Judge(k, c.old(out)); len(problems) == 0 {
|
|
t.Errorf("%s %s: the kit passed a failure that hides its cause", c.runner, c.name)
|
|
}
|
|
}
|
|
}
|
|
}
|