|
9 | 9 | find_compatible_wheel,
|
10 | 10 | fix_ansi_codes_for_github_actions,
|
11 | 11 | format_safe,
|
| 12 | + parse_key_value_string, |
12 | 13 | prepare_command,
|
13 | 14 | )
|
14 | 15 |
|
@@ -124,3 +125,84 @@ def test_fix_ansi_codes_for_github_actions():
|
124 | 125 | output = fix_ansi_codes_for_github_actions(input)
|
125 | 126 |
|
126 | 127 | assert output == expected
|
| 128 | + |
| 129 | + |
| 130 | +def test_parse_key_value_string(): |
| 131 | + assert parse_key_value_string("bar", positional_arg_names=["foo"]) == {"foo": ["bar"]} |
| 132 | + assert parse_key_value_string("foo:bar", kw_arg_names=["foo"]) == {"foo": ["bar"]} |
| 133 | + with pytest.raises(ValueError, match="Too many positional arguments"): |
| 134 | + parse_key_value_string("bar") |
| 135 | + with pytest.raises(ValueError, match="Unknown field name"): |
| 136 | + parse_key_value_string("foo:bar") |
| 137 | + assert parse_key_value_string("foo:bar", kw_arg_names=["foo"]) == {"foo": ["bar"]} |
| 138 | + assert parse_key_value_string("foo:bar", positional_arg_names=["foo"]) == {"foo": ["bar"]} |
| 139 | + assert parse_key_value_string("foo: bar", kw_arg_names=["foo"]) == {"foo": ["bar"]} |
| 140 | + assert parse_key_value_string("foo: bar", kw_arg_names=["foo"]) == {"foo": ["bar"]} |
| 141 | + assert parse_key_value_string("foo: bar; baz: qux", kw_arg_names=["foo", "baz"]) == { |
| 142 | + "foo": ["bar"], |
| 143 | + "baz": ["qux"], |
| 144 | + } |
| 145 | + |
| 146 | + # some common options |
| 147 | + assert parse_key_value_string( |
| 148 | + "docker; create_args: --some-option --another-option=foo", |
| 149 | + positional_arg_names=["name"], |
| 150 | + kw_arg_names=["create_args"], |
| 151 | + ) == { |
| 152 | + "name": ["docker"], |
| 153 | + "create_args": ["--some-option", "--another-option=foo"], |
| 154 | + } |
| 155 | + # semicolon in value |
| 156 | + assert parse_key_value_string( |
| 157 | + "docker; create_args: --some-option='this; that'", |
| 158 | + positional_arg_names=["name"], |
| 159 | + kw_arg_names=["create_args"], |
| 160 | + ) == { |
| 161 | + "name": ["docker"], |
| 162 | + "create_args": ["--some-option=this; that"], |
| 163 | + } |
| 164 | + # colon in value |
| 165 | + assert parse_key_value_string( |
| 166 | + "docker; create_args: --mount a:b", |
| 167 | + positional_arg_names=["name"], |
| 168 | + kw_arg_names=["create_args"], |
| 169 | + ) == { |
| 170 | + "name": ["docker"], |
| 171 | + "create_args": ["--mount", "a:b"], |
| 172 | + } |
| 173 | + assert parse_key_value_string( |
| 174 | + "docker;create_args:--mount a:b", |
| 175 | + positional_arg_names=["name"], |
| 176 | + kw_arg_names=["create_args"], |
| 177 | + ) == { |
| 178 | + "name": ["docker"], |
| 179 | + "create_args": ["--mount", "a:b"], |
| 180 | + } |
| 181 | + # quoted value with spaces |
| 182 | + assert parse_key_value_string( |
| 183 | + "docker;create_args:'some string with spaces'", |
| 184 | + positional_arg_names=["name"], |
| 185 | + kw_arg_names=["create_args"], |
| 186 | + ) == { |
| 187 | + "name": ["docker"], |
| 188 | + "create_args": ["some string with spaces"], |
| 189 | + } |
| 190 | + |
| 191 | + # colon in positional value |
| 192 | + assert parse_key_value_string( |
| 193 | + "docker; --mount a:b", |
| 194 | + positional_arg_names=["name", "create_args"], |
| 195 | + ) == { |
| 196 | + "name": ["docker"], |
| 197 | + "create_args": ["--mount", "a:b"], |
| 198 | + } |
| 199 | + |
| 200 | + # empty option gives empty array |
| 201 | + assert parse_key_value_string( |
| 202 | + "docker;create_args:", |
| 203 | + positional_arg_names=["name"], |
| 204 | + kw_arg_names=["create_args"], |
| 205 | + ) == { |
| 206 | + "name": ["docker"], |
| 207 | + "create_args": [], |
| 208 | + } |
0 commit comments