mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
215 lines
6.5 KiB
Go
215 lines
6.5 KiB
Go
package segments
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/jandedobbeleer/oh-my-posh/src/properties"
|
|
"github.com/jandedobbeleer/oh-my-posh/src/runtime"
|
|
"github.com/jandedobbeleer/oh-my-posh/src/runtime/mock"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestScmStatusChanged(t *testing.T) {
|
|
cases := []struct {
|
|
Case string
|
|
Expected bool
|
|
Status ScmStatus
|
|
}{
|
|
{
|
|
Case: "No changes",
|
|
Expected: false,
|
|
Status: ScmStatus{},
|
|
},
|
|
{
|
|
Case: "Added",
|
|
Expected: true,
|
|
Status: ScmStatus{
|
|
Added: 1,
|
|
},
|
|
},
|
|
{
|
|
Case: "Moved",
|
|
Expected: true,
|
|
Status: ScmStatus{
|
|
Moved: 1,
|
|
},
|
|
},
|
|
{
|
|
Case: "Modified",
|
|
Expected: true,
|
|
Status: ScmStatus{
|
|
Modified: 1,
|
|
},
|
|
},
|
|
{
|
|
Case: "Deleted",
|
|
Expected: true,
|
|
Status: ScmStatus{
|
|
Deleted: 1,
|
|
},
|
|
},
|
|
{
|
|
Case: "Unmerged",
|
|
Expected: true,
|
|
Status: ScmStatus{
|
|
Unmerged: 1,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
assert.Equal(t, tc.Expected, tc.Status.Changed(), tc.Case)
|
|
}
|
|
}
|
|
|
|
func TestScmStatusString(t *testing.T) {
|
|
cases := []struct {
|
|
Case string
|
|
Expected string
|
|
Status ScmStatus
|
|
}{
|
|
{
|
|
Case: "Unmerged",
|
|
Expected: "x1",
|
|
Status: ScmStatus{
|
|
Unmerged: 1,
|
|
},
|
|
},
|
|
{
|
|
Case: "Unmerged and Modified",
|
|
Expected: "~3 x1",
|
|
Status: ScmStatus{
|
|
Unmerged: 1,
|
|
Modified: 3,
|
|
},
|
|
},
|
|
{
|
|
Case: "Empty",
|
|
Status: ScmStatus{},
|
|
},
|
|
{
|
|
Case: "Format override",
|
|
Expected: "Added: 1",
|
|
Status: ScmStatus{
|
|
Added: 1,
|
|
Formats: map[string]string{
|
|
"Added": "Added: %d",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
assert.Equal(t, tc.Expected, tc.Status.String(), tc.Case)
|
|
}
|
|
}
|
|
|
|
func TestTruncateBranch(t *testing.T) {
|
|
cases := []struct {
|
|
Case string
|
|
Expected string
|
|
Branch string
|
|
FullBranch bool
|
|
MaxLength any
|
|
}{
|
|
{Case: "No limit", Expected: "are-belong-to-us", Branch: "/all-your-base/are-belong-to-us", FullBranch: false},
|
|
{Case: "No limit - larger", Expected: "are-belong", Branch: "/all-your-base/are-belong-to-us", FullBranch: false, MaxLength: 10.0},
|
|
{Case: "No limit - smaller", Expected: "all-your-base", Branch: "/all-your-base", FullBranch: false, MaxLength: 13.0},
|
|
{Case: "Invalid setting", Expected: "all-your-base", Branch: "/all-your-base", FullBranch: false, MaxLength: "burp"},
|
|
{Case: "Lower than limit", Expected: "all-your-base", Branch: "/all-your-base", FullBranch: false, MaxLength: 20.0},
|
|
|
|
{Case: "No limit - full branch", Expected: "/all-your-base/are-belong-to-us", Branch: "/all-your-base/are-belong-to-us", FullBranch: true},
|
|
{Case: "No limit - larger - full branch", Expected: "/all-your-base", Branch: "/all-your-base/are-belong-to-us", FullBranch: true, MaxLength: 14.0},
|
|
{Case: "No limit - smaller - full branch ", Expected: "/all-your-base", Branch: "/all-your-base", FullBranch: true, MaxLength: 14.0},
|
|
{Case: "Invalid setting - full branch", Expected: "/all-your-base", Branch: "/all-your-base", FullBranch: true, MaxLength: "burp"},
|
|
{Case: "Lower than limit - full branch", Expected: "/all-your-base", Branch: "/all-your-base", FullBranch: true, MaxLength: 20.0},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
props := properties.Map{
|
|
BranchMaxLength: tc.MaxLength,
|
|
FullBranchPath: tc.FullBranch,
|
|
}
|
|
p := &Plastic{
|
|
scm: scm{
|
|
props: props,
|
|
},
|
|
}
|
|
assert.Equal(t, tc.Expected, p.truncateBranch(tc.Branch), tc.Case)
|
|
}
|
|
}
|
|
|
|
func TestTruncateBranchWithSymbol(t *testing.T) {
|
|
cases := []struct {
|
|
Case string
|
|
Expected string
|
|
Branch string
|
|
FullBranch bool
|
|
MaxLength any
|
|
TruncateSymbol any
|
|
}{
|
|
{Case: "No limit", Expected: "are-belong-to-us", Branch: "/all-your-base/are-belong-to-us", FullBranch: false, TruncateSymbol: "..."},
|
|
{Case: "No limit - larger", Expected: "are-belong...", Branch: "/all-your-base/are-belong-to-us", FullBranch: false, MaxLength: 10.0, TruncateSymbol: "..."},
|
|
{Case: "No limit - smaller", Expected: "all-your-base", Branch: "/all-your-base", FullBranch: false, MaxLength: 13.0, TruncateSymbol: "..."},
|
|
{Case: "Invalid setting", Expected: "all-your-base", Branch: "/all-your-base", FullBranch: false, MaxLength: "burp", TruncateSymbol: "..."},
|
|
{Case: "Lower than limit", Expected: "all-your-base", Branch: "/all-your-base", FullBranch: false, MaxLength: 20.0, TruncateSymbol: "..."},
|
|
|
|
{Case: "No limit - full branch", Expected: "/all-your-base/are-belong-to-us", Branch: "/all-your-base/are-belong-to-us", FullBranch: true, TruncateSymbol: "..."},
|
|
{Case: "No limit - larger - full branch", Expected: "/all-your-base...", Branch: "/all-your-base/are-belong-to-us", FullBranch: true, MaxLength: 14.0, TruncateSymbol: "..."},
|
|
{Case: "No limit - smaller - full branch ", Expected: "/all-your-base", Branch: "/all-your-base", FullBranch: true, MaxLength: 14.0, TruncateSymbol: "..."},
|
|
{Case: "Invalid setting - full branch", Expected: "/all-your-base", Branch: "/all-your-base", FullBranch: true, MaxLength: "burp", TruncateSymbol: "..."},
|
|
{Case: "Lower than limit - full branch", Expected: "/all-your-base", Branch: "/all-your-base", FullBranch: true, MaxLength: 20.0, TruncateSymbol: "..."},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
props := properties.Map{
|
|
BranchMaxLength: tc.MaxLength,
|
|
TruncateSymbol: tc.TruncateSymbol,
|
|
FullBranchPath: tc.FullBranch,
|
|
}
|
|
p := &Plastic{
|
|
scm: scm{
|
|
props: props,
|
|
},
|
|
}
|
|
assert.Equal(t, tc.Expected, p.truncateBranch(tc.Branch), tc.Case)
|
|
}
|
|
}
|
|
|
|
func TestHasCommand(t *testing.T) {
|
|
cases := []struct {
|
|
Case string
|
|
ExpectedCommand string
|
|
Command string
|
|
GOOS string
|
|
IsWslSharedPath bool
|
|
NativeFallback bool
|
|
}{
|
|
{Case: "On Windows", ExpectedCommand: "git.exe", GOOS: runtime.WINDOWS},
|
|
{Case: "Cache", ExpectedCommand: "git.exe", Command: "git.exe"},
|
|
{Case: "Non Windows", ExpectedCommand: "git"},
|
|
{Case: "Iside WSL2, non shared", ExpectedCommand: "git"},
|
|
{Case: "Iside WSL2, shared", ExpectedCommand: "git.exe", IsWslSharedPath: true},
|
|
{Case: "Iside WSL2, shared fallback", ExpectedCommand: "git", IsWslSharedPath: true, NativeFallback: true},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
env := new(mock.Environment)
|
|
env.On("GOOS").Return(tc.GOOS)
|
|
env.On("InWSLSharedDrive").Return(tc.IsWslSharedPath)
|
|
env.On("HasCommand", "git").Return(true)
|
|
env.On("HasCommand", "git.exe").Return(!tc.NativeFallback)
|
|
s := &scm{
|
|
env: env,
|
|
props: properties.Map{
|
|
NativeFallback: tc.NativeFallback,
|
|
},
|
|
command: tc.Command,
|
|
}
|
|
|
|
_ = s.hasCommand(GITCOMMAND)
|
|
assert.Equal(t, tc.ExpectedCommand, s.command, tc.Case)
|
|
}
|
|
}
|