in newt/cli/build_cmds.go [231:336]
func testRunCmd(cmd *cobra.Command, args []string, exclude string, executeShell bool) {
if len(args) < 1 {
NewtUsage(cmd, nil)
}
util.ExecuteShell = executeShell
proj := TryGetProject()
// Verify and resolve each specified package.
testAll := false
packs := []*pkg.LocalPackage{}
for _, pkgName := range args {
if pkgName == "all" {
testAll = true
} else {
pack, err := proj.ResolvePackage(proj.LocalRepo(), pkgName)
if err != nil {
NewtUsage(cmd, err)
}
testPkgs := pkgToUnitTests(pack)
if len(testPkgs) == 0 {
NewtUsage(nil, util.FmtNewtError("Package %s contains no "+
"unit tests", pack.FullName()))
}
packs = append(packs, testPkgs...)
}
}
if testAll {
packItfs := proj.PackagesOfType(pkg.PACKAGE_TYPE_UNITTEST)
packs = make([]*pkg.LocalPackage, len(packItfs))
for i, p := range packItfs {
packs[i] = p.(*pkg.LocalPackage)
}
packs = pkg.SortLclPkgs(packs)
}
if len(exclude) > 0 {
// filter out excluded tests
orig := packs
packs = packs[:0]
excls := strings.Split(exclude, ",")
packLoop:
for _, pack := range orig {
for _, excl := range excls {
if pack.Name() == excl ||
strings.HasPrefix(pack.Name(), excl+"/") ||
pack.NameWithRepo() == excl ||
strings.HasPrefix(pack.NameWithRepo(), excl+"/") {
continue packLoop
}
}
packs = append(packs, pack)
}
}
if len(packs) == 0 {
NewtUsage(nil, util.NewNewtError("No testable packages found"))
}
passedPkgs := []*pkg.LocalPackage{}
failedPkgs := []*pkg.LocalPackage{}
for _, pack := range packs {
// Reset the global state for the next test.
if err := ResetGlobalState(); err != nil {
NewtUsage(nil, err)
}
t, err := ResolveUnittest(pack.Name())
if err != nil {
NewtUsage(nil, err)
}
b, err := builder.NewTargetTester(t, pack)
if err != nil {
NewtUsage(nil, err)
}
util.StatusMessage(util.VERBOSITY_DEFAULT, "Testing package %s\n",
pack.FullName())
err = b.SelfTestExecute()
if err == nil {
passedPkgs = append(passedPkgs, pack)
} else {
newtError := err.(*util.NewtError)
util.StatusMessage(util.VERBOSITY_QUIET, newtError.Text)
failedPkgs = append(failedPkgs, pack)
}
}
passStr := fmt.Sprintf("Passed tests: [%s]", PackageNameList(passedPkgs))
failStr := fmt.Sprintf("Failed tests: [%s]", PackageNameList(failedPkgs))
if len(failedPkgs) > 0 {
NewtUsage(nil, util.FmtNewtError("Test failure(s):\n%s\n%s", passStr,
failStr))
} else {
util.StatusMessage(util.VERBOSITY_DEFAULT, "%s\n", passStr)
util.StatusMessage(util.VERBOSITY_DEFAULT, "All tests passed\n")
}
}