aboutsummaryrefslogtreecommitdiffstats
path: root/_examples/common_test.go
diff options
context:
space:
mode:
Diffstat (limited to '_examples/common_test.go')
-rw-r--r--_examples/common_test.go127
1 files changed, 127 insertions, 0 deletions
diff --git a/_examples/common_test.go b/_examples/common_test.go
new file mode 100644
index 0000000..b218e07
--- /dev/null
+++ b/_examples/common_test.go
@@ -0,0 +1,127 @@
+package examples
+
+import (
+ "flag"
+ "fmt"
+ "go/build"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "testing"
+)
+
+var examplesTest = flag.Bool("examples", false, "run the examples tests")
+
+var defaultURL = "https://github.com/mcuadros/basic.git"
+
+var args = map[string][]string{
+ "showcase": []string{defaultURL, tempFolder()},
+ "custom_http": []string{defaultURL},
+ "clone": []string{defaultURL, tempFolder()},
+ "progress": []string{defaultURL, tempFolder()},
+ "open": []string{cloneRepository(defaultURL, tempFolder())},
+ "push": []string{setEmptyRemote(cloneRepository(defaultURL, tempFolder()))},
+}
+
+var ignored = map[string]bool{}
+
+var tempFolders = []string{}
+
+func TestExamples(t *testing.T) {
+ flag.Parse()
+ if !*examplesTest && os.Getenv("CI") == "" {
+ t.Skip("skipping examples tests, pass --examples to execute it")
+ return
+ }
+
+ defer deleteTempFolders()
+
+ examples, err := filepath.Glob(examplesFolder())
+ if err != nil {
+ t.Errorf("error finding tests: %s", err)
+ }
+
+ for _, example := range examples {
+ _, name := filepath.Split(filepath.Dir(example))
+
+ if ignored[name] {
+ continue
+ }
+
+ t.Run(name, func(t *testing.T) {
+ testExample(t, name, example)
+ })
+ }
+}
+
+func tempFolder() string {
+ path, err := ioutil.TempDir("", "")
+ CheckIfError(err)
+
+ tempFolders = append(tempFolders, path)
+ return path
+}
+
+func packageFolder() string {
+ return filepath.Join(
+ build.Default.GOPATH,
+ "src", "srcd.works/go-git.v4",
+ )
+}
+
+func examplesFolder() string {
+ return filepath.Join(
+ packageFolder(),
+ "examples", "*", "main.go",
+ )
+}
+
+func cloneRepository(url, folder string) string {
+ cmd := exec.Command("git", "clone", url, folder)
+ err := cmd.Run()
+ CheckIfError(err)
+
+ return folder
+}
+
+func createBareRepository(dir string) string {
+ cmd := exec.Command("git", "init", "--bare", dir)
+ err := cmd.Run()
+ CheckIfError(err)
+
+ return dir
+}
+
+func setEmptyRemote(dir string) string {
+ remote := createBareRepository(tempFolder())
+ setRemote(dir, fmt.Sprintf("file://%s", remote))
+ return dir
+}
+
+func setRemote(local, remote string) {
+ cmd := exec.Command("git", "remote", "set-url", "origin", remote)
+ cmd.Dir = local
+ err := cmd.Run()
+ CheckIfError(err)
+}
+
+func testExample(t *testing.T, name, example string) {
+ cmd := exec.Command("go", append([]string{
+ "run", filepath.Join(example),
+ }, args[name]...)...)
+
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+
+ if err := cmd.Run(); err != nil {
+ t.Errorf("error running cmd %q", err)
+ }
+}
+
+func deleteTempFolders() {
+ for _, folder := range tempFolders {
+ err := os.RemoveAll(folder)
+ CheckIfError(err)
+ }
+}