oh-my-posh/src/engine_test.go

123 lines
3 KiB
Go
Raw Normal View History

package main
import (
"errors"
"oh-my-posh/environment"
"oh-my-posh/mock"
"os"
"path/filepath"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestCanWriteRPrompt(t *testing.T) {
cases := []struct {
Case string
Expected bool
TerminalWidth int
TerminalWidthError error
PromptLength int
RPromptLength int
}{
{Case: "Width Error", Expected: true, TerminalWidthError: errors.New("burp")},
{Case: "Terminal > Prompt enabled", Expected: true, TerminalWidth: 200, PromptLength: 100, RPromptLength: 10},
{Case: "Terminal > Prompt enabled edge", Expected: true, TerminalWidth: 200, PromptLength: 100, RPromptLength: 70},
{Case: "Terminal > Prompt disabled no breathing", Expected: false, TerminalWidth: 200, PromptLength: 100, RPromptLength: 71},
{Case: "Prompt > Terminal enabled", Expected: true, TerminalWidth: 200, PromptLength: 300, RPromptLength: 70},
{Case: "Prompt > Terminal disabled no breathing", Expected: false, TerminalWidth: 200, PromptLength: 300, RPromptLength: 80},
{Case: "Prompt > Terminal disabled no room", Expected: true, TerminalWidth: 200, PromptLength: 400, RPromptLength: 80},
}
for _, tc := range cases {
env := new(mock.MockedEnvironment)
env.On("TerminalWidth").Return(tc.TerminalWidth, tc.TerminalWidthError)
ansi := &ansiUtils{}
ansi.init(plain)
engine := &engine{
env: env,
ansi: ansi,
}
engine.rprompt = strings.Repeat("x", tc.RPromptLength)
engine.console.WriteString(strings.Repeat("x", tc.PromptLength))
got := engine.canWriteRPrompt()
assert.Equal(t, tc.Expected, got, tc.Case)
}
}
func BenchmarkEngineRender(b *testing.B) {
var err error
for i := 0; i < b.N; i++ {
err = engineRender("jandedobbeleer.omp.json")
if err != nil {
b.Fatal(err)
}
}
}
func engineRender(configPath string) error {
testDir, err := os.Getwd()
if err != nil {
return err
}
2021-12-01 00:51:13 -08:00
configPath = filepath.Join(testDir, "test", configPath)
var (
debug = false
eval = false
shell = "pwsh"
plain = false
pwd = ""
pswd = ""
code = 2
execTime = 917.0
)
args := &environment.Args{
Debug: &debug,
Config: &configPath,
Eval: &eval,
Shell: &shell,
Plain: &plain,
PWD: &pwd,
PSWD: &pswd,
ErrorCode: &code,
ExecutionTime: &execTime,
}
env := &environment.ShellEnvironment{}
env.Init(args)
defer env.Close()
cfg := GetConfig(env)
defer testClearDefaultConfig()
ansi := &ansiUtils{}
ansi.init(env.Shell())
writerColors := MakeColors(env, cfg)
writer := &AnsiWriter{
ansi: ansi,
terminalBackground: getConsoleBackgroundColor(env, cfg.TerminalBackground),
ansiColors: writerColors,
}
title := &consoleTitle{
env: env,
config: cfg,
ansi: ansi,
}
engine := &engine{
config: cfg,
env: env,
writer: writer,
consoleTitle: title,
ansi: ansi,
plain: *args.Plain,
}
engine.render()
return nil
}