internal/gocore/test: DRY core-loading block

This code was the same in four different places. At this point it seems
cleaner to abstract it.

Change-Id: I512c05232bd06f2a7d3524b7889ea3680b49afb5
Reviewed-on: https://go-review.googlesource.com/c/debug/+/618975
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/internal/gocore/gocore_test.go b/internal/gocore/gocore_test.go
index c599db3..90889ef 100644
--- a/internal/gocore/gocore_test.go
+++ b/internal/gocore/gocore_test.go
@@ -24,6 +24,19 @@
 	"golang.org/x/debug/internal/testenv"
 )
 
+func loadCore(t *testing.T, corePath, base, exePath string) *Process {
+	t.Helper()
+	c, err := core.Core(corePath, base, exePath)
+	if err != nil {
+		t.Fatalf("can't load test core file: %s", err)
+	}
+	p, err := Core(c)
+	if err != nil {
+		t.Fatalf("can't parse Go core: %s", err)
+	}
+	return p
+}
+
 // loadExample loads a simple core file which resulted from running the
 // following program on linux/amd64 with go 1.9.0 (the earliest supported runtime):
 //
@@ -37,15 +50,7 @@
 	if runtime.GOOS == "android" {
 		t.Skip("skipping test on android")
 	}
-	c, err := core.Core("testdata/core", "testdata", "")
-	if err != nil {
-		t.Fatalf("can't load test core file: %s", err)
-	}
-	p, err := Core(c)
-	if err != nil {
-		t.Fatalf("can't parse Go core: %s", err)
-	}
-	return p
+	return loadCore(t, "testdata/core", "testdata", "")
 }
 
 func loadExampleVersion(t *testing.T, version string) *Process {
@@ -75,15 +80,7 @@
 		file = fmt.Sprintf("testdata/core%s", version)
 		base = "testdata"
 	}
-	c, err := core.Core(file, base, "")
-	if err != nil {
-		t.Fatalf("can't load test core file: %s", err)
-	}
-	p, err := Core(c)
-	if err != nil {
-		t.Fatalf("can't parse Go core: %s", err)
-	}
-	return p
+	return loadCore(t, file, base, "")
 }
 
 // loadExampleGenerated generates a core from a binary built with
@@ -108,15 +105,7 @@
 	if err != nil {
 		t.Fatalf("generateCore() got err %v want nil", err)
 	}
-	c, err := core.Core(file, "", "")
-	if err != nil {
-		t.Fatalf("can't load test core file: %s", err)
-	}
-	p, err := Core(c)
-	if err != nil {
-		t.Fatalf("can't parse Go core: %s", err)
-	}
-	return p
+	return loadCore(t, file, "", "")
 }
 
 func setupCorePattern(t *testing.T) func() {
@@ -442,15 +431,7 @@
 
 	exe := filepath.Join(dir, name)
 	file := filepath.Join(dir, "core")
-	c, err := core.Core(file, dir, exe)
-	if err != nil {
-		t.Fatalf("can't load test core file: %s", err)
-	}
-	p, err := Core(c)
-	if err != nil {
-		t.Fatalf("can't parse Go core: %s", err)
-	}
-	return p
+	return loadCore(t, file, dir, exe)
 }
 
 func TestRuntimeTypes(t *testing.T) {