def test_CONDA_DEFAULT_ENV(shell): shell_vars = _format_vars(shell) with TemporaryDirectory(prefix=ENVS_PREFIX, dir=dirname(__file__)) as envs: env_dirs = gen_test_env_paths(envs, shell) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {printdefaultenv} """).format(envs=envs, env_dirs=env_dirs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout.rstrip(), make_win_ok(env_dirs[0]), stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}activate" "{env_dirs[1]}" {printdefaultenv} """).format(envs=envs, env_dirs=env_dirs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout.rstrip(), make_win_ok(env_dirs[1]), stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[2]}" {printdefaultenv} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, '', stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}activate" "{env_dirs[2]}" {printdefaultenv} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout.rstrip(), make_win_ok(env_dirs[0]), stderr) commands = (shell_vars['command_setup'] + """ {source} {syspath}{binpath}deactivate {printdefaultenv} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, '', stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}deactivate" {printdefaultenv} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, '', stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" two args {printdefaultenv} """).format(envs=envs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, '', stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" root {nul} {printdefaultenv} """).format(envs=envs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout.rstrip(), ROOT_ENV_NAME, stderr) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" root {nul} {source} "{syspath}{binpath}deactivate" {nul} {printdefaultenv} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, '', stderr)
def test_PS1_no_changeps1(shell): # , bash_profile """Ensure that people's PS1 remains unchanged if they have that setting in their RC file.""" shell_vars = _format_vars(shell) with TemporaryDirectory(prefix=ENVS_PREFIX, dir=dirname(__file__)) as envs: rc_file = os.path.join(envs, ".condarc") with open(rc_file, 'w') as f: f.write("changeps1: False\n") condarc = "{set_var}CONDARC=%s\n" % rc_file commands = (shell_vars['command_setup'] + condarc + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) commands = (shell_vars['command_setup'] + condarc + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}activate" "{env_dirs[1]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) commands = (shell_vars['command_setup'] + condarc + """ {source} "{syspath}{binpath}activate" "{env_dirs[2]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) commands = (shell_vars['command_setup'] + condarc + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}activate" "{env_dirs[2]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) commands = (shell_vars['command_setup'] + condarc + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}deactivate" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) commands = (shell_vars['command_setup'] + condarc + """ {source} "{syspath}{binpath}activate" two args {printps1} """).format(envs=envs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr)
def test_PS1_changeps1(shell): # , bash_profile shell_vars = _format_vars(shell) with TemporaryDirectory(prefix=ENVS_PREFIX, dir=dirname(__file__)) as envs: # activate changes PS1 correctly commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert not stderr assert_equals( stdout.strip(), print_ps1(env_dirs=gen_test_env_paths(envs, shell), raw_ps=shell_vars["raw_ps"], number=0).strip(), stderr) # second activate replaces earlier activated env PS1 commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}activate" "{env_dirs[1]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, sterr = run_in(commands, shell) assert_equals( stdout.strip(), print_ps1(env_dirs=gen_test_env_paths(envs, shell), raw_ps=shell_vars["raw_ps"], number=1).strip(), stderr) # failed activate does not touch raw PS1 commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[2]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) # ensure that a failed activate does not touch PS1 (envs[3] folders do not exist.) commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}activate" "{env_dirs[2]}" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals( stdout.strip(), print_ps1(env_dirs=gen_test_env_paths(envs, shell), raw_ps=shell_vars["raw_ps"], number=0).strip(), stderr) # deactivate script in activated env returns us to raw PS1 commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul} {source} "{syspath}{binpath}deactivate" {printps1} """).format(envs=envs, env_dirs=gen_test_env_paths(envs, shell), **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) # make sure PS1 is unchanged by faulty activate input commands = (shell_vars['command_setup'] + """ {source} "{syspath}{binpath}activate" two args {printps1} """).format(envs=envs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr) # deactivate doesn't do anything bad to PS1 when no env active to deactivate commands = (shell_vars['command_setup'] + """ {source} {syspath}{binpath}deactivate {printps1} """).format(envs=envs, **shell_vars) stdout, stderr = run_in(commands, shell) assert_equals(stdout, shell_vars['raw_ps'], stderr)
def test_CONDA_DEFAULT_ENV(): for shell in shells: with TemporaryDirectory(prefix='envs', dir=dirname(__file__)) as envs: activate, deactivate, conda = _write_entry_points(envs) commands = (command_setup + """ source {activate} {envs}/test1 printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '{envs}/test1'.format(envs=envs) assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test1/bin to PATH\n'.format( envs=envs, syspath=syspath) commands = (command_setup + """ source {activate} {envs}/test1 2> /dev/null source {activate} {envs}/test2 printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '{envs}/test2'.format(envs=envs) assert stderr == 'discarding {envs}/test1/bin from PATH\nprepending {envs}/test2/bin to PATH\n'.format( envs=envs) commands = (command_setup + """ source {activate} {envs}/test3 printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format( envs=envs) commands = (command_setup + """ source {activate} {envs}/test1 2> /dev/null source {activate} {envs}/test3 printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '{envs}/test1'.format(envs=envs) assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format( envs=envs) commands = (command_setup + """ source {deactivate} printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, deactivate=deactivate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'Error: No environment to deactivate\n' commands = (command_setup + """ source {activate} {envs}/test1 2> /dev/null source {deactivate} printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'discarding {envs}/test1/bin from PATH\n'.format( envs=envs) commands = (command_setup + """ source {activate} printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'Error: no environment provided.\n' commands = (command_setup + """ source {activate} two args printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'Error: did not expect more than one argument.\n' commands = (command_setup + """ source {deactivate} test printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'Error: too many arguments.\n' commands = (command_setup + """ source {deactivate} {envs}/test printf "$CONDA_DEFAULT_ENV" """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '' assert stderr == 'Error: too many arguments.\n'
def test_PS1_no_changeps1(): for shell in shells: with TemporaryDirectory(prefix='envs', dir=dirname(__file__)) as envs: activate, deactivate, conda = _write_entry_points(envs) with open(join(envs, '.condarc'), 'w') as f: f.write("""\ changeps1: no """) condarc = """ CONDARC="{envs}/.condarc" """ commands = (command_setup + condarc + """ source {activate} {envs}/test1 printf $PS1 """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test1/bin to PATH\n'.format( envs=envs, syspath=syspath) commands = (command_setup + condarc + """ source {activate} {envs}/test1 2> /dev/null source {activate} {envs}/test2 printf $PS1 """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'discarding {envs}/test1/bin from PATH\nprepending {envs}/test2/bin to PATH\n'.format( envs=envs) commands = (command_setup + condarc + """ source {activate} {envs}/test3 printf $PS1 """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format( envs=envs) commands = (command_setup + condarc + """ source {activate} {envs}/test1 2> /dev/null source {activate} {envs}/test3 printf $PS1 """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format( envs=envs) commands = (command_setup + condarc + """ source {deactivate} printf $PS1 """).format(envs=envs, deactivate=deactivate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: No environment to deactivate\n' commands = (command_setup + condarc + """ source {activate} {envs}/test1 2> /dev/null source {deactivate} printf $PS1 """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'discarding {envs}/test1/bin from PATH\n'.format( envs=envs) commands = (command_setup + condarc + """ source {activate} printf $PS1 """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: no environment provided.\n' commands = (command_setup + condarc + """ source {activate} two args printf $PS1 """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: did not expect more than one argument.\n' commands = (command_setup + condarc + """ source {deactivate} test printf $PS1 """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: too many arguments.\n' commands = (command_setup + condarc + """ source {deactivate} {envs}/test printf $PS1 """).format(envs=envs, deactivate=deactivate, activate=activate) stdout, stderr = run_in(commands, shell) assert stdout == '$' assert stderr == 'Error: too many arguments.\n'
def test_activate_symlinking(): for shell in shells: with TemporaryDirectory(prefix='envs', dir=dirname(__file__)) as envs: activate, deactivate, conda = _write_entry_points(envs) commands = (command_setup + """ source {activate} {envs}/test1 """).format(envs=envs, activate=activate) stdout, stderr = run_in(commands, shell) assert not stdout assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test1/bin to PATH\n'.format( envs=envs, syspath=syspath) for f in ['conda', 'activate', 'deactivate']: assert os.path.lexists('{envs}/test1/bin/{f}'.format(envs=envs, f=f)) assert os.path.exists('{envs}/test1/bin/{f}'.format(envs=envs, f=f)) s = os.lstat('{envs}/test1/bin/{f}'.format(envs=envs, f=f)) assert stat.S_ISLNK(s.st_mode) assert os.readlink('{envs}/test1/bin/{f}'.format( envs=envs, f=f)) == '{syspath}/{f}'.format(syspath=syspath, f=f) try: # Test activate when there are no write permissions in the # env. There are two cases: # - conda/deactivate/activate are already symlinked commands = (command_setup + """ mkdir -p {envs}/test3/bin ln -s {activate} {envs}/test3/bin/activate ln -s {deactivate} {envs}/test3/bin/deactivate ln -s {conda} {envs}/test3/bin/conda chmod 555 {envs}/test3/bin source {activate} {envs}/test3 """).format(envs=envs, activate=activate, deactivate=deactivate, conda=conda) stdout, stderr = run_in(commands, shell) assert not stdout assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test3/bin to PATH\n'.format( envs=envs, syspath=syspath) # Make sure it stays the same for f in ['conda', 'activate', 'deactivate']: assert os.path.lexists('{envs}/test3/bin/{f}'.format( envs=envs, f=f)) assert os.path.exists('{envs}/test3/bin/{f}'.format( envs=envs, f=f)) s = os.lstat('{envs}/test3/bin/{f}'.format(envs=envs, f=f)) assert stat.S_ISLNK(s.st_mode) assert os.readlink('{envs}/test3/bin/{f}'.format( envs=envs, f=f)) == '{f}'.format(f=locals()[f]) # - conda/deactivate/activate are not symlinked. In this case, # activate should fail commands = (command_setup + """ mkdir -p {envs}/test4/bin chmod 555 {envs}/test4/bin source {activate} {envs}/test4 echo $PATH echo $CONDA_DEFAULT_ENV """).format(envs=envs, activate=activate, deactivate=deactivate, conda=conda) stdout, stderr = run_in(commands, shell) assert stdout == ( '{ROOTPATH}\n' # PATH '\n' # CONDA_DEFAULT_ENV ).format(ROOTPATH=ROOTPATH) assert stderr == ( 'Cannot activate environment {envs}/test4, ' 'do not have write access to write conda symlink\n' ).format(envs=envs) finally: # Change the permissions back so that we can delete the directory run_in('chmod 777 {envs}/test3/bin'.format(envs=envs), shell) run_in('chmod 777 {envs}/test4/bin'.format(envs=envs), shell)