76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
|
package git
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestRefspec(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
|
||
|
const (
|
||
|
input = "+refs/heads/*:refs/remotes/origin/*"
|
||
|
mainLocal = "refs/heads/main"
|
||
|
mainRemote = "refs/remotes/origin/main"
|
||
|
)
|
||
|
|
||
|
refspec, err := ParseRefspec(input, true)
|
||
|
checkFatal(t, err)
|
||
|
|
||
|
// Accessors
|
||
|
|
||
|
s := refspec.String()
|
||
|
if s != input {
|
||
|
t.Errorf("expected string %q, got %q", input, s)
|
||
|
}
|
||
|
|
||
|
if d := refspec.Direction(); d != ConnectDirectionFetch {
|
||
|
t.Errorf("expected fetch refspec, got direction %v", d)
|
||
|
}
|
||
|
|
||
|
if pat, expected := refspec.Src(), "refs/heads/*"; pat != expected {
|
||
|
t.Errorf("expected refspec src %q, got %q", expected, pat)
|
||
|
}
|
||
|
|
||
|
if pat, expected := refspec.Dst(), "refs/remotes/origin/*"; pat != expected {
|
||
|
t.Errorf("expected refspec dst %q, got %q", expected, pat)
|
||
|
}
|
||
|
|
||
|
if !refspec.Force() {
|
||
|
t.Error("expected refspec force flag")
|
||
|
}
|
||
|
|
||
|
// SrcMatches
|
||
|
|
||
|
if !refspec.SrcMatches(mainLocal) {
|
||
|
t.Errorf("refspec source did not match %q", mainLocal)
|
||
|
}
|
||
|
|
||
|
if refspec.SrcMatches("refs/tags/v1.0") {
|
||
|
t.Error("refspec source matched under refs/tags")
|
||
|
}
|
||
|
|
||
|
// DstMatches
|
||
|
|
||
|
if !refspec.DstMatches(mainRemote) {
|
||
|
t.Errorf("refspec destination did not match %q", mainRemote)
|
||
|
}
|
||
|
|
||
|
if refspec.DstMatches("refs/tags/v1.0") {
|
||
|
t.Error("refspec destination matched under refs/tags")
|
||
|
}
|
||
|
|
||
|
// Transforms
|
||
|
|
||
|
fromLocal, err := refspec.Transform(mainLocal)
|
||
|
checkFatal(t, err)
|
||
|
if fromLocal != mainRemote {
|
||
|
t.Errorf("transform by refspec returned %s; expected %s", fromLocal, mainRemote)
|
||
|
}
|
||
|
|
||
|
fromRemote, err := refspec.Rtransform(mainRemote)
|
||
|
checkFatal(t, err)
|
||
|
if fromRemote != mainLocal {
|
||
|
t.Errorf("rtransform by refspec returned %s; expected %s", fromRemote, mainLocal)
|
||
|
}
|
||
|
}
|