2019-11-09 12:16:25 +01:00
|
|
|
import os
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-08-30 19:05:06 +01:00
|
|
|
from cibuildwheel.environment import parse_environment
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_basic_parsing():
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_recipe = parse_environment("VAR=1 VBR=2")
|
2017-08-30 19:05:06 +01:00
|
|
|
|
2021-04-30 17:56:34 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={})
|
2017-08-30 19:05:06 +01:00
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict == {"VAR": "1", "VBR": "2"}
|
|
|
|
|
assert environment_cmds == ["export VAR=1", "export VBR=2"]
|
2017-08-30 19:05:06 +01:00
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-08-30 19:05:06 +01:00
|
|
|
def test_quotes():
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_recipe = parse_environment("A=1 VAR=\"1 NOT_A_VAR=2\" VBR='vbr'")
|
2017-08-30 19:05:06 +01:00
|
|
|
|
2021-04-30 17:56:34 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={})
|
2017-08-30 19:05:06 +01:00
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict == {"A": "1", "VAR": "1 NOT_A_VAR=2", "VBR": "vbr"}
|
|
|
|
|
assert environment_cmds == ["export A=1", 'export VAR="1 NOT_A_VAR=2"', "export VBR='vbr'"]
|
2017-08-30 19:05:06 +01:00
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-08-30 19:05:06 +01:00
|
|
|
def test_inheritance():
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_recipe = parse_environment("PATH=$PATH:/usr/local/bin")
|
2017-08-30 19:05:06 +01:00
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={"PATH": "/usr/bin"})
|
2017-08-30 19:05:06 +01:00
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict == {"PATH": "/usr/bin:/usr/local/bin"}
|
|
|
|
|
assert environment_cmds == ["export PATH=$PATH:/usr/local/bin"]
|
2017-09-01 13:24:12 +01:00
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-09-02 22:09:32 +01:00
|
|
|
def test_shell_eval():
|
2020-07-19 17:19:48 +02:00
|
|
|
environment_recipe = parse_environment('VAR="$(echo "a test" string)"')
|
2017-09-02 22:09:32 +01:00
|
|
|
|
2019-11-09 12:16:25 +01:00
|
|
|
env_copy = os.environ.copy()
|
2021-05-03 11:45:43 -04:00
|
|
|
env_copy.pop("VAR", None)
|
2019-11-09 12:16:25 +01:00
|
|
|
|
2021-04-30 17:56:34 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment=env_copy)
|
2017-09-02 22:09:32 +01:00
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict["VAR"] == "a test string"
|
2020-07-19 17:19:48 +02:00
|
|
|
assert environment_cmds == ['export VAR="$(echo "a test" string)"']
|
2017-09-02 22:09:32 +01:00
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-09-02 22:09:32 +01:00
|
|
|
def test_shell_eval_and_env():
|
|
|
|
|
environment_recipe = parse_environment('VAR="$(echo "$PREV_VAR" string)"')
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={"PREV_VAR": "1 2 3"})
|
2017-09-02 22:09:32 +01:00
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict == {"PREV_VAR": "1 2 3", "VAR": "1 2 3 string"}
|
2017-09-02 22:09:32 +01:00
|
|
|
assert environment_cmds == ['export VAR="$(echo "$PREV_VAR" string)"']
|
|
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-09-01 13:24:12 +01:00
|
|
|
def test_empty_var():
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_recipe = parse_environment("CFLAGS=")
|
2017-09-01 13:24:12 +01:00
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={"CFLAGS": "-Wall"})
|
2017-09-01 13:24:12 +01:00
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict == {"CFLAGS": ""}
|
|
|
|
|
assert environment_cmds == ["export CFLAGS="]
|
2017-09-06 18:35:42 +01:00
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-09-06 18:35:42 +01:00
|
|
|
def test_no_vars():
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_recipe = parse_environment("")
|
2017-09-06 18:35:42 +01:00
|
|
|
|
|
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={})
|
|
|
|
|
environment_cmds = environment_recipe.as_shell_commands()
|
|
|
|
|
|
|
|
|
|
assert environment_dict == {}
|
|
|
|
|
assert environment_cmds == []
|
|
|
|
|
|
2019-11-12 23:51:27 +00:00
|
|
|
|
2017-09-06 18:35:42 +01:00
|
|
|
def test_no_vars_pass_through():
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_recipe = parse_environment("")
|
2017-09-06 18:35:42 +01:00
|
|
|
|
2021-04-30 17:56:34 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(
|
2021-05-03 11:45:43 -04:00
|
|
|
prev_environment={"CIBUILDWHEEL": "awesome"}
|
2021-04-30 17:56:34 -04:00
|
|
|
)
|
2017-09-06 18:35:42 +01:00
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict == {"CIBUILDWHEEL": "awesome"}
|
2020-06-26 12:59:26 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_operators_inside_eval():
|
2020-07-05 17:39:40 +01:00
|
|
|
environment_recipe = parse_environment('SOMETHING="$(echo a; echo b; echo c)"')
|
2020-06-26 12:59:26 +01:00
|
|
|
|
2020-07-05 17:39:40 +01:00
|
|
|
# pass the existing process env so PATH is available
|
|
|
|
|
environment_dict = environment_recipe.as_dictionary(os.environ.copy())
|
2020-06-26 12:59:26 +01:00
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict.get("SOMETHING") == "a\nb\nc"
|
2020-07-12 21:45:46 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_substitution_with_backslash():
|
|
|
|
|
environment_recipe = parse_environment('PATH2="somewhere_else;$PATH1"')
|
|
|
|
|
|
|
|
|
|
# pass the existing process env so PATH is available
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary(prev_environment={"PATH1": "c:\\folder\\"})
|
2020-07-12 21:45:46 +01:00
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict.get("PATH2") == "somewhere_else;c:\\folder\\"
|
2020-07-15 21:07:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_awkwardly_quoted_variable():
|
2021-04-30 17:56:34 -04:00
|
|
|
environment_recipe = parse_environment(
|
|
|
|
|
'VAR2=something"like this""$VAR1"$VAR1$(echo "theres more")"$(echo "and more!")"'
|
|
|
|
|
)
|
2020-07-15 21:07:33 +01:00
|
|
|
|
|
|
|
|
# pass the existing process env so PATH is available
|
2021-05-03 11:45:43 -04:00
|
|
|
environment_dict = environment_recipe.as_dictionary({"VAR1": "but wait"})
|
2020-07-15 21:07:33 +01:00
|
|
|
|
2021-05-03 11:45:43 -04:00
|
|
|
assert environment_dict.get("VAR2") == "somethinglike thisbut waitbut waittheres moreand more!"
|