|
3 | 3 | import doctest |
4 | 4 |
|
5 | 5 | import external_tool_upgrade |
6 | | -from external_tool_upgrade import ExternalToolVersion, filter_versions_by_constraint |
| 6 | +from external_tool_upgrade import ( |
| 7 | + PLATFORM_WIDTH, |
| 8 | + ExternalToolVersion, |
| 9 | + filter_versions_by_constraint, |
| 10 | + sorted_by_version_and_platform, |
| 11 | +) |
7 | 12 | from packaging.version import Version |
8 | 13 |
|
9 | 14 |
|
@@ -151,3 +156,65 @@ def test_version_constraint_with_v_prefix_upgrades_correctly() -> None: |
151 | 156 |
|
152 | 157 | result = _select_default_version_with_constraint(known_versions, current_default, constraint) |
153 | 158 | assert result == "v5.0" |
| 159 | + |
| 160 | + |
| 161 | +def test_encode_pads_platform_to_fixed_width() -> None: |
| 162 | + v = ExternalToolVersion("1.0", "linux_arm64", "abc123", 100) |
| 163 | + encoded = v.encode() |
| 164 | + parts = encoded.split("|") |
| 165 | + assert parts[1] == "linux_arm64 " |
| 166 | + assert len(parts[1]) == PLATFORM_WIDTH |
| 167 | + |
| 168 | + |
| 169 | +def test_encode_no_padding_needed_for_max_width_platform() -> None: |
| 170 | + v = ExternalToolVersion("1.0", "macos_x86_64", "abc123", 100) |
| 171 | + encoded = v.encode() |
| 172 | + parts = encoded.split("|") |
| 173 | + assert parts[1] == "macos_x86_64" |
| 174 | + assert len(parts[1]) == PLATFORM_WIDTH |
| 175 | + |
| 176 | + |
| 177 | +def test_encode_decode_round_trip() -> None: |
| 178 | + original = ExternalToolVersion("2.0", "linux_arm64", "abc123def456", 999) |
| 179 | + decoded = ExternalToolVersion.decode(original.encode()) |
| 180 | + assert decoded == original |
| 181 | + |
| 182 | + |
| 183 | +def test_sorted_by_version_and_platform() -> None: |
| 184 | + versions = [ |
| 185 | + ExternalToolVersion("2.0", "macos_x86_64", "a", 1), |
| 186 | + ExternalToolVersion("1.0", "linux_arm64", "b", 2), |
| 187 | + ExternalToolVersion("2.0", "linux_arm64", "c", 3), |
| 188 | + ExternalToolVersion("1.0", "macos_x86_64", "d", 4), |
| 189 | + ExternalToolVersion("2.0", "linux_x86_64", "e", 5), |
| 190 | + ] |
| 191 | + result = sorted_by_version_and_platform(versions) |
| 192 | + |
| 193 | + expected_order = [ |
| 194 | + ("2.0", "linux_arm64"), |
| 195 | + ("2.0", "linux_x86_64"), |
| 196 | + ("2.0", "macos_x86_64"), |
| 197 | + ("1.0", "linux_arm64"), |
| 198 | + ("1.0", "macos_x86_64"), |
| 199 | + ] |
| 200 | + actual_order = [(v.version, v.platform) for v in result] |
| 201 | + assert actual_order == expected_order |
| 202 | + |
| 203 | + |
| 204 | +def test_sorted_by_version_and_platform_with_non_pep440_versions() -> None: |
| 205 | + versions = [ |
| 206 | + ExternalToolVersion("v2.1.0-M5-18-gfebf9838c", "linux_x86_64", "a", 1), |
| 207 | + ExternalToolVersion("v2.1.24", "linux_x86_64", "b", 2), |
| 208 | + ExternalToolVersion("v2.1.6", "linux_x86_64", "c", 3), |
| 209 | + ExternalToolVersion("v2.0.16-169-g194ebc55c", "linux_x86_64", "d", 4), |
| 210 | + ] |
| 211 | + result = sorted_by_version_and_platform(versions) |
| 212 | + |
| 213 | + expected_order = [ |
| 214 | + "v2.1.24", |
| 215 | + "v2.1.6", |
| 216 | + "v2.1.0-M5-18-gfebf9838c", |
| 217 | + "v2.0.16-169-g194ebc55c", |
| 218 | + ] |
| 219 | + actual_order = [v.version for v in result] |
| 220 | + assert actual_order == expected_order |
0 commit comments