aboutsummaryrefslogtreecommitdiff
path: root/adapters/gtest/adapter.go
diff options
context:
space:
mode:
Diffstat (limited to 'adapters/gtest/adapter.go')
-rw-r--r--adapters/gtest/adapter.go75
1 files changed, 49 insertions, 26 deletions
diff --git a/adapters/gtest/adapter.go b/adapters/gtest/adapter.go
index 8dc333d..f4fde27 100644
--- a/adapters/gtest/adapter.go
+++ b/adapters/gtest/adapter.go
@@ -9,6 +9,7 @@ import (
"os"
"os/exec"
"path"
+ "sync"
"time"
"golang.flu0r1ne.net/planr"
@@ -26,11 +27,6 @@ func mkUnit(tc *planr.TestCase) cmakeUnit {
};
}
-func chdir(dir string) {
- if err := os.Chdir(dir); err != nil {
- log.Fatal(err)
- }
-}
type GtestAdapter struct {}
@@ -49,7 +45,6 @@ func (adapter *GtestAdapter) Build(tcs []*planr.TestCase) {
units := make([]cmakeUnit, 0)
for _, tc := range tcs {
- fmt.Printf("[R] Building %s (%s)\n", tc.Cname, tc.Path)
cfg := tc.AdapterConfig().(*GtestConfig)
cfg.ensureSatisfied(tc.Path)
@@ -57,8 +52,7 @@ func (adapter *GtestAdapter) Build(tcs []*planr.TestCase) {
}
genCmake(cmakeFile, units)
-
- chdir(buildDir)
+
planr.RunCmd("cmake", "-S", ".", "-B", ".")
}
@@ -69,7 +63,6 @@ func (adapter *GtestAdapter) execTests(cnames []string) ResultFromId {
lut := make(ResultFromId, 0)
for _, exe := range cnames {
- fmt.Printf("[R] Evaluating %s\n", exe)
exePath := path.Join(buildDir, exe)
@@ -95,7 +88,14 @@ func (adapter *GtestAdapter) execTests(cnames []string) ResultFromId {
}
}
- for _, r := range decodeResults(f) {
+ results, err := decodeResults(f)
+
+ if err != nil {
+ log.Printf("Could not collect results from %s: %v", exe, err)
+ continue
+ }
+
+ for _, r := range results {
r.testOutput = string(out)
lut[exe + "." + r.id] = r
}
@@ -134,27 +134,34 @@ func id(tc *planr.TestCase) string {
return tc.Cname + "." + *cfg.Suite + "." + *cfg.Name
}
-func (adapter *GtestAdapter) Evaluate(tcs []*planr.TestCase) {
- buildDir := adapter.Config().Dir()
- chdir(buildDir)
+func compile(wg * sync.WaitGroup, tc *planr.TestCase) {
+ defer wg.Done()
- for _, tc := range tcs {
- cmd := exec.Command("make", tc.Cname)
- out, err := cmd.CombinedOutput()
- tc.Result = new(planr.TestResult)
-
- // Don't treat command failure as anything but a build failure
- if err != nil{
- var exiterr *exec.ExitError
- if errors.As(err, &exiterr) && exiterr.ExitCode() == 0 {
- log.Fatal(err)
- }
+ cmd := exec.Command("make", tc.Cname)
+ out, err := cmd.CombinedOutput()
+ tc.Result = new(planr.TestResult)
- tc.Result.Status = planr.COMPILATION_FAILURE
+ // Don't treat command failure as anything but a build failure
+ if err != nil{
+ var exiterr *exec.ExitError
+ if errors.As(err, &exiterr) && exiterr.ExitCode() == 0 {
+ log.Fatal(err)
}
- tc.Result.DebugOutput = string(out)
+ tc.Result.Status = planr.COMPILATION_FAILURE
+ }
+
+ tc.Result.DebugOutput = string(out)
+}
+
+// ./planr eval 0.93s user 0.16s system 100% cpu 1.089 total
+func (adapter *GtestAdapter) Evaluate(tcs []*planr.TestCase) {
+ var wg sync.WaitGroup
+ for _, tc := range tcs {
+ wg.Add(1)
+ go compile(&wg, tc)
}
+ wg.Wait()
files := exes(tcs)
resultById := adapter.execTests(files)
@@ -164,6 +171,22 @@ func (adapter *GtestAdapter) Evaluate(tcs []*planr.TestCase) {
// compilation failure
if !ok {
+ fmt.Printf("CAN'T FIND %s: status %d\n", tc.Cname, tc.Result.Status)
+
+ if tc.Result.Status == planr.PASSING {
+ cfg := tc.AdapterConfig().(*GtestConfig)
+
+ log.Printf(
+ "Could not find testcase %s with name=\"%s\" and suite=\"%s\". Does such a test exist in the test source?",
+ tc.Cname,
+ *cfg.Name,
+ *cfg.Suite,
+ )
+
+ tc.Result.Status = planr.COMPILATION_FAILURE
+ tc.Result.DebugOutput += fmt.Sprintf("planr: Did not find testcase %s in any test executable\n", id(tc))
+ }
+
continue
}