package main import ( "testing" "github.com/alecthomas/assert" ) type pythonArgs struct { virtualEnvName string condaEnvName string condaDefaultName string pyEnvName string displayVersion bool } func bootStrapPythonTest(args *pythonArgs) *python { env := new(MockedEnvironment) env.On("hasCommand", "python").Return(true) env.On("runCommand", "python", []string{"--version"}).Return("Python 3.8.4", nil) env.On("hasFiles", "*.py").Return(true) env.On("getenv", "VIRTUAL_ENV").Return(args.virtualEnvName) env.On("getenv", "CONDA_ENV_PATH").Return(args.condaEnvName) env.On("getenv", "CONDA_DEFAULT_ENV").Return(args.condaDefaultName) env.On("getenv", "PYENV_VERSION").Return(args.pyEnvName) env.On("getPathSeperator", nil).Return("") props := &properties{ values: map[Property]interface{}{ DisplayVersion: args.displayVersion, DisplayVirtualEnv: true, }, } python := &python{} python.init(props, env) return python } func TestPythonVertualEnv(t *testing.T) { expected := "VENV" args := &pythonArgs{ virtualEnvName: expected, } python := bootStrapPythonTest(args) assert.True(t, python.enabled()) assert.Equal(t, expected, python.string()) } func TestPythonCondaEnv(t *testing.T) { expected := "CONDA" args := &pythonArgs{ condaEnvName: expected, } python := bootStrapPythonTest(args) assert.True(t, python.enabled()) assert.Equal(t, expected, python.string()) } func TestPythonCondaDefaultName(t *testing.T) { expected := "CONDADEF" args := &pythonArgs{ condaDefaultName: expected, } python := bootStrapPythonTest(args) assert.True(t, python.enabled()) assert.Equal(t, expected, python.string()) } func TestPythonPyEnv(t *testing.T) { expected := "PYENV" args := &pythonArgs{ pyEnvName: expected, } python := bootStrapPythonTest(args) assert.True(t, python.enabled()) assert.Equal(t, expected, python.string()) } func TestPythonPyEnvWithVersion(t *testing.T) { expected := "PYENV 3.8.4" args := &pythonArgs{ pyEnvName: "PYENV", displayVersion: true, } python := bootStrapPythonTest(args) assert.True(t, python.enabled()) assert.Equal(t, "3.8.4", python.language.version) assert.Equal(t, expected, python.string()) }