|
2 | 2 | from typing import Any |
3 | 3 | import base64 |
4 | 4 | import binascii |
| 5 | +import random |
5 | 6 |
|
6 | 7 | from librt.base64 import b64encode, b64decode, urlsafe_b64encode, urlsafe_b64decode |
7 | 8 |
|
8 | 9 | from testutil import assertRaises |
9 | 10 |
|
| 11 | +rand_values = [random.randbytes(random.randint(1, 2000)) for _ in range(2000)] |
| 12 | + |
10 | 13 | def test_encode_basic() -> None: |
11 | 14 | assert b64encode(b"x") == b"eA==" |
12 | 15 |
|
@@ -35,6 +38,9 @@ def test_encode_different_strings() -> None: |
35 | 38 | for b in b"", b"ab", b"bac", b"1234", b"xyz88", b"abc" * 200: |
36 | 39 | check_encode(b) |
37 | 40 |
|
| 41 | + for b in rand_values: |
| 42 | + check_encode(b) |
| 43 | + |
38 | 44 | def test_encode_wrapper() -> None: |
39 | 45 | enc: Any = b64encode |
40 | 46 | assert enc(b"x") == b"eA==" |
@@ -84,6 +90,9 @@ def test_decode_different_strings() -> None: |
84 | 90 | for b in b"", b"ab", b"bac", b"1234", b"xyz88", b"abc" * 200: |
85 | 91 | check_decode(b) |
86 | 92 |
|
| 93 | + for b in rand_values: |
| 94 | + check_decode(b) |
| 95 | + |
87 | 96 | def is_base64_char(x: int) -> bool: |
88 | 97 | c = chr(x) |
89 | 98 | return ('a' <= c <= 'z') or ('A' <= c <= 'Z') or ('0' <= c <= '9') or c in '+/=' |
@@ -150,18 +159,40 @@ def test_decode_wrapper() -> None: |
150 | 159 | with assertRaises(TypeError): |
151 | 160 | dec(b"x", b"y") |
152 | 161 |
|
153 | | -def check_urlsafe_b64encode(b: bytes) -> None: |
| 162 | +def check_urlsafe_encode(b: bytes) -> None: |
154 | 163 | assert urlsafe_b64encode(b) == getattr(base64, "urlsafe_b64encode")(b) |
155 | 164 |
|
156 | 165 | def test_urlsafe_b64encode() -> None: |
157 | | - check_urlsafe_b64encode(bytes([x for x in range(256)])) |
158 | | - |
159 | | -def check_urlsafe_b64decode(b: bytes) -> None: |
| 166 | + check_urlsafe_encode(b"") |
| 167 | + check_urlsafe_encode(b"a") |
| 168 | + check_urlsafe_encode(b"\xf8") |
| 169 | + check_urlsafe_encode(b"\xfc") |
| 170 | + check_urlsafe_encode(b"\xfcx") |
| 171 | + check_urlsafe_encode(b"\xfcxy") |
| 172 | + check_urlsafe_encode(b"\xfcxyz") |
| 173 | + check_urlsafe_encode(bytes([x for x in range(256)])) |
| 174 | + |
| 175 | + for b in rand_values: |
| 176 | + check_urlsafe_encode(b) |
| 177 | + |
| 178 | +def check_urlsafe_decode(b: bytes) -> None: |
160 | 179 | enc = urlsafe_b64encode(b) |
161 | 180 | assert urlsafe_b64decode(enc) == getattr(base64, "urlsafe_b64decode")(enc) |
| 181 | + enc2 = b64encode(b) |
| 182 | + assert urlsafe_b64decode(enc2) == getattr(base64, "urlsafe_b64decode")(enc2) |
162 | 183 |
|
163 | 184 | def test_urlsafe_b64decode() -> None: |
164 | | - check_urlsafe_b64decode(bytes([x for x in range(256)])) |
| 185 | + check_urlsafe_decode(b"") |
| 186 | + check_urlsafe_decode(b"a") |
| 187 | + check_urlsafe_decode(b"\xf8") |
| 188 | + check_urlsafe_decode(b"\xfc") |
| 189 | + check_urlsafe_decode(b"\xfcx") |
| 190 | + check_urlsafe_decode(b"\xfcxy") |
| 191 | + check_urlsafe_decode(b"\xfcxyz") |
| 192 | + check_urlsafe_decode(bytes([x for x in range(256)])) |
| 193 | + |
| 194 | + for b in rand_values: |
| 195 | + check_urlsafe_decode(b) |
165 | 196 |
|
166 | 197 | [case testBase64FeaturesNotAvailableInNonExperimentalBuild_librt_base64] |
167 | 198 | # This also ensures librt.base64 can be built without experimental features |
|
0 commit comments