mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2024-12-27 20:09:39 -08:00
430 lines
10 KiB
Go
Executable file
430 lines
10 KiB
Go
Executable file
package main
|
|
|
|
import (
|
|
"errors"
|
|
"math/rand"
|
|
"os/user"
|
|
"testing"
|
|
|
|
"github.com/distatus/battery"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
type MockedEnvironment struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (env *MockedEnvironment) getenv(key string) string {
|
|
args := env.Called(key)
|
|
return args.String(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getwd() (string, error) {
|
|
args := env.Called(nil)
|
|
return args.String(0), args.Error(1)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getPathSeperator() string {
|
|
args := env.Called(nil)
|
|
return args.String(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getCurrentUser() (*user.User, error) {
|
|
args := env.Called(nil)
|
|
return args.Get(0).(*user.User), args.Error(1)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getHostName() (string, error) {
|
|
args := env.Called(nil)
|
|
return args.String(0), args.Error(1)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getRuntimeGOOS() string {
|
|
args := env.Called(nil)
|
|
return args.String(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) hasCommand(command string) bool {
|
|
args := env.Called(command)
|
|
return args.Bool(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) runCommand(command string, args ...string) string {
|
|
arguments := env.Called(command, args)
|
|
return arguments.String(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) runShellCommand(shell string, command string) string {
|
|
args := env.Called(shell, command)
|
|
return args.String(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) lastErrorCode() int {
|
|
args := env.Called(nil)
|
|
return args.Int(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) isRunningAsRoot() bool {
|
|
args := env.Called(nil)
|
|
return args.Bool(0)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getArgs() *args {
|
|
arguments := env.Called(nil)
|
|
return arguments.Get(0).(*args)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getBatteryInfo() (*battery.Battery, error) {
|
|
args := env.Called(nil)
|
|
return args.Get(0).(*battery.Battery), args.Error(1)
|
|
}
|
|
|
|
func (env *MockedEnvironment) getShellName() string {
|
|
args := env.Called(nil)
|
|
return args.String(0)
|
|
}
|
|
|
|
func TestWorkingDir(t *testing.T) {
|
|
want := "/usr/err"
|
|
env := new(MockedEnvironment)
|
|
env.On("getwd", nil).Return(want, nil)
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.workingDir()
|
|
assert.EqualValues(t, want, got)
|
|
}
|
|
|
|
func TestWorkingDirError(t *testing.T) {
|
|
env := new(MockedEnvironment)
|
|
expectedError := errors.New("emit macho dwarf: elf header corrupted")
|
|
env.On("getwd", nil).Return("random", expectedError)
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.workingDir()
|
|
assert.EqualValues(t, "", got)
|
|
}
|
|
|
|
func TestHomeDir(t *testing.T) {
|
|
want := "/mnt/Users/Bill"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(want)
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.homeDir()
|
|
assert.EqualValues(t, want, got)
|
|
}
|
|
|
|
func TestIsInHomeDirTrue(t *testing.T) {
|
|
home := "/home/bill"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.inHomeDir(home)
|
|
assert.True(t, got)
|
|
}
|
|
|
|
func TestIsInHomeDirLevelTrue(t *testing.T) {
|
|
level := rand.Intn(100)
|
|
home := "/home/bill"
|
|
pwd := home
|
|
for i := 0; i < level; i++ {
|
|
pwd += "/level"
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.inHomeDir(pwd)
|
|
assert.True(t, got)
|
|
}
|
|
|
|
func TestRootLocationHome(t *testing.T) {
|
|
expected := "~"
|
|
props := &properties{
|
|
values: map[Property]interface{}{HomeIcon: expected},
|
|
}
|
|
home := "/home/bill/"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("/home/bill")
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation(home)
|
|
assert.EqualValues(t, expected, got)
|
|
}
|
|
|
|
func TestRootLocationOutsideHome(t *testing.T) {
|
|
props := &properties{
|
|
values: map[Property]interface{}{HomeIcon: "~"},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("/home/bill")
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation("/usr/error/what")
|
|
assert.EqualValues(t, "usr", got)
|
|
}
|
|
|
|
func TestRootLocationWindowsDrive(t *testing.T) {
|
|
props := &properties{
|
|
values: map[Property]interface{}{HomeIcon: "~"},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("C:\\Users\\Bill")
|
|
env.On("getPathSeperator", nil).Return("\\")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation("C:\\Program Files\\Go")
|
|
assert.EqualValues(t, "C:", got)
|
|
}
|
|
|
|
func TestRootLocationWindowsRegistry(t *testing.T) {
|
|
expected := "REG"
|
|
props := &properties{
|
|
values: map[Property]interface{}{WindowsRegistryIcon: expected},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("C:\\Users\\Bill")
|
|
env.On("getPathSeperator", nil).Return("\\")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation("HKCU:\\Program Files\\Go")
|
|
assert.EqualValues(t, expected, got)
|
|
}
|
|
|
|
func TestRootLocationWindowsPowerShellHome(t *testing.T) {
|
|
expected := "~"
|
|
props := &properties{
|
|
values: map[Property]interface{}{HomeIcon: expected},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("C:\\Users\\Bill")
|
|
env.On("getPathSeperator", nil).Return("\\")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation("Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Bill")
|
|
assert.EqualValues(t, expected, got)
|
|
}
|
|
|
|
func TestRootLocationWindowsPowerShellOutsideHome(t *testing.T) {
|
|
props := &properties{
|
|
values: map[Property]interface{}{WindowsRegistryIcon: "REG"},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("C:\\Program Files\\Go")
|
|
env.On("getPathSeperator", nil).Return("\\")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation("Microsoft.PowerShell.Core\\FileSystem::C:\\Users\\Bill")
|
|
assert.EqualValues(t, "C:", got)
|
|
}
|
|
|
|
func TestRootLocationEmptyDir(t *testing.T) {
|
|
props := &properties{
|
|
values: map[Property]interface{}{WindowsRegistryIcon: "REG"},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return("/home/bill")
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
got := path.rootLocation("")
|
|
assert.EqualValues(t, "", got)
|
|
}
|
|
|
|
func TestIsInHomeDirFalse(t *testing.T) {
|
|
home := "/home/bill"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.inHomeDir("/usr/error")
|
|
assert.False(t, got)
|
|
}
|
|
|
|
func TestPathDepthInHome(t *testing.T) {
|
|
home := "/home/bill"
|
|
pwd := home
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.pathDepth(pwd)
|
|
assert.Equal(t, 0, got)
|
|
}
|
|
|
|
func TestPathDepthInHomeTrailing(t *testing.T) {
|
|
home := "/home/bill/"
|
|
pwd := home + "/"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.pathDepth(pwd)
|
|
assert.Equal(t, 0, got)
|
|
}
|
|
|
|
func TestPathDepthInHomeMultipleLevelsDeep(t *testing.T) {
|
|
level := rand.Intn(100)
|
|
home := "/home/bill"
|
|
pwd := home
|
|
for i := 0; i < level; i++ {
|
|
pwd += "/level"
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.pathDepth(pwd)
|
|
assert.Equal(t, level, got)
|
|
}
|
|
|
|
func TestPathDepthOutsideHomeMultipleLevelsDeep(t *testing.T) {
|
|
level := rand.Intn(100)
|
|
home := "/home/gates"
|
|
pwd := "/usr"
|
|
for i := 0; i < level; i++ {
|
|
pwd += "/level"
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.pathDepth(pwd)
|
|
assert.Equal(t, level, got)
|
|
}
|
|
|
|
func TestPathDepthOutsideHomeZeroLevelsDeep(t *testing.T) {
|
|
home := "/home/gates"
|
|
pwd := "/usr/"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.pathDepth(pwd)
|
|
assert.Equal(t, 0, got)
|
|
}
|
|
|
|
func TestPathDepthOutsideHomeOneLevelDeep(t *testing.T) {
|
|
home := "/home/gates"
|
|
pwd := "/usr/location"
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return("/")
|
|
path := &path{
|
|
env: env,
|
|
}
|
|
got := path.pathDepth(pwd)
|
|
assert.Equal(t, 1, got)
|
|
}
|
|
|
|
func testWritePathInfo(home string, pwd string, pathSeparator string) string {
|
|
props := &properties{
|
|
values: map[Property]interface{}{
|
|
FolderSeparatorIcon: " > ",
|
|
FolderIcon: "f",
|
|
HomeIcon: "~",
|
|
},
|
|
}
|
|
env := new(MockedEnvironment)
|
|
env.On("getenv", "HOME").Return(home)
|
|
env.On("getPathSeperator", nil).Return(pathSeparator)
|
|
env.On("getwd", nil).Return(pwd, nil)
|
|
path := &path{
|
|
env: env,
|
|
props: props,
|
|
}
|
|
return path.getAgnosterPath()
|
|
}
|
|
|
|
func TestWritePathInfoWindowsOutsideHome(t *testing.T) {
|
|
home := "C:\\Users\\Bill"
|
|
want := "C: > f > f > location"
|
|
got := testWritePathInfo(home, "C:\\Program Files\\Go\\location", "\\")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoWindowsInsideHome(t *testing.T) {
|
|
home := "C:\\Users\\Bill"
|
|
location := home + "\\Documents\\Bill\\location"
|
|
want := "~ > f > f > location"
|
|
got := testWritePathInfo(home, location, "\\")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoWindowsOutsideHomeZeroLevels(t *testing.T) {
|
|
home := "C:\\Users\\Bill"
|
|
want := "C: > location"
|
|
got := testWritePathInfo(home, "C:\\location", "\\")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoWindowsOutsideHomeOneLevels(t *testing.T) {
|
|
home := "C:\\Users\\Bill"
|
|
want := "C: > f > location"
|
|
got := testWritePathInfo(home, "C:\\Program Files\\location", "\\")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoUnixOutsideHome(t *testing.T) {
|
|
home := "/usr/home/jan"
|
|
want := "mnt > f > f > location"
|
|
got := testWritePathInfo(home, "/mnt/go/test/location", "/")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoUnixInsideHome(t *testing.T) {
|
|
home := "/usr/home/jan"
|
|
location := home + "/docs/jan/location"
|
|
want := "~ > f > f > location"
|
|
got := testWritePathInfo(home, location, "/")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoUnixOutsideHomeZeroLevels(t *testing.T) {
|
|
home := "/usr/home/jan"
|
|
want := "mnt > location"
|
|
got := testWritePathInfo(home, "/mnt/location", "/")
|
|
assert.Equal(t, want, got)
|
|
}
|
|
|
|
func TestWritePathInfoUnixOutsideHomeOneLevels(t *testing.T) {
|
|
home := "/usr/home/jan"
|
|
want := "mnt > f > location"
|
|
got := testWritePathInfo(home, "/mnt/folder/location", "/")
|
|
assert.Equal(t, want, got)
|
|
}
|