mirror of
https://github.com/x-motemen/ghq.git
synced 2026-09-10 07:26:27 -04:00
204 lines
5.5 KiB
Go
204 lines
5.5 KiB
Go
package main
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/motemen/ghq/cmdutil"
|
|
)
|
|
|
|
var remoteDummyURL = mustParseURL("https://example.com/git/repo")
|
|
|
|
func TestVCSBackend(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "ghq-test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(tempDir)
|
|
localDir := filepath.Join(tempDir, "repo")
|
|
_commands := []*exec.Cmd{}
|
|
lastCommand := func() *exec.Cmd { return _commands[len(_commands)-1] }
|
|
defer func(orig func(cmd *exec.Cmd) error) {
|
|
cmdutil.CommandRunner = orig
|
|
}(cmdutil.CommandRunner)
|
|
cmdutil.CommandRunner = func(cmd *exec.Cmd) error {
|
|
_commands = append(_commands, cmd)
|
|
return nil
|
|
}
|
|
|
|
testCases := []struct {
|
|
name string
|
|
f func() error
|
|
expect []string
|
|
dir string
|
|
}{{
|
|
name: "[git] clone",
|
|
f: func() error {
|
|
return GitBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"git", "clone", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[git] shallow clone",
|
|
f: func() error {
|
|
return GitBackend.Clone(remoteDummyURL, localDir, true, true)
|
|
},
|
|
expect: []string{"git", "clone", "--depth", "1", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[git] update",
|
|
f: func() error {
|
|
return GitBackend.Update(localDir, false)
|
|
},
|
|
expect: []string{"git", "pull", "--ff-only"},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[svn] checkout",
|
|
f: func() error {
|
|
return SubversionBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"svn", "checkout", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[svn] checkout shallow",
|
|
f: func() error {
|
|
return SubversionBackend.Clone(remoteDummyURL, localDir, true, false)
|
|
},
|
|
expect: []string{"svn", "checkout", "--depth", "1", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[svn] update",
|
|
f: func() error {
|
|
return SubversionBackend.Update(localDir, true)
|
|
},
|
|
expect: []string{"svn", "update"},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[git-svn] clone",
|
|
f: func() error {
|
|
return GitsvnBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"git", "svn", "clone", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[git-svn] update",
|
|
f: func() error {
|
|
return GitsvnBackend.Update(localDir, false)
|
|
},
|
|
expect: []string{"git", "svn", "rebase"},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[git-svn] clone shallow",
|
|
f: func() error {
|
|
return GitsvnBackend.Clone(remoteDummyURL, localDir, true, false)
|
|
},
|
|
expect: []string{"git", "svn", "clone", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[hg] clone",
|
|
f: func() error {
|
|
return MercurialBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"hg", "clone", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[hg] update",
|
|
f: func() error {
|
|
return MercurialBackend.Update(localDir, false)
|
|
},
|
|
expect: []string{"hg", "pull", "--update"},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[hg] clone shallow",
|
|
f: func() error {
|
|
return MercurialBackend.Clone(remoteDummyURL, localDir, true, false)
|
|
},
|
|
expect: []string{"hg", "clone", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[darcs] clone",
|
|
f: func() error {
|
|
return DarcsBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"darcs", "get", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[darcs] clone shallow",
|
|
f: func() error {
|
|
return DarcsBackend.Clone(remoteDummyURL, localDir, true, false)
|
|
},
|
|
expect: []string{"darcs", "get", "--lazy", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[darcs] update",
|
|
f: func() error {
|
|
return DarcsBackend.Update(localDir, false)
|
|
},
|
|
expect: []string{"darcs", "pull"},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[bzr] clone",
|
|
f: func() error {
|
|
return BazaarBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"bzr", "branch", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[bzr] update",
|
|
f: func() error {
|
|
return BazaarBackend.Update(localDir, false)
|
|
},
|
|
expect: []string{"bzr", "pull", "--overwrite"},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[bzr] clone shallow",
|
|
f: func() error {
|
|
return BazaarBackend.Clone(remoteDummyURL, localDir, true, false)
|
|
},
|
|
expect: []string{"bzr", "branch", remoteDummyURL.String(), localDir},
|
|
}, {
|
|
name: "[fossil] clone",
|
|
f: func() error {
|
|
return FossilBackend.Clone(remoteDummyURL, localDir, false, false)
|
|
},
|
|
expect: []string{"fossil", "open", fossilRepoName},
|
|
dir: localDir,
|
|
}, {
|
|
name: "[fossil] update",
|
|
f: func() error {
|
|
return FossilBackend.Update(localDir, false)
|
|
},
|
|
expect: []string{"fossil", "update"},
|
|
dir: localDir,
|
|
}}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if err := tc.f(); err != nil {
|
|
t.Errorf("error should be nil, but: %s", err)
|
|
}
|
|
c := lastCommand()
|
|
if !reflect.DeepEqual(c.Args, tc.expect) {
|
|
t.Errorf("\ngot: %+v\nexpect: %+v", c.Args, tc.expect)
|
|
}
|
|
if c.Dir != tc.dir {
|
|
t.Errorf("got: %s, expect: %s", c.Dir, tc.dir)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCvsDummyBackend(t *testing.T) {
|
|
tempDir, err := ioutil.TempDir("", "ghq-test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(tempDir)
|
|
localDir := filepath.Join(tempDir, "repo")
|
|
|
|
if err := cvsDummyBackend.Clone(remoteDummyURL, localDir, false, false); err == nil {
|
|
t.Error("error should be occurred, but nil")
|
|
}
|
|
|
|
if err := cvsDummyBackend.Clone(remoteDummyURL, localDir, true, false); err == nil {
|
|
t.Error("error should be occurred, but nil")
|
|
}
|
|
|
|
if err := cvsDummyBackend.Update(localDir, false); err == nil {
|
|
t.Error("error should be occurred, but nil")
|
|
}
|
|
}
|